背景
enscript命令可以将语法突出显示应用于各种类型的源文件,包括SQL语句、shell脚本、PHP、HTML等等。我使用enscript生成300 for图像的源代码,用于技术手册:
问题
下面的shell脚本几乎按照需要执行转换:
#!/bin/bash
DIRNAME=$(dirname $1)
FILENAME=$(basename $1)
# Remove the extension from the filename.
BASENAME=${FILENAME%%.*}
FILETYPE=${FILENAME##*.}
LIGHTGRAY="#f3f3f3"
enscript --escapes --color -f Courier10 -X ps -B -1 --highlight=$FILETYPE \
$2 -h -o - $1 | \
gs -dSAFER -sDEVICE=pngalpha -dGraphicsAlphaBits=4 -dNOPAUSE -r300 \
-sOutputFile=$BASENAME.png -dBackgroundColor=16$LIGHTGRAY > /dev/null && \
convert -trim $BASENAME.png $BASENAME-trimmed.png && \
mv $BASENAME-trimmed.png $BASENAME.png问题是背景不是浅灰色。根据enscript手册页,--escapes (-e)选项表示文件(即$1)中嵌入了enscript-specific控制序列。
添加控制序列意味着必须重复代码,这就违背了拥有单个源的目的。
解决方案
enscript文档意味着在运行脚本之前应该可以将两个文件(目标文件和“头文件”)连接在一起,以创建第三个文件:
^@shade{0.85} -- header line
#!/bin/bash -- start of source file然后,在命令完成后删除第三个文件。
问题
Q.1.
Q.2.(例如,用LyX编写这本书,并使用LaTeX命令进行导入和语法突出显示。)
发布于 2010-11-02 08:02:59
Q1您可以使用大括号'{}‘进行I/O重定向:
{ echo "^@shade{0.85}"; cat $1; } |
enscript --color -f Courier10 -X ps -B -1 --highlight=$FILETYPE $2 -h -o - |
gs -dSAFER -sDEVICE=pngalpha -dGraphicsAlphaBits=4 -dNOPAUSE -r300 \
-sOutputFile=$BASENAME.png -dBackgroundColor=16$LIGHTGRAY > /dev/null &&
convert -trim $BASENAME.png $BASENAME-trimmed.png &&
mv $BASENAME-trimmed.png $BASENAME.png这假设当没有给出一个明确的文件名时,enscript读取它的标准输入;如果没有,您可能需要在bash中使用一个选项(可能是'-i -')或一些更严重的魔术,甚至可能是‘进程替换’。
还可以使用括号运行子shell:
(echo "^@shade{0.85}"; cat $1) | ...请注意,cat后面的分号是带大括号的,而不是带括号的(在打开大括号之后需要一个空格)--这就是shell脚本的奥秘。
Q2我没有任何可供选择的选择。当我制作一本书(20年前,现在使用troff)时,我编写了一个程序将源代码转换成必要的标记,因此这本书是从源代码中生成的,而是通过一个自动化的过程生成的。
( 300 dpi足够高分辨率吗?)
编辑
要解决enscript程序解释转换脚本本身嵌入的转义序列的问题,请执行以下操作:
{ cat ../../enscript-header.txt $1; } |发布于 2010-11-02 08:13:19
Q2:在列单包中使用LaTeX。
https://stackoverflow.com/questions/4075639
复制相似问题