笔者刚刚接触到TEX排版,相关知识完全空白,用了两天时间学习并完成了一篇论文的完整排版。
期间遇到不少小问题,着实辛苦,分享至上,现将其解决办法总结归纳,共同学习。
TeX是一个很好排版工具,在学术界十分流行,特别是数学、物理学和计算机科学界。
CTeX是TeX中的一个版本,指的是CTeX 中文套装的简称。CTeX中文套装是基于 Windows 下的 MiKTeX系统,集成了编辑器 WinEdt及其他的处理软件,并增加了对中文的完整支持。
BibTeX是一种格式和一个程序, 用于协调LaTeX的参考文献处理。BibTeX 使用数据库的的方式来管理参考文献,其文献数据库文件的后缀名为.bib。
JabRef是一个开源的参考文献管理软件,使用 Java 语言编写,所以天生具有跨平台特性,通用于安装有Java支持的Windows, Linux和Mac,软件主页http://jabref.sourceforge.net/。它可以很方便地管理下载到本机的文献,生成 BibTeX 文献数据库,供 LaTeX 或其它软件使用,可以与 Kile, Emacs, Vim, WinEdt 等多种软件结合使用。
BibTex4Word是一个Microsoft Word的插件,能够将.bib文件中的参考文献方便地插入到Word文档中,软件的使用方法和安装包可以在http://www.ee.ic.ac.uk/hp/staff/dmb/perl/找到。本文主要介绍在CTeX中插入文献,这里只是顺带一提。
Microsoft Office Visio能方便地创建具有专业外观的图表,以便理解、记录和分析信息、数据、系统和过程(选用)。
Adobe Acrobat Professional在这里主要用于将.pdf文件转换为.eps文件。
总的来说,我们用CTeX套装中的WinEdt为论文排版,用JabRef管理论文的参考文献,用Visio + Photoshop来制作并生成论文需要的.eps图片。
笔者使用Win8.1(x64)操作系统,可以使用以上全部工具。特别需要提出的是,JabRef是用Java语言写的,所以需要配置Java环境,去oracle下载相应JDK即可。
文章的大致结构如下:
\documentclass[ ]{ }
\usepackage{ }
\being{document} %从此往上都是导言区(preamble)
…
\section{ } %1级章节
\subsection{ } %2级章节
\subsubsection{ }%3级章节,没有subsubsubsection
…
\end{document} %begin开始,end结束
在WinEdt工具栏里找到如上红框里的图标,点击后你能找到大多数的符号。
另外,对在该工具栏里没有的符号,可点击http://www.cfsm.cn/info/symbols/symbols.htm。
当然对于实在生僻的符号,你也可以百度“LaTeX符号”进行搜索。
如果要在文章中插入公式,可输入如下命令:
\begin{equation}\label{eq:eq1} A= b + c \end{equation}
“A = b + c”这部分写入公式即可,不需要加$符号。运行后将显示
其中\label里是该公式的标签,将会在引用该公式时用到。
后面的(1)是自动生成的。Latex将自动根据你所编写的公式顺序添加标号。
上标和下标对于刚刚接触latex的人来说可能是个问题,所以在这里特地给出:
例子:$p_{i}^{1}$ 结果:pi1
公式不会自动换行,可能会超出文档范围,非常难看!笔者尝试了使用"\\"、"\newline"、"\break"都不奏效,后来总算发现可以这么做:
例子:
\begin{eqnarray}\label{eq:eq2} \lefteqn{Response\_time_{write}(r_{i}, R_{write}^{1}, R_{write}^{2}, R_{write}^{3}, R_{hist})}\nonumber\\ \lefteqn{==F(r_{i}, R_{write}^{1}, R_{write}^{2}, R_{write}^{3}, R_{hist})}\nonumber\\ \lefteqn{= aF(r_{i}, 0, 0, 0, 0) + bF(r_{i}, R_{write}^{1}, 0, 0, 0)}\nonumber\\ \lefteqn{+ cF(r_{i}, 0, R_{write}^{2}, 0, 0)}\nonumber\\ &+ dF(r_{i}, 0, 0, R_{write}^{3},0) + eF(r_{i}, 0, 0, 0, R_{hist}) + f \end{eqnarray}
结果:
在上述例子中,我们使用了”eqnarray”,类似于使用数组对公式进行排列;
前面隔行尾部的”\nonumber”是告诉编译器不要对此行进行编号;
”\\”即换行;
“&”本用于制表,这里可以用于固定+号的位置。
论文中图是一个很重要的部分,相比直接在Tex中以代码画图,先从其他工具中画好图再导入TeX中要方便快捷得多。
TeX支持eps格式的矢量图,这种类型的图无论放大多少倍都会很清晰,这也是很多期刊要求论文中的图片为eps格式的原因。
①用Microsoft Office 中的Word或者Visio画出你需要的图形,将其另存为pdf文件。注意要一副图生成一个只有一页的pdf文件。
②用Adobe Acrobat Professional打开该pdf文件,选择【工具】→【页面】→【剪裁】,设定好想要留下的区域(左图),双击,得到不含大片空白的pdf图片文件(右图)。
③将剪裁好的pdf另存为eps格式,在另存对话框的下面有一个设置选项,设置里面一些参数,将一般的PostScript设为语言级三级,字体范围设为嵌入和引用的字体,然后确定保存。这样就可以生成eps格式的图片了,用latex编译出来效果十分好。
④Photoshop也可将pdf文件转换为eps图片,但笔者使用过程中,发现PS生成的eps文件仿佛不再是矢量图,因为随着放大倍数的增加,图片的质量也在降低。更令人无法接受的是,图片尺寸相同,PS生成的eps文件大小是用Acrobat的2倍以上。因此笔者建议用Acrobat即可。
①用WinEdt编辑排版时,插入的eps图片需要和TeX文件在同一个文件夹中,否则需要用这行代码来设定图片的存储路径
\graphicspath{{../eps/}}
②可用如下方式插入长6cm宽3.4cm的名为SSDArchitecture.eps的图片:
\begin{figure}[ht]
\begin{flushleft}
\includegraphics[width=6cm,height=3.4cm]{SSDArchitecture.eps}
\end{flushleft}
\caption{SSD Architecture}\label{fig:SSDArchitecture} \end{figure}
\begin{flushleft} * \end{flushleft}
①我们可以用CTeX集成的GSview来打开eps文件,其中,【Options】→【Show Bounding Box】可以帮助我们更方便的确定图片的长和宽。
②eps文件本身可以用记事本打开,打开后可以看到PostScript语言的文本信息。这里可以更直观地看到BoundingBox等信息。
①有时候我们需要将多副图组织在一起,并设以统一的标题方便引用,如
这时我们可以使用以下方法来实现:
在开头加上
\usepackage{subfigure}
在需要插图处,按如下格式插入子图
\begin{figure}[ht] \begin{flushleft} \subfigure[]{ \label{fig:FigureOne:a} \includegraphics[width=4cm,height=2.4cm]{ FigureOne -a.eps}} \hspace{0.1cm} \subfigure[]{ \label{FigfigureTwo:b} \includegraphics[width=4cm,height=2.4cm]{ FigureTwo -b.eps}} \end{flushleft} \caption{FigureName}\label{fig:FigureName} \end{figure}
其中\hspace{}设定子图的间隔距离。
利用其它软件绘制eps文件插入论文固然方便,但如果能在TeX文件中直接以代码的形式绘制图片,则会让论文变得轻便而不宜损坏。
LaTeX 本身有一个 picture 环境,提供了极其有限的绘图功能:由坐标画斜率有限制的直线、半径有限制的圆、圆角矩形、箭头、标注,以及描点画的粗糙曲线。由于功能太弱、限制过多、使 用复杂,标准 LaTeX 的 picture 环境很少被人使用。
epic、eepic、pict2e 宏包是标准 LaTeX 的 picture 环境的逐级修正扩展加强,不过仍然不方便使用。只是因为一些与作图无关的宏包使用到了 picture 环境的一些功能(如表格的斜线),因而偶尔可以使用 pict2e 宏包。
第三方的LaTeX作图的宏包很多。有的宏包功能专一,如画饼图,有的则范围广泛功能强大。数学交换图一般最常用的是XYpic,如果要画图论图形,我们可以用 PSTricks、TikZ、MetaPost 等等各种工具;但如果并不关心每个结点的坐标而只想要迅速地把几十上百个点连起来,那么 GraphViz 中的 dot 就几乎成了唯一的选项……
更多的宏包及其特点看这里http://zzg34b.w3.c361.com/package/figure-2.htm
Windows:
把宏包解压到CTEX\MiKTeX\tex\latex下,用命令行执行texhash。
也可以【中文TeX套装】->【Package Manager】,然后在弹出的窗口中选择【refresh now(立刻更新)】。
Linux:
把宏包解压到 USERNAME\local\texmf,然后刷新数据库,即texhash。
JabRef 的文献数据库是纯文本的 bib 文件,可以将该数据库文件放在该主题文献的目录下。比如要建立一个 liver 方向相关文献的数据库,只需建立一个liver目录,在 JabRef 中选择 File->New Database,然后 Ctrl-S,将该数据库起名 liver.bib,保存在liver目录下。然后将 File->Database properties 中的 Database Encoding 设置为 UTF-8(这是因为论文的作者可能是老外和我们会经常用中文写些注释,所以最好用国际化的字符集), Directory 都设置成点号 “.”(表示当前目录,这样你就可以将整个目录打个包,扔到另一台 Linux/Win/Mac 机器上照常使用)。
文献数据库的内容自然是一篇一篇的论文,每篇论文在数据库中占一条记录。那么如何添加论文呢?自然不必全部手工添加,几乎所有的数据库在提供论文下载的同时都有该论文 citation 信息的下载,下面这张图上是计算机科学类常用数据库网站的 citation 下载链接示例。也许你以前不知道它们是做什么用的,但你总能在文章下载页面的某个地方找到它们。
点开 citation 的链接,将内容保存为相应的文件名。比如 BibTeX 格式的 citation 信息,将其保存到名为 xxx.bib 的纯文本文件中,然后到 JabRef 里选择 File->Import into current database,将该文件导入当前数据库,你就会发现数据库中多了一条记录。当然,JabRef 支持很多 citation 信息格式,但是既然 JabRef 采用 BibTeX 格式管理数据库,我们还是尽量下载 BibTeX 格式的 citation。
每次只导入一条记录未免太麻烦了些,由于很多参考文献信息都是纯文本格式的,那么我们可以将很多条记录分段拷贝到xxx.bib里,然后集中导入。
①安装Bibtex4Word
a)登录http://www.ee.ic.ac.uk/hp/staff/dmb/perl/index.html
b)确保机器上已经安装有TeX软件,推荐使用以MiKTeX为核心的中文套装CTeX
c)确保机器上已有管理BibTeX形式的参考文献管理工具,推荐使用JabRef
d)将解压缩后的Bibtex4Word软件文件夹中的“bibtex4word.dot”文件,复制粘贴至Word的启动文件夹:
Vista/Win7/Win8: C:\Users\你的用户名\AppData\Roaming\Microsoft\Word\STARTUP
e)重新启动Word后,Word的工具栏上将会出现Bibtex4Word的工具条
②使用Bibtex4Word
a)用JabRef打开包含文献的.bib文件,双击想要插入Word的文献,复制最下面一栏Bibtexkey中的字符串,每个字符串对应一篇文献
b)回到Word界面,先在你想要插入类似[1]一类的数字标号处,点击Bibtex4Word工具条中的,出现一串引用代码;
c)先不要着急,将光标移到你论文的参考文献那一章节,点击右边的,便可自动生成文献的相关信息,而b)步骤中的代码串也变成了对应的数字标号。
这里我们将讲解如何使用JabRef在CTeX编辑器WinEdt里进行文献推送。
①设置
在上图的下拉菜单中选择进行文献推送的目标编辑器。
这里我们使用WinEdt。并在工具栏Options-Preference-External programs-External programs-Settings for WinEdt
设置Path to WinEdt.exe为你安装的WinEdt的位置即可,即CTEX(安装目录)\WinEdt\WinEdt.exe。设置好后选择ok-ok即可。
②在WinEdt中添加命令
在\being{document}之后添加命令:\bibliographystyle{IEEEtran}(括号内为文献模板,可更改。需在你的tex文件相同目录下添加对应的bst文件。本例为IEEEtran.bst。当然,可将该bst文件添加到CTEX(安装目录)\MiKTeX\bibtex\bst目录下,这样在你所有的ctex工程里可以使用)
在\end{document}之前添加命令:\bibliography{SSDRef}(括号内为你所要使用的bib文件,可多个,用逗号隔开)
③推送
首先在你所打开的bib文件里找到你要引用的文献,点击即选择它;
然后在WinEdt用光标定位你将要推送的文献引用的位置;回到jabRef界面,点击工具栏中按钮,即将该引用推送到指定位置。如
④编译
如上图,编号为点击顺序。即LaTex->BibTex->LaTex.。这样,文献即被引如到文章中。
注意:过程中会生成bbl文件还有aux文件,如果编译时有报错,可尝试删除该bbl和aux文件再进行编译。
由于不好演示,请大家自己进行尝试体会一下,方法是很简单的。
工具栏中Line Numbers,即可显示行号。
很多期刊、建模等需要提交论文的比赛都提供了LaTeX模板,下载后在模板中填充内容就好,相应的格式都是提前设定好的。
这里需要提醒读者的是,模板中往往含有长段的注释,大多是对文本、公式、图片、文献等内容的使用说明。
当遇到编写问题时,查看这些注释往往比Google关键词要高效得多。
①LaTeX 编辑部:http://zzg34b.w3.c361.com/index.htm
②包老师的latex学习笔记
③去文件目录CTEX\CTeX\ctex\doc中看看,ctex-faq.pdf可以解答大多数遇到的问题,非常方便。
以上为两天学习的全部收获,总结与此,以感谢互联网强大到能解决大部分问题,感谢电脑另一端素未谋面的众多好心人。
===================================================================
之前用LaTeX写论文时,参考文献都是手动添加管理的,真是让人很抓狂。所以这次趁着假期,简单看了一下怎么使用BibTeX对参考文献进行管理,这里以IEEE的最新模板为例。
首先说明,我之前用的是MiKTex和TeXnicCenter,用这两个组合,按照网上教程搞了半天,发现TeXnicCenter中如果选择BibTeX编译就会报错:“bibtex.exe: GUI framework cannot be initialized.” 实在不知道怎么回事,就将LaTeX安装包换成TeX Live(需要将之前安装的MikTex卸载)。说实话TeX Live也实在不智能,其ISO文件可以在CTEX的Mirror下载到:http://ftp.ctex.org/mirrors/CTAN/systems/texlive/Images/,但是郁闷的是把iso下载下来运行时,会报“perl.exe 已停止工作”,最后还是按照这里:http://www.tug.org/texlive/acquire-netinstall.html的在线安装包安装好的(其间也是断断续续弄了好几遍)。按照微博上大家的推荐,这次改用了Texmaker这个工具,发现安装很简单,可以自动识别大部分TeX Live的组件。
下面以IEEE的最新模板为例,说说怎么样生成符合其格式要求的参考文献:
在这个页面:http://www.ieee.org/conferences_events/conferences/publishing/templates.html下载Windows版本的两个压缩包。(其实这些模板最官方的版本还是在CTAN上,但是前面这个页面是压缩包,下载起来更方便些)
IEEEtranBST2.zip这个压缩包是和BibTeX相关的,具体我也不解释了,讲讲需要做的事情:将这个压缩包中的IEEEtran.bst和IEEEtranS.bst拷贝至下面的目录:
%TeX Live安装目录%\texmf-local\bibtex\bst (这里需要注意的是,TeX Live大部分文件都被推荐安装到如2012这样年份代表的目录下,但是texmf-local这个目录是一些和用户设置相关的内容,这样可以保证重装或完全升级TeX Live后保留所有的用户数据),第二个文件中的S表示参考文献按照作者名等排序(大部分情况不用,因为IEEE很多要求是无序参考文献,就是说按照参考文献在文中出现的顺序编号)
其次,将上面压缩包中的IEEEabrv.bib和IEEEfull.bib拷贝至下面的目录:
%TeX Live安装目录%\texmf-local\bibtex\bib。
我们以windows_latex_template.zip压缩包中的bare_conf.tex为例,在这个文件的\end{document} 之前添加这两条语句:
\bibliographystyle{IEEEtran}
\bibliography{IEEEabrv,IEEEexample}
这里其实就告诉编译器,我们将用到IEEEabrv.bib和IEEEexample.bib这两个文件。前者我们已经设置好了。后者就拷贝到和bare_conf.tex在同一文件夹中。那么我们在正文中加入:
\cite{IEEEexample:articleetal}
其实就表示在上面两个文件中查找ID为IEEEexample:articleetal的BibTeX记录,我们看看这个记录在IEEEexample.bib中长什么样子:
@article{IEEEexample:articleetal,
author = "F. Delorme and others",
title = "Butt-jointed {DBR} Laser With 15 {nm} Tunability Grown
in Three {MOVPE} Steps",
journal = "Electron. Lett.",
volume = "31",
number = "15",
year = "1995",
pages = "1244-1245"
}
其实具体含义一看便知,接下来我们需要对上面的tex文件编译。首先在Texmaker中选择XeLaTeX,编译生成aux文件(此时一般会报错,不用管),再用BibTeX编译一遍,生成bbl文件,再重新用XeLaTeX编译两遍,两次生成dvi文件(因为它第一遍需要解决参考文献的问题)。然后我们再用PDF查看,就可以看到在文中生成正确的参考文献引用了。
下面还有一个主要问题需要解决,如果同时引用好几篇,那么这是在文中是分开的,如[2], [3]这个样子,一种最简单的解决方式是在
\documentclass[conference]{IEEEtran}
的后面加入:
\usepackage[numbers,sort&compress]{natbib}
在引用时,需要把多篇引用写在同一个cite中,如:
\cite{ZongweiGligor-335,WheeldonCounsell-331}
这样就可以实现诸如[2, 3]这样的形式了。
最后一个需要解决的问题,怎样整理正确的BibTeX应用,很多教程中提到了JabRef,但是我安装之后发现很郁闷,我点击其Search——web search时,这个软件没有一点反应。我又试了试NoteExpress,EndNote等软件,都存在一些问题:用NoteExpress(2.7.1版本)导出的bib文件有问题,EndNote(X4版本)不能在线搜索IEEE数据库。所以又对比了一下通过IEEE、ACM和Google Scholar以及CiteULike导出的BibTeX文件,严格意义上来说,生成的BibTeX文件都不符合要求。例如,在刚才IEEEexample.bib文件中给出的会议论文的booktitle字段应该长这个样子:
booktitle = "Proc. {IEEE} International Workshop on
Microelectromechanical Systems ({MEMS}'97)"
但是所有的自动生成BibTeX记录都不是缩写的Proc而是如Proceedings of the 20XX IEEE Symposium on,或者干脆没有Proc或Proceedings of。个人认为,其实并不一定要完全符合要求,对比了很多TOP的会议,很多论文的参考文献格式也是大致符合,只要保证在一篇文章中风格一致即可。整体来说,IEEE和Google Scholar生成的文件比较准确。如果实在要求严格,可以在最后出版时再手动调整。
今天就简单总结这么多,希望能对刚开始用的朋友提供些帮助。