Macro Packages

LaTeX 宏包小记 (2): listings

本文及所附代码, 文件在署名-非商业性使用-相同方式共享 3.0版权协议下发布, 转载请注明出自aifreedom.com

新年第一篇 post, 祝所有的读者新年快乐(只是不知道这么久都没有更新, 是否还有读者). 去年一年严格地说只写了2篇日志, 新年赶紧补上一篇吧.

这个 \LaTeX 宏包的介绍系列我会坚持把它写下去. 很高兴地看到周围有更多的同学和老师(对, 最新见到几位听说/用过 \LaTeX 的老师了), 这让我有更大的兴趣和信心继续介绍和普及 \LaTeX 的知识了.

再次警告: \LaTeX 是一个较难上手的软件, 而且在熟悉后可能会使你成为一个完美主义者并再也不愿意使用 Microsoft Word.

言归正传, 为 \LaTeX 实现代码高亮的宏包不可谓不多, listings 是我比较熟悉和常用的一个. 这里稍稍总结一下 listings 常用的参数, 更多的配置选项可以在它的手册里查到.

LaTeX 宏包小记 (1): 用 prosper 制作幻灯片

本文及所附代码, 文件在署名-非商业性使用-相同方式共享 3.0版权协议下发布, 转载请注明出自aifreedom.com

在这个 Blog 里, 我已经写过几篇配置 LaTeX 的文章了, 包括 CJK 宏包字体的配置texlive 2008 的配置. 现在计划开始写一个新的系列, 介绍 LaTeX 里林林总总的宏包(Macro Packages)们.

这个系列的文章不是为对 LaTeX 一无所知的新手写的, 因为我不擅长写入门教程. 但如果你确实需要一本 LaTeX 入门教程, 我极力推荐 “The Not So Short Introduction to LaTeX 2ε”. 在 ctex.org 可以找到它的中文版, “一本不太简短的 LaTeX 2ε 介绍”.

虽说这个系列不是为新手写的, 但它们也不是为那些已经能闭着眼睛就可以用 LaTeX 排出想要的任何效果的高手写的. 这些文章可以看作是我的学习笔记, 而我希望能在 Blog 里同更多和我一样正在努力成为 LaTeX 高手的朋友们分享. 在这些日志里, 我记录下了使用过的一些有趣和/或有用的宏包. 但实话实说, 这些文章都相当没有技术含量. 在我自己看来, 都如白开水一般平淡无味.

在开始正文前, 先废话几句. TeX 和 LaTeX 这两个词究竟该怎么读? Knuth 说 “TeX” 来自希腊单词 “texnologia”(technology) 的第一个音节, 发音为 “Tech”, 就是英文单词 “technology” 的第一个音节. 而 “LaTeX” 的发音是 “Lay-tech” 或 “Lah-tech”. TeX 的伟大不仅仅体现在 Knuth 大神那近乎完美的编码, 更体现在 Knuth 大神为它留下的强大的可扩展能力. LaTeX 就是基于 TeX 开发的一个宏包, 它的出现让 TeX 更平易近人, 使普通人也能轻松地完成高质量的排版.

LaTeX 最常见的用途是用来为学术论文进行排版, 因为它可以清晰地体现文章的逻辑结构, 也可以让作者方便地排版数学公式, 更可以很容易地生成像脚注, 交叉引用, 目录和引用文献这样的复杂结构. 但今天要介绍的宏包 prosper 却是用来生成幻灯片的. 使用 LaTeX 生成幻灯片的优势在于它有 METAFONT, tikz 等这样强大的绘图工具的支持, 在演示逻辑性很强的过程时(比如, 演示最短路的算法时)会相当方便. 但缺点是因为生成的文件是 pdf, 很难有丰富的动画效果.

但我这次使用它却只是”闲得蛋疼”. 这学期的英文写作课上, 我要代表小组做一个 presentation. 在写幻灯片时, 我放弃了 WPS, 转而尝试了一下完全不熟悉的 prosper.

首先, 文档类型要声明为 prosper, 即 \documentclass{prosper}. 在这里可以声明一些参数, 比如是否生成黑白的幻灯片, 使用何种主题等等. 在导言部分可以用 \title, \subtitle, \author, \institution 等命令定义幻灯片的标题, 作者等信息. 然后就可以 \begin{document}, \maketitle 了. 日志的最后有我这次 presentation 的幻灯片和源文件, 不知道我这段话说了什么没关系, 可以参照那个源文件的结构.

每一页幻灯片都是一个 slide 环境, 就是被 \begin{slide}{title} 和 \end{slide} 包围着的一段文字. 在幻灯片里, 可以随意书写文字, 但为了体现演讲的逻辑性, 应该多使用 itemize 和 enumerate 环境.

为了使幻灯片里的条目可以随着演讲者的要求, 一条一条地出现在屏幕上, 在 PowerPoint 里可以使用动画. 但在这里只能让第一张幻灯片上写着第一条, 第二张第二条, 如此产生它们是一条一条出现的伪动画效果了. 当然, 不需要你自己人肉完成这项工作, 但你得告诉 LaTeX 到哪里是第一条, 到那里是第二条.

需要这样效果的部分要用 \overlay{n}{…} 包围起来, 参数 n 是希望分成的页数. 在内容里, 用 \FromSlide{m} 告诉 LaTeX, 我后面的内容从第 m 张幻灯片才开始显示. 比如在下面的这张幻灯片里, 我想让第一级 itemize 每一个 item 依次出现. 于是我在第一个 item 之前加上了 \FromSlide{1}, 在第二个 item 之前加上了 \FromSlide{2}. 效果就是生成的 pdf 里会出现两张幻灯片, 第一张只有第一条, 而第二张上有两条. 类似的标签还有 \UntilSlide{m} 和 \OnlySlide{m}, 它们表达的含义也很明显.

\overlays{2}{
  \begin{slide}{Demerit in First Draft}
    \begin{itemize}
      \FromSlide{1}
    \item Third Supporting Paragraph
      \begin{itemize}
      \item Mere abstract statements
      \item No example supporting the statement of reliability
      \item The only example is for exception
      \end{itemize}
      \FromSlide{2}
    \item Conclusive Paragraph
      \begin{itemize}
      \item Metaphor
      \item But draw it out more
      \item How is the car like comfortable old clothes?
      \end{itemize}
    \end{itemize}
  \end{slide}}

prosper 自带了一些幻灯片的样式, 但它们大多数都让用惯了 PowerPoint 的人不敢恭维. 我用的这个 fyma 算是里面比较清新的一种了. 样式文件可以在 prosper 的安装文件夹里找到, 那些叫做 “PPRxxxx.sty” 的文件都是样式文件了. 想使用哪种样式需要在 documentclass 的选项里声明. 想自定义样式的可以去查一下 prosper 的手册. texlive 2008 里, prosper 的安装路径是 /usr/local/texlive/2008/texmf-dist/tex/latex/prosper

最后, prosper 不支持 pdfLaTeX, 当然也就不支持 xeLaTeX. 所以想要用它生成 pdf 的幻灯片需要使用 “latex slide.tex && dvipdf slide.dvi” 命令. 而且这带来的问题就是如果要生成带中文的幻灯片需要配置 CJK 宏包. 关于 CJK 宏包的设置和中文字体的按照, 可以参见这里.

下面是源文件和编译好的 pdf.