最近在写毕业论文,使用Latex排版,愈发觉得这是个好东西,决定将一些在使用时遇到的问题总结于此,供日后参考。
目前的初稿我用了ctex默认提供的ieeetran模板,类型是conference:
\documentclass[10pt,conference,compsoc,onecolumn]{ieeetran}
遇到的问题是,我想写中文摘要,但是默认命令\begin{abstract}块中得到的是英文 abstract 。
修改方案是:在\begin{document}之前加上一行 :
\renewcommand{\abstractname}{摘要}
重新定义摘要名称。
另一个问题是,在ieeetran的模板下,会议类型的文章不显示关键字,为了让它出来,\begin{document}之前加上一行命令:
\IEEEoverridecommandlockouts
参考自:http://blog.sciencenet.cn/blog-509534-499922.html
也可以直接使用\begin{IEEEkeywords}代替,效果相同。
这样关键字名称显示的是: index terms,让它显示 “关键字” 三个字,重新定义:
\renewcommand{\IEEEkeywordsname}{关键字}
再使用\begin{keywords}块就行了。
2014.03.11
昨天遇到一个问题,我尝试使用双栏排版(twocolumn),但是编译后报错说:longtable不支持双栏排版。好吧,我换成一般的表格,并调整格式。新的问题出现了,由于我的数据列比较少,显得表格的自然宽度比较窄,因此我将表格宽度设置为页面宽度的90%,并依此设置每一列的宽度,这样表格就比较饱满了。新的问题出现了,我在设置列宽时使用的p{0.15\textwidth}参数,但这样好像不能指定列格式(左对齐、居中等),如果指定会被当作新的列。该怎么办呢?
查了资料发现很简单,只需要调整列参数即可:在列宽度参数后加上:<{\centering}命令,让该列居中显示。一个表头的例子截图:
其实,像上面反复应用的类格式可以定义一个新格式,简化使用:
\newcolumntype{MyCenter}{|>{\centering}p{0.1\textwidth}}
只要在列格式中使用MyCenter即可。
还有一个问题,使用\multirow跨行后,文本不能居中,如图:
第一列的10是跨6行的文本,没有居中。在源码中使用了命令(使跨行文本居中):
\renewcommand{\multirowsetup}{\centering}
也没有起作用。但是上面命令对第一行的“结点数量”起作用了,该文字也是跨行的。经过尝试发现,文本10的跨行的数据宽度使用了自然宽度而没有与列宽一致,将其改为列宽就生效了:
如图,原来设置列宽的地方是个*,表示自然宽度。
至此,表格的大问题没有了,以后继续完善一些细节。
下面来处理一下图片失真的问题。我现在的插图是用MS Visio画出来,并保存成png格式后插入的。这样的图片直接打开比较清晰,但在编译后的PDF文件中就不那么清晰了。根据 xiaowei_cqu 的观点,png和jpg格式的图片都是位图而非矢量图,在放大后会失真。解决方案是将Visio的vsd文件保存成pdf格式,再插入Latex中。这样尝试后的对比图(上图为改进过后):
可以看出,前后的差距还是比较明显的。以后就用这种方法制作插图。另外说一个tips:在使用visio画图时,如果背景太大导致生成的pdf图片太长,可以在编辑时按住ctrl键,鼠标就可以在边缘调整背景的大小了。
还有一种方法是使用ImageMagick软件的convert命令将图片转换成多种格式,据说也能达到效果。这种方法的好处是适用于多种编译环境。在使用PDFLatex编译时,图片格式只能是PDF,jpg和png。该方法我还没有实际使用过,以后有时间去试试。
一个小问题,表格在显示空间不足时总是跳到下一页,但是又没有占满一页,这时文字本应该在表格上下出现,但是没有。把应用浮动包\usepackage{float},下面这样声明表格解决了问题:
\begin{table}[H]
2014.03.12
继续昨天的表格浮动问题。有必要详细了解下浮动体的基本用法。Latex里浮动体有两种:表格和插图,分别表示为\begin{table}[位置]和\begin{figure}[位置]。
位置参数有五种:
系统按照h->t->b->p的顺序尝试放置。默认为tbp。通常写全四个参数让系统去排版,当然可以根据需要自定义,比如不想让一个图片在下页的顶部分割顶部的文字内容,则不写t选项,图片会放置到下页底部。我在论文中的表格比较大,经常出现浮动,采用这些位置选项解决了问题。另外,使用tabular*环境时要设置表格宽度,否则会报错。
2014.03.25
今天在写论文时发现一个小问题:使用SumatraPDF查看编译后的文件时,不能通过双击反向搜索tex文件中对应的位置了。查过资料发现,是我无意将Winedt状态栏的-src选项关掉了。如图:
点击那个位置恢复就好了。
写算法的输入输出是用的是命令\REQUIRE和\ENSURE,但是显示的是英文,我想显示中文的输入输入,只需要如下重定义:
\renewcommand{\algorithmicrequire}{\textbf{输入:}}
\renewcommand{\algorithmicensure}{\textbf{输出:}}
要在正文中使用罗马数字怎么写?
\uppercase\expandafter{\romannumeral 2}
将输出大写罗马数字 II
\romannumeral 2
2014.03.27
今天处理一个表格,该表格的列数很多(有18列),如果直接插入,发现表格边缘已经超出页面边缘,如果调小列宽度,则有些数据不能在一行显示。因此,考虑将表格横置,让其占据一整页。
使用宏包:
\usepackage{rotating}
并使用sideways表格浮动环境:
\begin{sidewaystable}[htbp]
...
\end{sidewaystable}
解决问题,效果如下:
上述做法只是把表格转置,而不是页面转置,注意页码仍然是原来的形式。
2014.03.30
最近由于投稿需要想把Latex文档转换成Word文档,由于公式较多,重新写不太现实,就找了一些自动转换工具。总结起来,以下两种方法比较好。
1. 使用MathType插件的功能。
我Word 2010中装了一个MathType 6插件,在编辑状态下,参数选项菜单的工作区选项设置中有如下选项:
勾上允许从键盘输入Tex语言,即可在编辑时将Latex中的公式转换成Word公式。
2. 使用软件GrindEQ Math
下载地址:http://grindeq.com/index.php?p=latex2word
下载后通过配置引导将软件以加载项的方式嵌入Word菜单中(在关闭Word时进行),重启Word:
在Word中打开tex文件,软件会进行自动转换过程。转换后的公式比较正常,中文是乱码,表格比较乱,这个以后研究一下。不过公式的难题算是解决了。注意,我装了MathType工具,因此在配置GrindEQ Math时,要将转换后的公式配置成MathType,而不是微软公式3.0,否则会提示已有其他公式编辑器存在。另外,这款软件需要激活,只能免费启动十次。
2014.04.20
在做参考文献时遇到一个网址,按照bib文件的定义它应该属于其他文献类型misc,这里我只贴出成功的实现方法。在JabRef工具中,定义bib条目如下:
注意,由于跟bib文件的类型有关,有的资料中说note属性可以换成howpublished属性,内容不变。然后在tex文件中添加包:
\usepackage{hyperref}
然后将工程文件夹下的bbl文件删除,在tex中使用cite命令应用,重新编译即可。效果如图:
对于参考文献的类型代码,网址没有比较合适的。这里的EB/OL表示网上电子公告(electronic bulletin board online),原来对于misc类型的文献,我的bst文件将其显示为“缺文件类型标志代码”,将对应的文字修改为EB/OL即可。
2014.04.22
今天在写论文时改动了参考文献的bib文件,然后重新编译发现引用处出现问号,把bbl和aux文件删除,重新编译也不行。后来采用如下方式解决问题:
1.删除bbl文件、aux文件和生成的pdf文件
2.首先编译tex文件,生成aux文件;然后运行bibtex编译bib文件;最后再运行编译器两次,编译tex文件。发现bib的改动生效。
编译两次的目的是:第一次把各种标号存入一个辅助文件,第二次编译时才知道具体文献的编号。
2014.04.24
今天在生成目录时看到章节标题中的希腊字母不见了。如下方式解决:
\section{参数\texorpdfstring{$\omega$}{\textomega}实验}
使用hyperref的\texorpdfstring命令解决。\texorpdfstring{TEXstring}{PDFstring}
2014.05.29
如果要全局设置所有公式左对齐,可以在文档前面添加引用:
\usepackage[fleqn]{amsmath}
这样过后,所有公式左对齐。若想个别公式居中使用center命令和环境都无效,直接使用行间公式又无法生成编号。解决方案是:在公式前后添加\hspace*{\fill}名令填充空白,使得公式居中。
\begin{equation}
\hspace*{\fill} abcd\hspace*{\fill}
\end{equation}