LaTeX

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.

TeX Live 2008 安装 & 配置中文支持 (下)

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

居然拖了两个多月都没把这篇文章写完, 但十月份之前总算交出了它的下半篇.

上次说到把 XeLaTeX 安装好了. 但默认的设置对中英文混排支持还不够好, 不能对中文和英文分别设置字体, 也不能很好地处理中文和英文之间的空白距离. 我们可以安装孙文昌老师开发的 xeCJK 宏包来解决这个问题.

xeCJK 的宏包可以在这里下载到. 这个不是最新版的 xeCJK, 因为最新版的 xeCJK 需要 xetex 0.9995.0 之后的版本(TeX Live 2009 或 MiKTeX 2.8). 而且新版的 xeCJK 已经被收入 ctex-kit 项目, 将随 TeX Live 2009 一起分发. 就是说, 等到 TeX Live 2009 Release 的时候, 它对中文的支持会比现在好很多.

把刚刚下载到的压缩包解压到 ~/.texlive2008/texmf/tex/xelatex/, 然后用mktexlsr 更新. (这里我不是很了解, 只是照葫芦画瓢, 没自己看过文档, 有什么问题还请诸位老师指正)

unzip xecjk-2_2_15.zip -d ~/.texlive2008/texmf/tex/xelatex/
cd ~/.texlive2008/texmf
mktexlsr .

在刚才下载的压缩包里的 doc 文件夹里有 xeCJK 的完整文档, 我这里给出一个我使用的 preamble 模板.

%# -*- coding: utf-8 -*-
\documentclass[a4paper]{article}

\usepackage[slantfont, boldfont, CJKtextspaces,
CJKmathspaces]{xeCJK} % 允许斜体和粗体
\setCJKmainfont[BoldFont={Adobe Heiti Std}, ItalicFont={Adobe Kaiti
  Std}]{Adobe Song Std} % 设置缺省中文字体
\setCJKmonofont{Adobe Fangsong Std} % 设置等宽字体

\setmainfont[Mapping=tex-text]{Liberation
  Serif} % 英文衬线字体
\setsansfont{Liberation Sans} % 英文无衬线字体
\setmonofont{Bitstream Vera Sans Mono} % 英文等宽字体
\punctstyle{kaiming} % 开明式标点格式
  
\usepackage{indentfirst} % 首段缩进
\begin{document}
  
{默认字体}   {\bfseries 粗体效果}   {\itshape 斜体效果}

这是Ai.Freedom的Blog的第101篇日志。

居然拖了两个多月都没把这篇文章写完,但十月份之前总算交出了它的下半篇。

上次说到把 XeLaTeX 安装好了。但默认的设置对中英文混排支持还不够好,不能
对中文和英文分别设置字体,也不能很好地处理中文和英文之间的空白距离。我
们可以安装孙文昌老师开发的 xeCJK 宏包来解决这个问题。

\end{document}

但这里给出的代码你很可能还无法编译, 因为你没有安装 Adobe 的字体. 这里用到的四个字体可以在这里下载到. 其中 Adobe Song Std 和 Adobe Heiti Std 是随 Adobe Reader 一起分发的, 根据 Lisence 可以免费使用, 关于另外两个字体的版权我还不是很清楚.

把它们下载回来了之后解压到 ~/.fonts 目录中. 然后执行

sudo fc-cache -fv

更新字体缓存. 好了, 把刚才的代码保存到 test.tex 后用

xelatex test.tex

编译就可以得到 test.pdf 了.

在下载的 xeCJK 的压缩包里, source 目录下有一个脚本用来为特定的字体生成标点符号. 按照 README 里的提示, 将 xecjksetpunct-main.tex 里用于 Windows 平台的部分注释掉, 把 Linux 里用到的语句的注释去掉, 然后把下面的字体设置成自己用的字体, 保存. 我们这里用的是 TeX Live, 所以执行

xelatex --shell-escape xecjksetpunct-main

然后把生成的 xeCJKpunct.spa 文件移动到 .texlive2008/texmf-var/tex/xelatex/xecjk/tex/xelatex/xecjk 目录下, 覆盖默认的 xeCJKpunct.spa 文件. 最后执行

texhash .

好了, 我们的配置总算是告一段落了. 关于 xeCJK 的更多详细的设置选项, 请查询它的文档. 学习 LaTeX 文档的排版, 有这样一本 “The not so Short Introduction to LaTeX“, 这个链接是中文版的, 还有 CTeX 论坛的版主 milksea 推荐的这个列表. 学习 LaTeX 的资料真的很多, 只要你愿意动手.

TeX Live 2008 安装 & 配置中文支持 (上)

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

Knuth 爷爷的 TeX 系统堪称完美! 但他在发明它的时候没有考虑到对英文之外的语言的支持, 因此用 LaTeX 给中文排版一直有些麻烦.

一年前, 我写过一篇日志介绍 TeX Live 2007 的中文支持配置. 但那个还是用 CJK 实现对中文的支持, 字体的配置比较麻烦. 而现在我要推荐的是 XeTeX, 它对中文的支持比 LaTeX + CJK 包要好很多. 这个解决方案是基于 XeLaTeX + xeCJK 实现对中文的支持. 其实 XeLaTeX 支持中文排版, 但它对中英文混排的支持不是很好. 它不能为中文英文分别设置字体, 也不能很好地控制中英文混排时的间距. 这些都是靠 xeCJK 这个宏包完成的. 去年的时候 LeafDuo 就跟我说 XeTeX 的中文支持很好, 但当时因为懒惰, 一直没有配置起来. 直到不久前写C语言实验报告, 才有了动力把 XeTeX 配置起来.

这篇日志主要记录的是我在 Ubuntu 中安装 TeX Live 2008 及配置中文支持的过程, 在 Windows 中安装与配置的过程与本文有些区别.

这一篇讲的是下载安装 TeX Live 2008, 下一篇讲的是将是 Linux 字体安装和 xeCJK 的配置.

Ubuntu 的源里就有 XeTeX 了, 而这里不使用源里的那个 XeTeX 是因为它的版本比较旧, 之后安装中文排版支持宏包会遇到一些麻烦.

TeX Live 可以直接在线安装, 也可以把光盘镜像下载回本地安装. 考虑到网速等问题, 我是下载镜像到本地之后安装的.

TeX Live 的镜像可以在 TeX Live 的主页下载到. 在中国, 使用 CTeX 的镜像下载会比较快.

1. 如果要使用图形界面安装, 需要先安装 perl-tk; 解压 lzma 格式的压缩包需要安装 lzma.

在 Ubuntu 的源里有这两个包, 可以使用 apt-get 安装.

sudo apt-get install perl-tk p7zip

2. 进入存下载的镜像的目录, 将压缩包解开.

注意, 这一步需要有 4-5G 的空余磁盘空间. 解压后的光盘镜像似乎有 2-3G.

lzma -d texlive2008.iso.lzma

3. 挂载刚刚解压出的 iso 镜像.

sudo mount -o loop texlive2008-20080822.iso /mnt

4. 执行安装程序

sudo /mnt/install-tl --gui

这时会弹出安装程序的窗口.

将最后一项 “Create symlinks in system directories” 勾上, 让它自动创建符号链接.

我几乎把所有的包都装上了, 如果你的硬盘空间足够, 也就不需要做什么改动了. 但可以在第四项 “Language Collections” 中去掉不需要的语言包, 节省几百兆的空间.

配置完后点击 “Install TeX Live“, 等上几分钟就装好了.

现在 XeLaTeX 就已经可以处理中文了, 不信你试试编译这个 tex 文档.

\documentclass{article}
\usepackage{fontspec}
\setmainfont{Adobe Song Std}
\begin{document}
  Ai.Freedom的Blog\\
  aifreedom.com
\end{document}

这里用的 “Adobe Song Std” 字体需要你从 Adobe 下载后安装. 在 Linux 中安装字体的方法会在下一篇中介绍.

编译的命令用 xelatex. 这个文档是可以正常编译的, 但用宋体显示英文字体太丑了, 所以就需要 xeCJK 告诉 XeLaTeX 哪些字符该用哪些字体. xeCJK 的配置和简单的使用也会在下一篇中介绍.

WordPress插件 – mimeTeX

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

$$\TeX$$是Donald E. Knuth在1978年开始开发的一款用于排版他的著作《The Art of Computer Programming》的自由软件. Knuth为每一个发现Bug的用户提供奖励, 奖励金额从1美分开始, 并每年翻倍, 直到目前的327.68美元封顶. 但他却并未为此付出太多金钱, 因为$$\TeX$$中的漏洞实在很少. $$\TeX$$最初的版本号是3.0, 每次更新后在版本号小数点后添加一位, 使它愈趋近于$$\pi$$, 现在的版本号是3.1415926. $$\LaTeX$$是$$\TeX$$的一个宏包, 它使$$\TeX$$更方便易用. 由于LaTeX很方便排版, 尤其在处理复杂的表格和数学公式上极为突出, 它被广泛用于制作各种科技文献和出版物. 比如Knuth的《具体数学》(Concrete Mathematics)就是用TeX排版的, 许多大学也提供各自的毕业生论文LaTeX模板.

在GPL协议下发布的mimeTeX, 是一个用于轻松地在网页中嵌入$$\LaTeX$$数学表达式的软件. 由张志强开发的mimeTeX for WordPress是WordPress下调用mimeTeX的插入$$\LaTeX$$公式的插件. 如果有可能, 最好在自己的服务器上安装mimeTeX(只需要cgi支持, bluehost, dreamhost都支持), 但我的服务器不能自己安装, 所以只能使用第三方架设的mimeTeX服务.

插件的安装方法很简单

  1. 下载插件后上传到WordPress的插件目录.
  2. 到管理员后台激活插件.
  3. 在wp-content下新建cache文件夹, 并赋予777权限.

来看几个例子吧, 其实上面的$$\LaTeX$$就是调用mimeTeX显示的, 我输入的仅仅是$$\LaTeX!$$.

先来个简单的

$$\Large x^2+y^2=z^2$$

还有上次我提到的那个表示化圆为方的式子, 谁告诉我下它究竟讲的什么

$$\Large \exists f\in\mathbb{P}^{[\mathbb{R}]}_{\infty},f(\sqrt{\pi})=0$$

更复杂一些的

$$\Large e^x=\lim_{n\to\infty} \left(1+\frac~xn\right)^n$$

$$\Large A\ =\ \large\left( \begin{array}{c.cccc}&1&2&\cdots&n\\ \hdash1&a_{11}&a_{12}&\cdots&a_{1n}\\ 2&a_{21}&a_{22}&\cdots&a_{2n}\\ \vdots&\vdots&\vdots&\ddots&\vdots\\ n&a_{n1}&a_{n2}&\cdots&a_{nn}\end{array}\right)$$

$$\normalsize \left(\large\begin{array}{GC+23} \varepsilon_x\\\varepsilon_y\\\varepsilon_z\\\gamma_{xy}\\ \gamma_{xz}\\\gamma_{yz}\end{array}\right)\ {\Large=} \ \left[\begin{array}{CC} \begin{array}\frac1{E_{\fs{+1}x}} &-\frac{\nu_{xy}}{E_{\fs{+1}x}} &-\frac{\nu_{\fs{+1}xz}}{E_{\fs{+1}x}}\\ -\frac{\nu_{yx}}{E_y}&\frac1{E_{y}}&-\frac{\nu_{yz}}{E_y}\\ -\frac{\nu_{\fs{+1}zx}}{E_{\fs{+1}z}}& -\frac{\nu_{zy}}{E_{\fs{+1}z}} &\frac1{E_{\fs{+1}z}}\end{array} & {\LARGE 0} \\ {\LARGE 0} & \begin{array}\frac1{G_{xy}}&&\\ &\frac1{G_{\fs{+1}xz}}&\\&&\frac1{G_{yz}}\end{array} \end{array}\right] \ \left(\large\begin{array} \sigma_x\\\sigma_y\\\sigma_z\\\tau_{xy}\\\tau_{xz}\\\tau_{yz} \end{array}\right)$$

甚至可以画图

$$\Large\hspace{5}\unitlength{1} \picture(175,100){~(50,50){\circle(100)} (1,50){\overbrace{\line(46)}^{4$\;\;a}} (52,50){\line(125)}~(50,52;115;2){\mid}~(52,55){\longleftar[60]} (130,56){\longrightar[35]}~(116,58){r}~(c85,50;80;2){\bullet} (c85,36){3$-q}~(c165,36){3$q} (42,29){\underbrace{\line(32)}_{1$a^2/r\;\;\;}}~}$$

而且支持在评论时加入$$\LaTeX$$表达式, 试试吧!

记得要在$$\LaTeX$$表达式两端用两个$符号引起来!

用最简单的方法让TeX Live支持中文

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

让TeX支持中文不是一件容易的事, 但我终于找到了一个简单的办法(应该说是傻瓜办法).

安装TeX Live和CJK. 在源里选择texlive, latex-cjk-chinese(如果需要日文和韩文支持, 那么选择latex-cjk-all)安装.

然后下载”YueWang-zhfonts-final_1.01.tar.bz2″, 这是YueWang制作的TeX Live 2007使用的字体包, 有207M. 教育网里可以在这里下载, 教育网外可以在这里下载. 顺便分享一个很好用的FTP搜索引擎, http://run.hit.edu.cn/.

然后将解压后文件夹内的两个文件夹移动到你的Home目录里, 并在目录名前分别加 ‘.'(点号). 好了, 大功告成. 但根据安装说明 “如果不行, 请把~/.texlive2007/texmf-var/fonts/map/dvips中的所有map給enable了.”, 我不是很了解这些, 等我进一步了解后再作解释吧.

编译一个tex文件来试试效果吧, 下面是tex文件的样例.

\documentclass{article}
\usepackage{<cjkpackage>}
\begin{document}
\begin{CJK}{<encoding>}{<fontname>}
你好!
\end{CJK}
\end{document}

其中<cjkpackage>可以是CJKutf8(源文件用UTF8编码)也可以是CJK(源文件用GBK编码), <encoding>是GBK或UTF8, 和上面的<cjkpackage>是对应的, 也就是是CJK那么必须是GBK. 而如果是CJKutf8,则就是UTF8. <fontname>就好说了,就是song, hei, fs,kai等等.