毕业论文写完了,小节一下用TeX的经历断断续续写了大半年,终于把毕业论文写完了。从大二开始用TeX/LaTeX,自然没有再用Word写论文的道理。但是之前都是用LaTeX的现成模板写写小文章,而论文要一百多页,结构复杂;NUS又没有提供LaTeX的论文模板,所以还是要花不少功夫的。
先截取几页贴上来,然后慢慢讲细节
目录
章节标题
MetaPost 电路图
Inline MetaPost drawings / 公式
publication list
[hash (1-19 15:47, Long long ago)]
[ 传统版 |
sForum ][登录后回复]1楼
很漂亮!记得关于latex,有本经典的PDF书,A NOT SIMPLE NOTE ON LATEX。[materialist (1-19 19:36, Long long ago)] [ 传统版 | sForum ][登录后回复]2楼
期待楼主更新很好, hoho[rochester (1-19 21:04, Long long ago)] [ 传统版 | sForum ][登录后回复]3楼
先说说软件的选择这几年我一直都是用LyX这个“所见即所想”的LaTeX前台编辑器的,偶尔也直接写LaTeX代码。但这次写论文时却不得不放弃了LyX。首先是新版的LyX(1.5)在我的Mac (PPC)上很不好用,打字的时候反应迟缓。我打了半天了屏幕上还是空白,我停下之后屏幕上才一个一个字母蹦出来。Linux/Windows版运行都很顺畅,据说问题出在Mac PPC版的Qt里,总之是拖了半年都没解决,迫使我放弃了。
其次是LyX不支持很多LaTeX宏包,比如说per chapter reference list就需要手工干预。
最后是因为听说了ConTeXt,好奇心起来了。ConTeXt有很多独特的优点,后面会详细讲,但当时更多的是尝鲜的好奇心驱使,选了ConTeXt。
用了很多年LaTeX,学会了尽量把排版的事情交给LaTeX,自己只管输入内容。这的确是LaTeX的优点。但反过来说,调整LaTeX模板预定的版式就很困难,经常需要修改模板源代码。而TeX实在不是一种好用的programming language,又不好调试,读懂并修改一个模板实在是太折磨人了。相反,ConTeXt的思路是提供很多控制版式的macro,方便用户自己写format file。下面是我的format file里的三段:
\setuppapersize[A4][A4]
\setuplayout
[width=147mm,
height=fit,
backspace=38mm,
topspace=25mm,
header=15mm,
footer=10mm,
bottomspace=25mm,
margin=0mm,
location=singlesided]
\setuplist[chapter][style=\boldmath\rm\bf\singlespace,alternative=b,width=1.5em,before=\blank,after=\blank]
\setuplist[section][style=\singlespace,margin=1.5em,width=2em,after=\blank]
\setuppagenumbering[location={text,footer,right}]
\setuplayout定义正文部分、页眉、页脚等的位置和尺寸。\setuplist[chapter]和\setuplist[section]分别定义了目录里chapter和section的格式。最后\setuppagenumbering控制页码的位置。不需要TeX编程就可以实现相当丰富的版式。
简单说,LaTeX适合按预定的格式写论文。ConTeXt的适用范围更宽一些,也适合排版书籍,杂志等等。ConTeXt在开发之初就是以排版教科书为目标的,因此相比LaTeX更多地考虑了版式的多样性。
ConTeXt的官方网站是 http://www.pragma-ade.com/ , 但是他们的wiki网站相比之下更有用些: http://wiki.contextgarden.net/Main_Page
两个网站上都有很多showcase和sample document,大家可以看一下是否比LaTeX更灵活些。
我安装的是TeXLive 2007 Distribution。以前流行的teTeX项目现在已经被放弃了。
--------------------------
排版系统选定了ConTeXt,另一个重要的决定是用什么软件作图。ConTeXt的作者比较欣赏MetaPost,因此把MetaPost和ConTeXt紧密集成在一起(称为MetaFun)。在ConTeXt代码中嵌入MetaPost代码、在Metapost中的Label里使用ConTeXt Macro、MetaPost图形在文字中的精确定位、ConTeXt向MetaPost传递参数等等都非常方便。因此,用MetaPost画插图是非常自然的决定。
但是MetaPost有一个很大的缺点,就是不能处理的浮点数学运算。MetaPost和TeX一样,内部都是用整数运算的。这对画示意图没有影响,但是用来画包含实验数据的图表就成问题了。我的实验数据经常会出现小至1E-15,大至1E20的数字,要MetaPost处理太勉为其难了(有人搞了变通的办法,但是实在是很丑陋)。用过pstrick/metapost/tikz之后,我选了Asymptote做图表。简单说Asymptote是一个用C++语法的MetaPost,双精度浮点数当然是支持的,path、pen等等metapost的概念也都继承下来了。画图表的模块也相当完善,Axis/Tick/Title/Legend/Label都很灵活。Asymptote的缺点在于首先它是为LaTeX设计的,暂时还没有和ConTeXt集成起来,其次它缺少metapost里解implicit linear equation的功能,要解方程必须自己输入方程的矩阵。
在画示意图时,用隐式方程来指定关键节点的坐标比较符合我的思维方式,比如我习惯指定z1,z2,z3三点共线、z2,z4,z5三点的y坐标相同等等,而不是直接指定这些点的坐标。Asymptote暂时还没有这个功能,让我有些失望。
于是我采取折中方案,用Asymptote来plot实验数据,而用metapost画示意图。
--------------------------
文献引用自然是用bibtex格式,然后用jabref这个java做的GUI来管理。
[hash (1-20 17:34, Long long ago)]
[ 传统版 |
sForum ][登录后回复]4楼
(引用 hash:先说说软件的选择这几年我一直都是用LyX这个“所见即所想”的LaTeX前台编辑器的,偶尔也直接写LaTeX代码。但这次写论文时却不得不放弃了L...)再帖两个ConTeXt做的文档先是一张幻灯片。左边的图是asymptote做的,右边三幅图是用ConTeXt调用一个metapost宏画的,宏的参数是需要的小圆圈的数量,圆圈的位置是随机生成的。幻灯片的字体用的是Helvetica,数学公式的字体是Euler。
然后是一个含很多示意图的文档。为了看起来方便,插图放在右边的margin里。
[hash (1-20 18:24, Long long ago)]
[ 传统版 |
sForum ][登录后回复]5楼
(引用 hash:先说说软件的选择这几年我一直都是用LyX这个“所见即所想”的LaTeX前台编辑器的,偶尔也直接写LaTeX代码。但这次写论文时却不得不放弃了L...)看了感觉context主要用户是书籍等的排版人员
数学家和工程师对排版细节应该无所谓一些,不知道phd thesis这样的例外会不会多。
bib管理我是用一个简陋的script搜索网上数据库,加到bib文件了就不删除[Bird (1-20 20:06, Long long ago)]
[ 传统版 |
sForum ][登录后回复]6楼
(引用 hash:再帖两个ConTeXt做的文档先是一张幻灯片。左边的图是asymptote做的,右边三幅图是用ConTeXt调用一个metapost宏画的,宏的参数是需要的小� ...)幻灯片是自己写的class?[Bird (1-20 20:12, Long long ago)] [ 传统版 | sForum ][登录后回复]7楼
(引用 Bird:幻灯片是自己写的class?)是[hash (1-20 20:48, Long long ago)] [ 传统版 | sForum ][登录后回复]8楼
(引用 Bird:看了感觉context主要用户是书籍等的排版人员
数学家和工程师对排版细节应该无所谓一些,不知道phd thesis这样的例外会不会多。
bib管理�...)如果用别人现成的format file,写起文章来跟LaTeX差不多大四做bachelor thesis的时候,我是以Caltech的LaTeX论文模板为基础,按国大的格式改了改。当时对TeX编程很陌生,稍微复杂一点的修改(目录,页眉等等)就做不成。哪怕是现在,也不敢说就都会做了。我一看到\futurelet和\expandafter这些命令就头晕。能自己写LaTeX Class的人应该都是高手了。
用ConTeXt设置这些版式都不需要掌握TeX编程,所以象我这样的三脚猫都可以玩。
说到排版细节,我会总结一些常见的丑陋的排印错误,和学术期刊上正确的排印作对比。如果当年Knuth容忍了那些丑陋的排版,我们现在就没有TeX可以用了。
MacOS里有个做得非常好的bib管理软件叫Papers,只可惜不是免费的。
JabRef做得也是不错了,可以搜索几个常用的数据库(ACM/IEEE),可以下载pdf存档。文献数据库里下载来的bibtex是没法直接用的,格式多半不对,需要手工修正。
[hash (1-20 21:16, Long long ago)]
[ 传统版 |
sForum ][登录后回复]9楼
(引用 materialist:很漂亮!记得关于latex,有本经典的PDF书,A NOT SIMPLE NOTE ON LATEX。)是叫 "The Not So Short Introduction to LaTeX2e"[hash (1-20 23:10, Long long ago)] [ 传统版 | sForum ][登录后回复]10楼
(引用 hash:是叫 "The Not So Short Introduction to LaTeX2e"):-) thank you for the correction[materialist (1-21 19:19, Long long ago)] [ 传统版 | sForum ][登录后回复]11楼
大哥有没有使用svn + latexdiff 跟踪修改?想尝试着用。 [cigar (1-22 0:13, Long long ago)] [ 传统版 | sForum ][登录后回复]12楼
(引用 cigar:大哥有没有使用svn + latexdiff 跟踪修改?想尝试着用。 )习惯了用cvs和rcs了,没有换成svn。latexdiff很好用[hash (1-23 18:39, Long long ago)] [ 传统版 | sForum ][登录后回复]13楼
2. 字体上一次用了很大篇幅讲ConTeXt的特性,几乎编程ConTeXt的广告了。这次讲些更有普遍性的。
先从字体开始讲起。长久以来我一直都是用LaTeX的默认字体(所有TeX系统的默认字体)Computer Modern系列。严格讲,Computer Modern是Knuth制作的一系列配套的字体。我们先得介绍一些关于英文字体的术语:
1.serif/sans-serif
Serif就是比划顶端的衬线。典型的serif字体有
Times New Roman:
Computer Modern:
如果仔细看的话,computer modern字体横向的比划特别细,纵向比划特别粗。这是所有modern字体相对于old style或transitional(e.g. times new roman)的特点。
sans-serif就是没有衬线的字体。典型的sans-serif字体有
Helvetica
Optima
serif和sans serif的对比接近于汉字中宋体和黑体的对比。
2. roman/slanted/italic:
roman也叫normal或者regular,有人翻译作“正体”。italic和slanted都被人叫做斜体。slanted又叫oblique,通常只是把roman字体倾斜一下而已。而italic则是完全不同的字型。
先看roman和italic:
再看slanted
3. typewriter,bold, small cap, old style numeral, etc
typewriter也叫monospace,就是等宽字体。err,大家应该已经注意到前面所有的字体里,每个字符的宽度都不一样吧。typewriter字体既有serif的也有sans-serif的。典型的例子是Courier
bold是粗体,所有的字体都可以bold,不仅限于sans-serif。
small cap:
old style numerals:
4. pt, em, ex
传统的pt是一英寸的 1/72.27,TeX里的pt也是这个定义。现在新法的pt是1/72英寸,网页设计里讲的pt用的是这个定义。TeX里,1/72英寸叫做big point,或者bp。
em是当前字体中大写M的宽度。ex是当前字体中小写x的宽度。
5. ligature, kerning
找一本正规出版的书,可以发现有些字母组合,比如fi,ff,fl的字形是特制的,并不是简单地把f和i拼在一起。这样的组合叫ligature,TeX可以自动识别很多这样的组合。
另有些字母组合,比如A和V,因为字形的空白互相错开,应当排得紧一些,让A的底部和V的顶部有一点重合。这个叫做kerning。TeX可以kern很多这样的组合,也允许用户进一步调整kerning:
市面上字体多如牛毛,但是大部分LaTeX用户还是在用Computer Modern。原因是大部分字体都没有考虑数学公式中的符号,要配一套风格谐调的正文字体和数学字体不是一件容易的事。
但是选择还是有的,Stephen G. Hartke就此写了篇总结文章:A Survey of Free Math Fonts for TeX and LaTeX1。我们看几个典型的例子
1. computer modern
2. computer mrdern bright
3. concrete + Euler
4. palatino + Euler
Euler math是Knuth和字体设计大师Zapf,根据Euler的手稿的书写风格,合作设计的一种手写风格的字体。Knuth后来出版了他和Zapf的通信,详细描述了他们设计这款字体时的思路,很有趣。
[hash (1-24 0:03, Long long ago)]
[ 传统版 |
sForum ][登录后回复]14楼
(引用 hash:2. 字体上一次用了很大篇幅讲ConTeXt的特性,几乎编程ConTeXt的广告了。这次讲些更有普遍性的。
先从字体开始讲起。长久以来我一直都是�
...)choosing a font has a lot of psychology in it比方说理工科的作业用computer modern容易得高分,文科的就是garamond,palatino。用任何sans serif写文科的东西容易自讨其辱。
作为理科生我个人仍然喜欢用serif写东西,sans serif用在短文字的幻灯片、poster比较合适。
每种字体都有自己的心理学暗示吧。我的到得暗示是:
- cm sans、cm bright比helvetica/tahoma多了严肃和周正
- schoolbook看起来是old style serif,给人一些权威感。concrete、utopia和charter的也是横竖一样粗,但没有schoolbook那么重的serif,于是在权威感中去掉了任何可能的自命不凡(pretentiousness),十分喜欢!concrete没有粗体所以latex用了computer modern做粗体,风格不够一致
- palatino、garamond比较“雅”,十分不适合写technical/engineering的东西。用写数学也显得做作。写偏concept、偏文的科学文章应该还可以。harry potter用的就是garamond
- times,这个字体是为times newspaper设计的,为了避免油墨渗开,所有横竖粗细十分明显。在白纸上(特别是激光打印)读十分费眼。基本上papers typeset with times我读着都很费劲,无名业火不时串上心头。费眼还因为平均字体宽度太小(这反造成很多人用times发表有页面限制的文章)。微软的office/IE被times独霸已久,直到office 2007才有改革,我想这也是文科教授爱用times、学校的admin爱用times的缘故---office和IE的默认字体啊!
- euler math好看耐看,可以让复杂的公式十分readable。但这种执着的风格只适合大师拥有,个人来说我不愿用它typeset任何东西。concrete和charter的平实,感觉更好些。
现实往往不完美,根据adobe公司的标准,times居然是pdf唯一预安装的serif字体(所以用times typeset的文档不用内嵌字体)。postscript printer也只增加了palatino和schoolbook(不算sans serif)。
So i stick with computer modern/cm sans anyway.[Bird (1-24 10:20, Long long ago)]
[ 传统版 |
sForum ][登录后回复]15楼
(引用 hash:2. 字体上一次用了很大篇幅讲ConTeXt的特性,几乎编程ConTeXt的广告了。这次讲些更有普遍性的。 先从字体开始讲起。长久以来我一直都是� ...)最下面的应该只是palatino,没有用euler[Bird (1-24 10:23, Long long ago)] [ 传统版 | sForum ][登录后回复]16楼
(引用 hash:2. 字体上一次用了很大篇幅讲ConTeXt的特性,几乎编程ConTeXt的广告了。这次讲些更有普遍性的。 先从字体开始讲起。长久以来我一直都是� ...)cm系列有otf格式的了,被我拿来做浏览器默认字体了。。cm bright有一个fixed width的点阵版本,我见过最好的console font[Bird (1-24 10:30, Long long ago)] [ 传统版 | sForum ][登录后回复]17楼
(引用 Bird:cm系列有otf格式的了,被我拿来做浏览器默认字体了。。cm bright有一个fixed width的点阵版本,我见过最好的console font)其实是latin modern,cm的扩展[Bird (1-24 10:32, Long long ago)] [ 传统版 | sForum ][登录后回复]18楼
(引用 Bird:最下面的应该只是palatino,没有用euler)latin characters are from palatino, greek letters are euler[hash (1-24 10:53, Long long ago)] [ 传统版 | sForum ][登录后回复]19楼
(引用 Bird:choosing a font has a lot of psychology in it比方说理工科的作业用computer modern容易得高分,文科的就是garamond,palatino。用任何...)911纪念碑上用刻着遇难者的名字,每个字母有十厘米高,用的字体是Times New Roman……
民主投票决定的。[hash (1-24 11:00, Long long ago)]
[ 传统版 |
sForum ][登录后回复]20楼