整理目前有用到过的 LaTeX 常用命令,以便于查找。 曾经是放在 Evernote 里面的,可惜它对于代码块复制黏贴后的格式支持实在有点差…

表格

修改表格行高

1
2
\usepackage{array}
\renewcommand\arraystretch{1.75}

表格过长,需要延伸多页

1
2
3
4
5
6
7
8
9
10
11
12
\usepackage{longtable}

% No \table environment on the outside

\begin{longtable}[c]{cccc}
1 & 2 & 3 & 4 \\\hline
5 & 6 & 7 & 8 \\
\caption{}
\label{}
\end{longtable}

% caption and label in the \longtable environment, with a "\\" at the end of the last line of the table body.

注意 longtable 环境不支持 \centerline{}, 如果表格仍然过宽,可以使用以下方式横置页面。

1
2
3
4
5
\usepackage{pdflscape}

\begin{landscape}
% TABLE
\end{landscape}

控制表格某一格宽度

1
\begin{longtable}[c]{p{35em}ccc}

尚未实验这种做法是否能用在 tabular 环境中,并且似乎这样控制大小之后,只能够左对齐。

表格中文字过长,需要换行

在表格内部再加入一个 tabular 环境,此时的 cols 需要写成 {@{}l@{}}, 其中 l 可以换成 c, r. 两个 @{} 的作用是消去不需要的空格。

例如

1
2
3
4
5
6
7
8
\begin{table}[h]
\centering
\begin{tabular}{|l|l|}
\hline
short 1 & \begin{tabular}{@{}l@{}} This is a very long text.\\ You can split into several lines\\ like this. \end{tabular} \\\hline
short 2 & short 3 \\\hline
\end{tabular}
\end{table}

效果为

效果

图片

多图片并列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
\begin{figure}[htb]
\centering
\begin{minipage}[t]{0.32\textwidth}
\centering
\includegraphics[width=\textwidth]{path1.png}
\end{minipage}
\begin{minipage}[t]{0.32\textwidth}
\centering
\includegraphics[width=\textwidth]{path2.png}
\end{minipage}
\begin{minipage}[t]{0.32\textwidth}
\centering
\includegraphics[width=\textwidth]{path3.png}
\end{minipage}
\caption{Mutual Caption} % If put inside minipage, then its independent caption for each figure
\label{}
\end{figure}

注意以上代码如果添加空行似乎会失效,无法并列而是回到上下排列。

超大图片 (tikz)

对于超过一页 A4 大小的超大图片,需要在文档中间更改 geometry 才能放下,找了很多资料都没有成功。以下是一个暂时的解决方案:

新建一个 .tex 文件,利用 \documentclass[border=1cm]{standalone} 单独编译为一个 PDF 文件。

在主文件中,使用如下操作:

1
2
3
4
\usepackege{pdfpages}

% In the body where you want to place the picture
\includepdf[fitpaper=true]{path/to/standalone.pdf}

标题与 TOC

中文

  • 调整中文文章标题格式
1
2
3
4
\documentclass[UTF8]{ctexart}

\CTEXsetup[name = {,、}, number = {\chinese{section}}, format += {\flushleft\heiti}]{section}
\CTEXsetup[number = {(\chinese{subsection})}, format += {\flushleft\normalfont\kaishu}]{subsection}

以上代码将格式调整如下:

示例

这里 \CTEXsetup 的具体用法为:

1
\CTEXsetup[OPTIONS]{NAME}

NAME: part, chapter, section, subsection, etc.

OPTIONS:

  • name: 在章节编号前后插入指定的文本,用逗号分隔,即:name={前,后}
  • number: 章节编号的数字样式
  • format: 标题的全局格式,包括字体大小、对齐方式等
  • nameformat: 章节名(包含编号)的格式
  • numberformat: 章节编号的格式(通常置空)
  • aftername: 章节名和标题之间的格式变换【??这啥
  • titleformat: 标题内容的格式
  • beforeskip: 标题与上方文本的间距
  • afterskip: 标题与下方文本的间距
  • indent: 标题的缩进距离

通常而言中间几个 “format” 并不需要操作,通常控制的都还是整个整体,包括标题和章节名的格式。

设置其他中文标题名字:

1
\CTEXoptions[OPTIONS]

OPTIONS:

  • contentsname
  • listfigurename
  • listtablename
  • figurename
  • tablename
  • abstractname
  • indexname
  • bibname

General

  • 插图与表格目录
1
2
\listoffigures
\listoftables
  • 将插图和表格目录包含在 \tableofcontents
1
\usepackage[nottoc]{tocbibind}

Miscellaneous

中文字体与字号设置

字体:

  • \songti
  • \heiti
  • \fangsong
  • \kaishu
  • \lishu
  • \youyuan

字号:

1
\zihao{NUMBER}

NUMBER:

  • ‘0’: 初
  • ‘1’-‘8’: 一至八
  • ‘-’: 小

示例:

  • -0: 小初
  • 4: 四号
  • -6: 小六

使用罗马字母

1
2
3
4
\makeatletter
\newcommand{\rmnum}[1]{\romannumeral #1}
\newcommand{\Rmnum}[1]{\expandafter\@slowromancap\romannumeral #1@}
\makeatother

多列 enumerate/itemize 列表

1
2
3
4
5
6
7
8
9
10
11
12
\usepackage{multicol} %多列enumerate列表

\begin{multicols}{2}
\begin{enumerate}
\item a
\item b
\item c
\item d
\item e
\item f
\end{enumerate}
\end{multicols}

将正文中未 \cite{} 的文献添加到文末 Reference 中

1
\nocite{KEY}

KEY 为 ‘*’ 时代表加入所有 BibTeX 文件中的条目

用方框将部分内容框起进行强调

1
2
3
4
5
6
7
8
9
10
11
12
13
14
\usepackage{framed}

\newcommand{\properframed}[1]{
{
\centering
\vspace{-2 ex}
\begin{framed}
\vspace{-1.5 ex}
#1
\vspace{-1.5 ex}
\end{framed}
\vspace{-2 ex}
}
}

这里定义了一个新的命令方便框出较短内容进行强调,主要依赖的是 framed 宏包。

代码排版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
\usepackage{minted}

\usemintedstyle{pastie}

\newcommand{\pyinline}[1]{
\mintinline{python}{#1}
}

\newenvironment{py}{% Caution:
\vspace{-1ex}
\VerbatimEnvironment
\begin{minted}[xleftmargin=1em,breaklines,linenos]{python}% Do NOT delete these comment syntax
}% Otherwise there will be error when compiling
{%
\end{minted}%
\vspace{-1.5ex}
}

% When including source file
\inputminted[xleftmargin=1em,breaklines,linenos]{python}{path/to/src.py}

基于 minted 宏包,进行了针对 Python 的外部封装,其他语言同理。

此时编译时需要添加 --shell-escape 选项,并且需要先安装 Python 并且 pip install pygments.

调整部分区域字体

1
2
3
4
5
6
7
8
9
10
11
12
13
14
\usepackage{fontspec}
\newfontfamily\ARG{FONTNAME}

\begin{document}

Main font text.

{\ARG
Text in FONTNAME font.
}

Main font text.

\end{document}

英文文章所有段落不缩进并通过隔行分段

1
\usepackage{parskip}

自定义计数器设置

新建一个计数器

1
\newcounter{COUNTER}

设置一个 COUNTER-A, 在 COUNTER-B 步进时自动清零(用例例如两层嵌套的列表,当外层列表计数器步进时,内部计数器也需要步进)

1
\newcounter{COUNTER-A}[COUNTER-B]

将计数器步进 1/任意数字

1
2
\stepcounter{COUNTNER}
\addtocounter{COUNTER}{SOME-NUMBER}

直接给计数器设置一个数字

1
\setcounter{COUNTER}{SOME-NUMBER}

输出计数器的数字

1
\arabic{COUNTER}

以上命令会输出数字格式的计数器数字。还有其他命令可以选择:

  • \alph: a, b, c…
  • \Alph: A, B, C…
  • \roman: 小写罗马数字
  • \Roman: 大写罗马数字

波浪号与反斜杠打法

  • 波浪号:\textasciitilde
  • 反斜杠:\textbackslash