先说说软件的选择
这几年我一直都是用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来管理。
其次是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来管理。