背景
该enscript
命令可以将语法高亮应用于各种类型的源文件,包括 SQL 语句、shell 脚本、PHP 代码、HTML 文件等。我正在使用enscript
为技术手册生成 300dpi 的源代码图像,以:
- 根据实际源代码为本书生成内容。
- 随书一起分发源代码,无需任何修改。
- 在编写本书时运行和测试脚本。
问题
以下 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
嵌入其中的特定控制序列。
添加控制序列意味着必须复制代码,这违背了拥有单一来源的目的。
解决方案
该enscript
文档暗示在运行脚本之前应该可以将两个文件(目标和“标题”)连接在一起,以创建第三个文件:
^@shade{0.85} -- header line
#!/bin/bash -- start of source file
然后在命令完成后删除第三个文件。
问题
问题 1。在不使用第三个文件的情况下,将控制序列和源文件通过管道传输到程序的更有效方法是什么?enscript
问题 2。在满足我所描述的单一来源要求的同时,还有哪些其他选项可用于自动化一本书的语法突出显示?(例如,用 LyX 编写本书并使用 LaTeX 命令进行导入和语法高亮。)