zm_builder is a ruby script to format code fragments and build them into one pdf file.
zm_builder 最初在 2010 年实现,用于浙江大学 ACM/ICPC 集训队模板的自动格式化输出。
圆括号中的版本为测试过无问题的版本,使用其他版本也有可能没有问题
- ruby (1.9.2)
- pygmentize (1.4)
- xelatex (TeX Live 2012) (3.1415926-2.3-0.9997.5)
- fc-match (fontconfig) (2.8.0)
- astyle (2.01)
- term-ansicolor (1.0.7)
以下为默认字体,由于字体可通过配置更换,所以在存在自定义字体配置时,它们不是必需的
- TeX Gyre Pagella (otf-texgyre)
- Adobe 黑体 Std
- Consolas
以下环境变量会影响脚本的行为,但皆为可选,空缺时脚本使用默认值
OUTPUT_PATH
输出路径,缺省为[输入路径]/../build
OUTPUT_FILE
输出文件名,缺省为output
,不需要扩展名PAGE_FOOTER
页脚文字,可以是 TeX 代码MAIN_FONT
普通字体,默认为 TeX Gyre PagellaCJK_FONT
中文字体,默认为 Adobe 黑体 StdMONO_FONT
等宽字体,默认为 Consolas
输入是有一定组织的文件,参考 sample/src
目录
- 目前处理一层文件夹,也就是说代码只能放在一层文件夹内,否则会被忽略
- 文件夹名称中如果出现下划线,则生成对应的章和节,否则只有一个章
- 比如,如果有“图论_匹配”和“图论_网络流”两个文件夹,则会生成一个名叫“图论”的章,在这一章下面有“匹配”和“网络流”两个节
- 再比如,“数论”和“应用”两个文件夹名称都没有下划线,那么它们是两章
- 以
.
开头的隐藏目录或文件会被忽略 - 脚本硬编码了一些目录名和所对应英文名称,影响章节的顺序。新建的目录,会排在后面,如果要修改这种顺序,需要修改代码
- 文件名会被当作节或者是节下面的小节标题。其中下划线会被换成空格,请避免在文件名中使用空格,全部使用下划线
- 文件可以有不同的类型,按照后缀来区分,后缀应该是小写字母
- .txt 文件会被当作无格式纯文本填入对应章节,同章节中,这种类型的文件会最先处理
- .tex 文件会被原封不动地当作 TeX 代码填入对应章节,它适合用来写一些带有数学公式等的内容。注意这种类型的文件乱写会最后的生成失败,所以要谨慎
- .c, .cc, .cpp, .java, .pas 这些代码文件会被格式化后填入对应章节,格式化内容主要包括:
- 以 4 个空格作为缩进重新整理整个代码(C 和 Java)
- 语法高亮,其中数字(包括整数和浮点数)会被加上下划线以更好地区分
1
和l
- .pdf 文件会被整页插入到对应位置,依然使用主文档的页眉页脚
- .txt 和代码文件中,如果一行超过 88 个字符(一个汉字算做两个字符),会被强制折行,被折行的行最后会有一个
\
符号 - 除了 .pdf 类型的文件,其他文件必须是 UTF-8 编码
最终输出是一个 pdf 文件,参考 sample/output.pdf
- 在终端进入输入所在的目录,例如
sample/src
- 执行
zm_builder.sh
- 如果一切顺利的话,
../build/output.pdf
为输出文件