LaTeX 中的分页环境

近来搞一个书稿,希望自己设计一个环境可以加点分页的边框底色什么的,毕竟么,内容和版式都重要,看得身心愉悦才能更好地看下去。于是想设定一个带底色或者不带底色的环境,在外侧加一个竖线,看起来多么简洁的想法啊,真做起来可不太容易。

找找现有的东西吧,找来找去找到一个 changebar,看看用起来挺简单,拿 XeTeX 一跑,报错:( 发现这个包的逻辑是算出坐标,然后用很多特殊的 ps 命令把线最后补上去。按说 XeTeX 对 pstricks 支持的还不错… 可惜不行。我这书稿肯定是不可能倒回去用 dvips 的,看看网上似乎有成功把它移植到 pdflatex 上的,但原作者从不回邮件,宏包也多年不更新了。本来想搞一下这些 special 的命令,终因没有时间细究而作罢。加底色的盒子可以用 xcolor,但是分页就实在要费些周折。

后来找到了 mdframed 包,可以画分页的盒子和边框。研究了一下包的原理,发现也颇为不易:把分页的内容暂存起来,然后分别按照第一页、中间页和末页的情况,用 rule 或者 tikz 或者 pstricks 画出底色,然后再把字用盒子放进去。作者实际上把这些盒子的计算都算好了,可以自己来定义 style 设定作画的方法。这确实是个不错的主意,处理起来余地也挺大。不过后来发现,边框和边距设定都是按照左右来分的,碰到双面排版的情况,左右边距实际上应该是内外边距。事情繁杂也没有心情仔细读代码,于是试着给作者 Marco Daniel 写信要求增加双面排版的功能。3 分钟后收到回信,承诺周末帮我搞一个出来。一日之后作者如约回信,附上了更新后的宏包、文档和 style 文件,说完全支持所有的定制功能很困难,不过单设一条框线可以,暂时只支持用 rule 画线。调试一下发现有些问题,后又往复几次,迅速解决,感叹作者之敬业及效率,实在是好人啊!

作者说后续再把用 tikz 和 pstricks 画线的功能补上,正式的新版本很值得期待!再次对 Marco 表示感谢!