【原创】LaTeX入门速查手册

2010年8月注: 本文写于09年9月, 今天看来, 有些地方写的很不合适而且对整个TeX体系的理解比较幼稚. 目前推荐使用XeTeX或ConTeXt配合ctex-kit作为TeX处理中文的快速解决方案.

学习了一两周TeX,感触颇多。渐渐痴迷于自己做出那种正式印刷品效果的感觉(有句话说的对,男人是视觉动物)。大神Don E. Knuth的TeX不仅仅是最强大的科技排版环境之一,更是一种纯粹的精神,一种追求至臻至美的精神。我入门的两份文档是魏太云学长推荐的,一本是包老师(DrAlpha)的《LaTeX Notes》《A (Not So) Introduction to LaTeX》。 我是这样做的,分三次通读了一遍lnotes,然后上机尝试把网上一位前辈做的“JabRef中文手册”由几乎是PlainText的格式转化为TeX格 式,做到中间时开始参考lshort中的一些详细说明。在这个过程中,我得到一些不能说是心得,但对自己对后来人都会有帮助的一些Tips,不敢独享,遂成此文。

由于是笔记性质的东西,而且面向的对象是初学者,所以叙述顺序上逻辑性可能不那么强,用到时请 Ctrl+F 一记,起到备查作用就OK了。由于作者也是一个初学者(Newbie),错漏之处,敬请各路看官指正。

===================================================

1. Google和Baidu是最好的老师。遇到什么问题,多变换一下关键词在搜索引擎里寻找。
根据我的观察,来自中文TeX社区CTeX.org的解答相对较多。

===================================================

2. “LaTeX”是保留字,可以全部改为 LaTeX,输出一个独特的效果。除此之外,保留字还有很多。

===================================================

3. 记得转义所有“{” “}” “%” “&” “#”,我在开始时就经常忘记转义,导致LaTeX很生气,囧 ..

===================================================

4. 在TeX中,一个空行意味着一段的结束。连续的空行被当作是一个空行。

===================================================

5. 如果想增大纵向空白的话,可以使用vspace{5cm}(我觉得是Vertical Space的意思,这样比较好记),注意使用这个语句时前后要有东西,没东西的话用vspace*{5cm},使用phantom命令可以为不在最终 输出中出现的字符预留空间。(不过一般编译时提示Error的话,我一般是在前面或者后面用个\,不报错就ok了)。插入横向空白用 hspace{5cm}(Horizontal Space)。

===================================================

6. 关于间距,可以不用cm,还有很多很多单位,一般的入门文档都会有个表罗列出,可以去查查。

===================================================

7. 可以不用title, author和maketitle等命令生成标题页,因为那样生成的弱智封面可能不太符合你的要求。我们只需要用
begin{titlepage}
标题页内容
end{titlepage}
在内容中用上一些对齐命令、vspace*和字体选择命令就可以轻松设计出自己想要的样式。而且可以避免出现莫名其妙的问题。 ^_^

===================================================

8. 根据经验,一旦有哪里效果不对,95%的情况都是自己的代码有问题 重点检查是不是多了符号少了符号(比如在代码后面忘记了“}”,寒)。

===================================================

9.
usepackage{times}                 % 使用 Times New Roman 字体

===================================================

10.
usepackage{ccmap}               % 使生成的PDF文件支持复制等

===================================================

11. 使用CJK环境的一些重点问题:

usepackage{CJKpunct}
% 在默认的CJK环境里,行末的中文标点不能与边界对齐,因为中文标点也被视为一个普通的全角字符,所以看起来行末就有了不应该有的空白,不符合中文的排版 习惯。另外,当一行文字需要压缩或拉伸时,逗号与句号也应该区别对待,逗号后面留的空白应该比句号小一些。这个宏包就解决了这两个问题。

===================================================

12. 为了不致过于枯燥,在这里八卦一下。CJK的作者Werner Lemberg,1968年出生于奥地利,从维也纳音乐学院获得作曲、指挥、钢琴、乐团管理、歌手教练等五个专业文凭,后自学(自学!)中文和数学。曾任职于奥地利和德国多家剧院和乐团。除了CJK,现在还在维护着groff (一个比TeX还古老的排版软件roff的GNU版本),他还开发了LaTeX的俄语和越南语支持包。和Knuth大神一样,为了不使自己的巨著因为排版印刷质量低下受到影响花十年时间开发了TeX .. 真是能者多劳啊 .. 祝愿他们健康长寿 ^_^

===================================================

13.
usepackage{indentifirst}
%解决缩进问题,具体参见Google

===================================================

14.
CJKindent
% 由于indentfirst不能准确地使用两个汉字的位置,所以需要在%begin{document}之后加一个TeX指令实现段首正确缩进。

===================================================

15.
CJKtilde
%重新定义了~的意义,使得这个符号不再代表一个不可断行的空格,而是一个可断行的弹性距离,加在中文和英文之间调整它们的距离,解决了中英混排的美观问题。

===================================================

16.
CJKcaption{GB}
% 中文章节标题(似乎也解决了每节标题的字体问题)

===================================================

17.
newcommand{hei}{CJKfamily{hei}}
%定义一些命令,方便以后调用黑体,想用黑体时,只需要写{hei 内容}即可。
newcommand{song}{CJKfamily{song}}
%同上,宋体
newcommand{fs}{CJKfamily{fs}}
%同上,仿宋
newcommand{sihao}{fontsize{14pt}{baselineskip}selectfont}
% 同上,定义了四号字体
newcommand{xiaosi}{fontsize{12pt}{14pt}selectfont}
% 小四字体
newcommand{wuhao}{fontsize{10.5pt}{12.6pt}selectfont}
% 五号字体

===================================================

18. 这里加一个特别说明,CJK环境最好放在最前面声明,end{document}后end{CJK},这样就可以在其他的package内实现中文,避免出现一系列的人品问题。不过似乎lstlisting宏包的源代码中英混排还是有问题,不知何解。

===================================================

19. 根据经验,小小总结了一下:

中英文之间加~
数字和符号间要加~
数字和中文间要加~
左括号前面和右括号后面要加~
括号内如有英文和数字和括号挨着则最好也加~

原因前面有写。

===================================================

20.
标点符号问题,为了美观,中文括号一般我会全部改为英文括号。
统一按照比较合理也比较通行的做法,中文后用中文标点,英文后用英文标点。

===================================================

21.
这里是引用网上的资料:

listings:让你更好地帖代码
文档:http://www.ctex.org/documents/packages/verbatim/listings.pdf
结合 color 这个package,你可以实现这样一个简单的效果:给你的代码加上某种颜色的背景。

示例:

usepackage{color}
definecolor{gray}{rgb}{0.8,0.8,0.8}  % 定义颜色标记 'gray'

usepackage{listings}
lstloadlanguages{python}

lstset{language=python,tabsize=4, keepspaces=true,
xleftmargin=2em,xrightmargin=2em, aboveskip=1em,
backgroundcolor=color{gray}, % 定义背景颜色
frame=none,   % frame=none,表示不要边框
keywordstyle=color{blue}bfseries,
breakindent=22pt,
numbers=left,stepnumber=1,numberstyle=tiny,
basicstyle=footnotesize,
showspaces=false,
flexiblecolumns=true,
breaklines=true, breakautoindent=true,breakindent=4em,
escapeinside={/*@}{@*/}
}

begin{document}

begin{lstlisting}
your code here
end{lstlisting}

===================================================

22. 用rightarrow一类符号,需要 usepackage{amsmath}

===================================================

23. 行间公式记得用 $$ 引起来。

===================================================

24. 省略号记得用 ldots,不要打三个英文句号,虽然你觉得没什么,但是实际效果天壤之别。

===================================================

25. 不要像在打字机上那样,把" 用作引号。在印刷中有专门的左引号和右引号。在LaTeX 中,用两个` (与波浪符号同一个键)产生左引号,用两个' (引号)产生右引号。一个` 和一个' 产生一个单引号。

===================================================

26. 把普通文档转换为TeX,处理引号时,可以批量替换中文左引号为`` 中文右引号替换为两个英文单引号 原文中的英文双引号需手动替换。

===================================================

27. 页眉页脚的问题,我用fancyhdr宏包总是有点问题,干脆换用更强大的titlesec宏包去实现。

===================================================

28. 关于怎样用titlesec自定义章节标题(比如把Chapter xx改为第xx章),页眉页脚,这里引用网上的一段Intro:

设置页眉页脚有一个很有名的宏包fancyhdr也可以用,不过titlesec提供的页面设计命令更方便与它的章节标题命令配合,功能更强大。这里先讲章节标题格式的设置。

在引用titlesec宏包时就可以指定几个格式选项,例如

usepackage[bf,small,center,indentafter,pagestyles]{titlesec}

其中bf设置章节标题的字体为黑体,这也是默认值,可以略去。此外,还可以设 为rm(罗马体), sf(无衬线体), tt(打字机体), md(中等黑度), up(直立体), it(意大利斜体), sl(机械斜体), sc(小体大写字母)。

small设置标题字体的尺寸,还可设为big(默认), medium, tiny。

center使标题居中,还可以设为raggedleft(居左,默认), raggedright(居右)。

indentafter相当于宏包indentfirst的作用,使标题下面的第一个段落正常缩进。

pagestyles是申明后面要自定义页面样式。

下面就可以用titleformat, titlespacing, titlelabel等命令来设置标题格式了。因为这些命令里会用到中文,所以要在设置之前放一个空的CJK环境,如

begin{CJK*}{GBK}{song}
end{CJK*}

下面的titleformat命令设置了章标题的格式

titleformat{chapter}[hang]{centeringLARGEbfseries}{chaptername}{1em}{}

其中chapter可以换为section, subsection等,设置节、小节等标题的格式。

hang 表示标题头与标题内容在同一行,是默认值。而book类默认的章标题是标题头与标题内容放在两个段落,对应于display选项。此外还有block, runin, leftmargin, rightmargin, frame, wrap等选项,一般不大用到。

centeringLARGEbfseries这一块是设置标题的排版格式,这里设置为居中、 LARGE尺寸和黑体。

后面紧跟的是标题头的定义。book类里的标题头是英文,需要改成中文。如果希望改成“第一章”这样的格式,则应先引用CJKnumb宏包,它提供了把阿拉伯数字转换成中文数字的命令。然后定义

renewcommand{chaptername}{第CJKnumber{thechapter}章}

===================================================

29. 看目录的生成效果,需要运行两次LaTeX,具体原因请参见lnotes.

===================================================

30. 生成参考文献先运行一次LaTeX 运行一次BIBTeX 再运行两次LaTeX,用pdfLaTeX的话大致相同,我开始就不知道要运行BIBTeX,结果总是没法生成参考文献。(被华丽的pia飞)

===================================================

31.

bibliographystyle{unsrt}
%.bst 参考文献的样式

bibliography{bib}
%.bib 放在和.tex文件同一文件夹下,参考文献内容。可以使用JabRef生成和管理。

===================================================

32.
特别注意,如果文中没有出现引用的文献,可以在这两行前使用nocite{*}来使其出现在文末。
如果文中出现了引用的文献,我们可以用natbib宏包实现更丰富的格式。

===================================================

33.
有时候要去掉默认添加的“日期”,只需要写入这个命令  date{}

===================================================

34.
出现:
! Argument of CJK@XX has an extra 或 before CJK@XX was complete之类的错误

解决方法是将

begin{CJK*}{GBK}{kai}
begin {document}

这两行交换次序
(不要忘记把结尾也改对顺序)
或者在end{document}前面加上clearpage或者newpage 这也是CJK作者推荐的方法

===================================================

35. LaTeX中多个作者和多个单位的写法,详见:
http://hi.baidu.com/milkyadel/blog/item/29d635f088edeba7a50f52d9.html

===================================================

36. 这里是一个常识问题。
当中文姓名是三个字的时候,通常将姓放在后面做倒装,例如:
王刚强——Gangqiang Wang
两个字时,就直接用拼音翻译,不倒装。例如:
张军——Zhang Jun
姓第一个字母要大写 名不管几个字只有第一个字母大写

===================================================

37. 注意代码功能上不要重复。比如一些控制缩进的。

===================================================

38. 如果不是追求完美到一个错误和警告都没有的话,LaTeX和pdfLaTeX后几次编译时根据第一次编译出现的Error和Warning按回车的次数直 接按几次回车就ok了,不需要再次等错误提示出现。这样可以提高效率。而且,我在编译时都直接使用WinEdt默认的快捷键,调用LaTeX是 Ctrl+Shift+L,BIBTeX是Ctrl+Shift+B,最后再用dvi2pdf生成pdf。

===================================================

39. 我发现用LaTeX编译再用dvi2pdf作出的PDF文件比直接用pdfLaTeX做出的文件要小的多,不知何解。

===================================================

40. 把默认的“Reference”或者“文献”改成“参考文献”或者你想要的任何说法,用下面的一句就可以了:
renewcommandrefname{参考文献}

===================================================

(待续)

(本文最初发表于xiaonei.com)

【原创】LaTeX入门速查手册》上有 9 条评论

  1. 平常记笔记的话需要插入latex公式怎么办?
    我用tomboy的latex插件,生成的公式只能在tomboy里看,打印成pdf或者转换成html就没了。。很是烦恼。

    • 华哥降临,倍感荣幸 :)
      那天我把Word的高级功能试用了一下,总觉得键盘和鼠标来回切换着用不方便,又记不下快捷键,遂放弃 ..

      • 我现在也在看latex,脱离鼠标了感觉很舒服,只是遇到问题了很郁闷。以后多请教啊。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

:wink: :-| :-x :twisted: :) 8-O :( :roll: :-P :oops: :-o :mrgreen: :lol: :idea: :-D :evil: :cry: 8) :arrow: :-? :?: :!: