Sunday, September 21, 2008

这几天使用LaTeX的一些新感受

在学校找了个用LaTeX排版的差事, 也不知道能做多久, 不过花了3天时间排了本近60页的杂志, 还是很有成就感的, 嘿嘿~

期间也发现有一些遗忘的地方, 于是我这几天干的最多的一件事情就是在CTeX论坛上搜和在Google上搜, 对于以前的一些东西又有了新的理解.

先来说说代码显示吧, 以前用了一个很笨的方法来做出那种灰色背景的效果, 结果在排大猫的那段很长很长的代码时出现了问题. 那代码要跨页, 所以以前的表格方法不能把代码全部显示出来, 导致大量代码被丢弃了, 很显然这种方法已经行不通了. 于是上网去找解决方案, 找到一个listings的宏包, 看介绍不错, 还支持语法高亮呢. 然后就兴致勃勃地用上了, 实现灰色背景还是很简单的, 可一编译又发现了一个很严重的问题, 如果某行代码太长超过一行了, 虽然listings可以自动换行, 但那行就没有灰色背景了! 这样的效果可想而知, 于是我还很认真地花了一些时间去把listings的说明文档好好看了一遍, 想找找有没有什么解决的办法, 结果还是失败了, 不过看CTeX论坛上也是有些人遇到这种情况, 而有些人正常, 难道是人品问题 (- -)? 没办法, 为了好的代码显示效果, 只能另辟蹊径了. 恐怕我当初也不会想到, 最后的方法竟然如此简单, 仅仅是把代码放在一个shaded环境里就行了, 如下:
\usepackage{color}
\usepackage{framed}

\definecolor{shadecolor}{gray}{0.85}
放在导言区就行了, 然后像这样处理代码:
\begin{shaded}
\begin{verbatim}
...
\end{verbatim}
\end{shaded}
什么跨页, 什么换行, 一切都搞定, 哈哈~

然后还是讲讲代码, 当初我在排第一段代码的时候就遇到了困难, 因为这里面有中文注释... 以前从来没考虑过这种事情, 查了下, 是verbatim环境使用的字体Typewriter不支持显示中文的缘故, 这也是LaTeX默认用来显示代码的字体. 不过看别人用CJK的显示都是正常的, 看来CJK确实要高级些, 没办法, 谁叫咱用的是XeTeX, 毕竟现在还不是很成熟. 我想用xeCJK啊, 残念, 编译不出来就这样, 唉~ 然后在这里找到了解决办法:
\setsansfont{DejaVu Sans YuanTi Mono}
\makeatletter
\def\verbatim@font{\sffamily\small}
\makeatother
只好忍痛替换了tt字体, 用上了猪猪的强大字体, 等宽加中文都支持.

因为杂志的栏目分类不能出现编号, 所以默认的那种是不行的, 下面是解决:
\phantomsection % 让目录中的链接正确
\section*{\textcolor{darkgreen}{\textbf{本刊致谢}}} % 不显示编号, 并且不出现在目录中
\addcontentsline{toc}{section}{卷首语} % 添加到目录中
\sectionmark{卷首语} % 页眉

关于浮动环境, 这个以前真的是很头疼的, 往往它不会按照所设想的位置放置, 搞得某些图片直接占据了一整页. 然后某天在CTeX上看到一个很强大的回复, 可以把浮动环境放在任何你需要的地方, 一个字, 爽! 如下:
\usepackage{float}

\begin{figure}[H] % 就是这个神奇的H
...
\end{figure}

还有一个计数器的问题, 因为杂志有一个封面, 所以会占据掉一整页. 这样正文就是从第2页开始计数了, 虽然是个小问题, 不过还是希望能够符合习惯点. 解决也很简单的, 这还得归功于图书馆的那本强大的LaTeX书, 如下:
\setcounter{page}{0}
这句就将页码的计数器设置为0了, 所以放在第2页的代码前面就行了.

P.S. 因为杂志的缘故, 认识了joy, 牛逼的Emacs, Python, shell脚本使用者, 好好学习, 天天向上.

3 comments:

  1. “关于浮动环境, 这个以前真的是很头疼的, 往往它不会按照所设想的位置放置, 搞得某些图片直接占据了一整页. ”

    你好,我现在用latex也是出现了你说的上面的这个问题。可是怎么也解决不了。
    非常着急,能仔细说说你是怎么解决的吗?

    我的邮件: yukee.zhang@gmail.com

    ReplyDelete
  2. 我用了你说的命令之后,结果出现图和右栏的文字叠加的现象。。。。
    超级郁闷

    ReplyDelete
  3. @zhang
    你是用的双栏排版吗? 这个我没试过, 不清楚了.

    ReplyDelete