Skip to content

zm_builder is a ruby script to format code fragments and build them into one pdf file.

Notifications You must be signed in to change notification settings

quark-zju/zm_builder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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)

RubyGems

  • 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 Pagella
  • CJK_FONT 中文字体,默认为 Adobe 黑体 Std
  • MONO_FONT 等宽字体,默认为 Consolas

输入

输入是有一定组织的文件,参考 sample/src 目录

文件夹名

  • 目前处理一层文件夹,也就是说代码只能放在一层文件夹内,否则会被忽略
  • 文件夹名称中如果出现下划线,则生成对应的章和节,否则只有一个章
    • 比如,如果有“图论_匹配”和“图论_网络流”两个文件夹,则会生成一个名叫“图论”的章,在这一章下面有“匹配”和“网络流”两个节
    • 再比如,“数论”和“应用”两个文件夹名称都没有下划线,那么它们是两章
  • . 开头的隐藏目录或文件会被忽略
  • 脚本硬编码了一些目录名和所对应英文名称,影响章节的顺序。新建的目录,会排在后面,如果要修改这种顺序,需要修改代码

文件名

  • 文件名会被当作节或者是节下面的小节标题。其中下划线会被换成空格,请避免在文件名中使用空格,全部使用下划线
  • 文件可以有不同的类型,按照后缀来区分,后缀应该是小写字母
    • .txt 文件会被当作无格式纯文本填入对应章节,同章节中,这种类型的文件会最先处理
    • .tex 文件会被原封不动地当作 TeX 代码填入对应章节,它适合用来写一些带有数学公式等的内容。注意这种类型的文件乱写会最后的生成失败,所以要谨慎
  • .c, .cc, .cpp, .java, .pas 这些代码文件会被格式化后填入对应章节,格式化内容主要包括:
    • 以 4 个空格作为缩进重新整理整个代码(C 和 Java)
    • 语法高亮,其中数字(包括整数和浮点数)会被加上下划线以更好地区分 1l
  • .pdf 文件会被整页插入到对应位置,依然使用主文档的页眉页脚

文件内容

  • .txt 和代码文件中,如果一行超过 88 个字符(一个汉字算做两个字符),会被强制折行,被折行的行最后会有一个 \ 符号
  • 除了 .pdf 类型的文件,其他文件必须是 UTF-8 编码

输出

最终输出是一个 pdf 文件,参考 sample/output.pdf

用法

  1. 在终端进入输入所在的目录,例如 sample/src
  2. 执行 zm_builder.sh
  3. 如果一切顺利的话, ../build/output.pdf 为输出文件

About

zm_builder is a ruby script to format code fragments and build them into one pdf file.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published