Friday, May 22, 2009

關於IEEE要求的雙欄文檔底部對齊

以下摘自CTeX-Faq文檔,p15:

40 如何使得双栏文档保持底部对齐?
在LATEX 标准文档类中使用twocolumn 选项产生双栏格式文档的时候,如果一页的内容不足以排满页
面时,LATEX 的结果是先排满左栏,然后再排版右栏。这样就造成了两栏的长度不相等,底部不齐。很多时候
我们不希望这种排版结果。
这个问题只有在用标准文档类的twocolumn 模式的时候才会遇到,使用multicol 宏包就可以避免这个问
题(参见问题39 )。但是multicol 宏包也有一些缺点,例如不允许单栏的浮动对象(参见问题59 )。
要使标准文档类的twocolumn 模式下也能做到双栏底部对齐,可以通过手工调整分栏的位置。在
twocolumn 模式下\newpage 命令使LATEX 开始在新的一栏上排版,如果单前栏是左栏,就换到右栏上开始
排版。在合适的地方使用\newpage 命令可以使得双栏底部对齐(注意,不能用\clearpage 命令,这个命令
会开始在新的一页上排版,而不管当前在哪一栏上)。几乎没有人愿意使用这种方法,不仅因为它需要你手工
计算需要插入命令的位置,每次改动文档都有可能需要变动\newpage 命令的位置,而且对于一些自动生成
的文档内容(例如参考文献和索引),要插入\newpage 命令十分困难。
flushend 宏包通过修改LATEX 核心定义来解决这个问题。使用它提供的\flushend 命令可以使得双栏底
部对齐,而\raggedend 命令则取消底部对齐。\flushend 命令会在宏包装入的时候自动运行。flushend 宏包
只对文档最后一页有效,也就是说所有中间的强制换页,或者章节的自动换页导致的双栏底部不齐现象都无
法解决。
balance 是另一个针对该问题的宏包,它比flushend 宏包更加完善,而且对整个文档的任何位置都有
效。balance 宏包提供了\balance 命令来打开双栏底部对齐机制, \nobalance 命令来关闭这个机制。和
flushend 宏包不同,它在装入的时候缺省不打开对齐机制,因此需要在文档中加入\balance 命令来启用底部
对齐。
在使用这些宏包的时候需要注意,单栏的浮动对象有可能破坏这些宏包的对齐机制。这种时候需要手工
调整浮动对象的位置来改善排版效果。这也是multicol 宏包不支持单栏浮动对象的原因之一。

No comments: