很久没更新了,小论文基本都见刊了,记录下之前写论文碰上的latex一些排版问题吧,比较琐碎。
伪代码跨页问题
最开始使用algorithms
包来写的伪代码,左边会有大方括号,蛮好看的。
不过使用algorithms
包进行伪代码撰写,会导致伪代码无法跨页显示,自动换页自适应后会留有很大空隙,不美观。当遇到跨页问题时,改用 algorithm
和 algorithmic
包组合。需要导入和设置的信息如下。
论文首进行定义:
\usepackage{algorithm}
\usepackage{algorithmic}
\usepackage{float}
\usepackage{lipsum}
\makeatletter
\newenvironment{breakablealgorithm}
{% \begin{breakablealgorithm}
\begin{center}
\refstepcounter{algorithm}% New algorithm
\hrule height.8pt depth0pt \kern2pt% \@fs@pre for \@fs@ruled
\renewcommand{\caption}[2][\relax]{% Make a new \caption
{\raggedright\textbf{\ALG@name~\thealgorithm} ##2\par}%
\ifx\relax##1\relax % #1 is \relax
\addcontentsline{loa}{algorithm}{\protect\numberline{\thealgorithm}##2}%
\else % #1 is not \relax
\addcontentsline{loa}{algorithm}{\protect\numberline{\thealgorithm}##1}%
\fi
\kern2pt\hrule\kern2pt
}
}{% \end{breakablealgorithm}
\kern2pt\hrule\relax% \@fs@post for \@fs@ruled
\end{center}
}
\makeatother
支持自定义语法:
这边展示了对输入输出语句的自定义
\renewcommand{\algorithmicrequire}{\textbf{Input:}}
\renewcommand{\algorithmicensure}{\textbf{Output:}}
基本语法:
参考wiki手册。https://en.wikibooks.org/wiki/LaTeX/Algorithms#Typesetting_using_the_algorithmic_package
个人感觉相对algorithms
的括号,缩进的写法更舒服。
法文格式问题(带音标字符)
参考下表,对应字母自行更换
参考文献显示问题
利用bib进行设定的情况,参考文献默认只有在文中被引用的情况下才会显示,所以可以放心把所有文献先整理成bib文件。
较长公式一栏放置问题
需要借助figure
标签来临时一栏,figure
和equation
嵌套使用。
示例:
\begin{figure*}[t]
\centering
\begin{equation}
\label{eq7}
p(z|z_{\neg b},B,\alpha,\beta) \propto \left\{\begin{matrix}
(n_z+\alpha)\frac{(n_{w_i|z}+\beta)(n_{w_j|z}+\beta)}{(\sum_wn_{w|z}+M\beta)^2} \; for \; S_{b,z}=0
\\
(n_z+\alpha)\frac{((n_{w_i|z})(1+\mu)+\beta)((n_{w_j|z})(1+\mu)+\beta)}{((\sum_wn_{w|z})(1+2\mu )+M\beta)^2} \; for \; S_{b,z}=1
\end{matrix}\right.
\end{equation}
\end{figure*}
公式编辑问题
公式编辑上手是个比较难受的事,最开始熟悉语法建议先使用图形化编辑器进行。
推荐一个在线的https://latex.91maths.com/,熟悉了符号表示后就会发现还是手打快。
表格table排版分割线问题
默认是三线表,也就是列之间没有栏;列之间需要加栏,则在begin的tabular设置中在行距设置间加上 | 符号。如下:
\begin{tabular}{p{2cm}<{\centering}p{1.5cm}<{\centering}|p{2cm}<{\centering}p{1.5cm}<{\centering}}
这样就在四列中间加了一条分割线。
Overleaf工具
一个在线的latex写作平台,自带中文,能在线编译很方便,也是现在最流行的。
网址:cn.overleaf.com
组里一直用的是winEdt,其实写起来都无所谓,总能编译出来的。
Overleaf好的一点是它编译的结果是把error和warn都一条条分开展示出来,不像命令行或者winEdt那样所有输出都糊在一起看不清楚。比较推荐使用。
最主要的一点是根据网上某些文章说明,overleaf中不爆红基本上就能通过论文投稿系统的编译,可以参考。(不过有次投稿没爆红死活传不上去,过了俩钟头毛都没改直接编译过了,还是比较玄学)
UTF-8 Error
在投稿过程中碰到的问题,投稿系统直接把latex源代码上传,并由它的系统进行在线编译,结果本地工具能通过编译,投稿系统却会报错,下面截图源自系统编译报错,主要是因为包含了中文字符。
图中这个until后面不小心写了个中文顿号,引发了error。换为英文符号即可。
很重要的一点是如果在组里本地常用的ctex环境下编译,那这个error并不会出现,因为ctex是针对中文字库做了优化的。所以本地ctex环境下写完确认error后投稿前最好还是在overleaf上建个项目复制编译下过一遍,防止出现问题,尤其是对于在线进行latex直接编译生成pdf的系统而言。
修订稿highlight问题
一般revised版本会要求把修改部分标红处理,一般就是使用package color。格式为\textcolor{red}{修改内容}
。
需要注意的是,对图片名称进行标红处理时,不能将\caption
整句放到括号中,而要把textcolor
放到caption
标签中进行标红,否则会出现图片编号不连贯的问题。不过这样标红不能对自动生成的图片编号标红,可能未来能找到什么更好的办法。
大表排版问题
有时候超大表会溢出页面,使用\resizebox{\linewidth}{!}{}
把整个表体框住,能自适应字体大小和表大小,很方便。
表头合并问题
有时候需要多组实验数据整合成一个大表,左侧表头(感觉不该叫表头,暂时这么叫吧)相同的格可进行合并,语法比较麻烦,这里留个示例好了。
\begin{tabular}{c|ccc}
\hline
\multicolumn{1}{c|}{\textbf{$\boldsymbol\gamma$}} & \multirow{1}{*}{\textbf{$\boldsymbol\rho$}} & \multicolumn{1}{c}{\textbf{A}} & \multicolumn{1}{c}{\textbf{B}}\\
\hline
\multirow{3}{*}{3} & 0-3 & 0.921 & 0.879\\
& 4-9 & 0.960 & 0.929\\
& 10-15 & 0.965 & 0.941\\\hline
\multirow{3}{*}{6} & 0-3 & 0.895 & 0.875\\
& 4-9 & 0.950 & 0.912\\
& 10-15 & 0.955 & 0.929\\\hline
\multirow{3}{*}{9} & 0-3 & 0.858 & 0.842\\
& 4-9 & 0.931 & 0.889\\
& 10-15 & 0.939 & 0.915\\\hline
\end{tabular}
主要是tabular
之后的版型设置和\multirow
的设置。
\multirow
后面分别表示{合并数量}{格式(居中,默认等)}{数值}
总结
主要是个人向的latex排版经验,之前写论文的时候记录了分享下。从零开始自己摸索排版还是蛮麻烦的,好在现在的期刊大多有自己的大模板,后期编辑部也会派人帮忙改格式,还蛮舒服的。