LaTeX相关笔记

 

$\LaTeX$相关问题与解决方式, 不定期更新。

公式相关

调整公式显示大小

论文中时常会出现公式过长超出栏位的情况, 一般可以通过换行、跨双栏的方式解决; 对于略超出栏位的公式, 可以通过适当放缩公式的方式解决, 使用\resizebox, 用法如下:

\resizebox{<length>}{<height>}{$ math equations $}

一共有三个参数, 分别指定:长度、高度以及内容。该方法用于文本模式, 而非公式模式1, 需要显式地声明公式, 举例如下:

\begin{equation}
    \resizebox{0.91\hsize}{!}{% 百分号用于去掉由换行多出的空格
        $y_{t}^{3} = -145.071 - 0.003 x_{t-1}^{7} + 0.459 x_{t}^{6} + 0.001 x_{t-1}^{8} 
                     -5.071 x_{t-1}^{9} + 7.322 x_{t-1}^{5} - 0.235 x_{t-1}^{1}$% 此处百分号作用同理
        }
\end{equation}

以上例子, 通过\resizebox将公式的长度设置为栏宽的0.91倍, 而第二个参数用!代替, 表示相应的保持长宽比不变2。此外, 由于\resizebox用于文本, 换行将被解释为空格, 这里通过添加%的方式跳过换行而避免多余的空格, 一方面改善了代码阅读体验, 也不影响编译的结果。

左侧上下标

通过^{}, _{}可以在表达式的右侧添加上、下标, 而如果需要在左侧添加时, 可以通过\sideset命令实现, 该命令属于amsmath宏包, 用法如下:

{\sideset{^#1 _#2}{^#3 _#4} 表达式}

其中, #1, #2, #3, #4为占位符, 分别表示表达式的左上、左下, 右上, 右下四个位置。如果只需要左侧上、下标, 则可将#3, #4占位符留空, 但不可省略^, _。用例如下3:

{\sideset{^1_2}{^3_4}\sum }

\({\sideset{^1_2}{^3_4}\sum }\)

算法换行保持缩进

在使用algorithm包编辑算法时, 偶尔会需要进行换行, 但不增加行号, 在此记录比较简便的方法4

  • 示例:
\begin{algorithm}
    \begin{algorithmic}[1]
        \State \hspace{5mm} Here is a sentence that needs to be broken into new line \newline
               \hspace*{5mm} while maintaining indent.
    \end{algorithmic}
\end{algorithm}

效果如图所示:

wrap

其中用到的关键词包括: \newline以及\hspace*{}。两者搭配使用即可。\newline负责换行并保持行号不自增(如果是\\会使行号自增); 而\hspace*{}负责缩进控制, 务必加上*, 以告诉编译器此处缩进有效, 否则缩进将被无视5

$\max$下换行

  • 示例:
\[\max_{\substack{\alpha, \beta, \gamma, \\\\ \phi, \psi} } \quad \text{Objective} \nonumber\]
  • 源码:
\max_{\substack{\alpha, \beta, \gamma, \\ \phi, \psi} } \quad \text{Objective}

用到的语法是: \substack6, 需要引入的包为: amsmath

安装

Linux上安装texlive

在windows安装ctex合集就能搞定日常需要使用的各种tex环境与包, 相应的在Linux上需要安装texlive以配置latex的环境。通过以下命令安装:

sudo apt-get install texlive

该命令将安装常用的tex环境和包, 但是仍然缺若干的package或字体, 例如: algorithm, multirow以及bbm, 相应的可以通过安装texlive-science7, texlive-latex-extra8以及texlive-fonts-extra9补充。

此后, tex文件可以正常编译, 但可能出现无法显示参考文献的情况, 原因是还缺少texlive-publishers, 需要相应安装10

Linux上完全卸载texlive

sudo apt-get purge texlive*
sudo rm -rf /usr/local/texlive/* and rm -rf ~/.texlive*
sudo rm -rf /usr/local/share/texmf
sudo rm -rf /var/lib/texmf
sudo rm -rf /etc/texmf
sudo apt-get remove tex-common --purge
rm -rf ~/.texlive
find -L /usr/local/bin/ -lname /usr/local/texlive/*/bin/* | xargs rm

杂项

参考文献控制显示作者数量

IEEEtran模板提供了控制参考文献省略作者数量的接口11, 需要在两处做改动以适配个性化需求, 分别是:

  • 正文中\begin{document}之后插入\bstctlcite{IEEEexample:BSTcontrol}, 注意务必在\begin{document}之后插入, 而不是导言区(即之前)
  • 首个引入的bib文件首行插入以下内容:
    @IEEEtranBSTCTL{IEEEexample:BSTcontrol,
        CTLuse_forced_etal       = "yes",
        CTLmax_names_forced_etal = "3",
        CTLnames_show_etal       = "2"
    }
    

其中, CTLuse_forced_etalCTLmax_names_forced_etalCTLnames_show_etal分别控制: 是否启用作者数量控制、触发作者数量控制的门限、显示的作者数量。以上的参数设定生效后, 参考文献中作者数量超过3人的文献将仅显示前两位作者, 其他作者以et al代替。其他若干可控制的参数可参阅How to Use the IEEEtran BIB$\mathrm{\TeX}$ Style

以下给出完整示例12:

  • 主文件main.tex
\begin{document}

\bstctlcite{IEEEexample:BSTcontrol} % 使修改的参数生效

\cite{ref1}
\bibliography{ref}
\bibliographystyle{IEEEtran}

\end{document}
  • 参考文献ref.bib
@IEEEtranBSTCTL{IEEEexample:BSTcontrol,
    CTLuse_forced_etal       = "yes",
    CTLmax_names_forced_etal = "3",
    CTLnames_show_etal       = "2"
}

@article{ref1,
    author = {Braggins, Don},
    journal = {Sensor Review},
    month = {December},
    number = {4},
    pages = {272--277},
    title = {Fingerprint sensing and analysis},
    volume = {21},
    year = {2001}
}

IEEEtran会议模板启用\thanks

默认情况下, IEEEtran会议模板禁用了\thanks, \IEEEmembership等标识, 导致编译时被略去, 可以通过在\begin{document}前加入\IEEEoverridecommandlockouts消去禁用13

TexStudio生成dvi文件

默认情况下, texstudio采用pdflatex编译器, 将由tex文件生成pdf文件。将编译器修改为latex即可默认生成dvi文件。

需要注意的是latex编译器对.pdf格式插图支持不如pdflatex14, 最好使用.eps插图。

PDF插图转eps格式

接上一条, 若插图为pdf格式, 需要转为eps格式。Windows可以使用Adobe acrobat另存为选择eps格式即可。Linux可以使用如下脚本15, 将其保存为pdf2eps:

#!/bin/sh
# $Id: pdf2eps,v 0.01 2005/10/28 00:55:46 Herbert Voss Exp $
# Convert PDF to encapsulated PostScript.
# usage:
# pdf2eps <page number> <pdf file without ext>

pdfcrop "$2.pdf" "$2-temp.pdf"
pdftops -f $1 -l $1 -eps "$2-temp.pdf" "$2.eps"
rm  "$2-temp.pdf"

其中用到pdfcroppdftops, pdfcroptexlive-extra-utils组件之一。

Unknown document class (or package)

论文写作时如在IEEEtran模板下使用caption包, 大概率会出现如下警告提示:

Unknown document class (or package),
(caption)   standard defaults will be used.
See the caption package documentation for explanation.

其原因在于16:

This warning appears when your document does not have definition of \@makecaption command.

解决办法在这里给出, 不再赘述。