首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不更改文件的情况下将头文件准备为文件

在不更改文件的情况下将头文件准备为文件
EN

Stack Overflow用户
提问于 2010-11-02 07:20:33
回答 2查看 823关注 0票数 1

背景

enscript命令可以将语法突出显示应用于各种类型的源文件,包括SQL语句、shell脚本、PHP、HTML等等。我使用enscript生成300 for图像的源代码,用于技术手册:

  • 根据实际的源代码生成书籍的内容。
  • 随书一起分发源代码,不作任何修改。
  • 在写书时运行并测试脚本。

问题

下面的shell脚本几乎按照需要执行转换:

代码语言:javascript
复制
#!/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文档意味着在运行脚本之前应该可以将两个文件(目标文件和“头文件”)连接在一起,以创建第三个文件:

代码语言:javascript
复制
^@shade{0.85}                  -- header line
#!/bin/bash                    -- start of source file

然后,在命令完成后删除第三个文件。

问题

Q.1.

Q.2.(例如,用LyX编写这本书,并使用LaTeX命令进行导入和语法突出显示。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-02 08:02:59

Q1您可以使用大括号'{}‘进行I/O重定向:

代码语言:javascript
复制
{ 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:

代码语言:javascript
复制
(echo "^@shade{0.85}"; cat $1) | ...

请注意,cat后面的分号是带大括号的,而不是带括号的(在打开大括号之后需要一个空格)--这就是shell脚本的奥秘。

Q2我没有任何可供选择的选择。当我制作一本书(20年前,现在使用troff)时,我编写了一个程序将源代码转换成必要的标记,因此这本书是从源代码中生成的,而是通过一个自动化的过程生成的。

( 300 dpi足够高分辨率吗?)

编辑

要解决enscript程序解释转换脚本本身嵌入的转义序列的问题,请执行以下操作:

代码语言:javascript
复制
{ cat ../../enscript-header.txt $1; } |
票数 2
EN

Stack Overflow用户

发布于 2010-11-02 08:13:19

Q2:列单包中使用LaTeX。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4075639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档