使用 VSCode 编写 LaTeX 项目的一些技巧

使用 VSCode 编写 LaTeX 项目的一些技巧

表格单元格多行内容

在 LaTeX 中,表格中的单元格内容默认是单行显示的,如果内容过长,会导致表格宽度过宽。此问题有两种解决方案:

  1. 使用 makecell 宏包中的 \makecell 命令来实现多行内容。
  2. 使用 p{width} 来指定单元格宽度,其中 width 为单元格宽度,如 p{3cm}
  3. 使用 m{width} 来指定单元格垂直居中,其中 width 为单元格宽度,如 m{3cm}
  4. 结合 m{width} 的自定义命令

使用 makecell

makecell 宏包提供了 \makecell 命令,可以在表格中的单元格中插入多行内容。使用方法如下:

1
2
3
4
5
\usepackage{makecell}

\begin{tabular}{|c|}
    \makecell{This is a long line \\ with a line break} \\
\end{tabular}

makecell 宏包的缺点是,如果表格中有多个单元格需要多行内容,需要在每个单元格中都使用 \makecell 命令,这样会使得代码变得冗长。同时,\makecell 命令需要手动在需要换行的地方插入 \\,这样会使得表格内容发生变化时难以维护。

使用 p{width}

p{width} 是 LaTeX 中的一个列格式,可以指定单元格的宽度。使用方法如下:

1
2
3
\begin{tabular}{|p{3cm}|}
    This is a long line with a line break \\
\end{tabular}

使用 p{width} 后,单元格中的内容默认顶部对齐且两端对齐,如果需要垂直居中,需要手动添加 \centering 命令。

使用 m{width}

m{width} 是 LaTeX 中的一个列格式,可以指定单元格的宽度并且垂直居中。使用方法如下:

1
2
3
\begin{tabular}{|m{3cm}|}
    This is a long line with a line break \\
\end{tabular}

使用 m{width} 后,单元格中的内容默认垂直居中且两端对齐,如果需要左对齐,需要手动添加 \raggedright 命令。

结合 m{width} 的自定义命令

为了方便使用 m{width} 列格式,同时实现更好的代码复用,可以定义以下命令用于在表格中插入多行内容。使用方法如下:

1
2
3
\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}

上述命令中,L 里通过 \raggedright 指令让文字左对齐且右边不做对齐(即“ragged right”),而 p{width} 默认会进行左右对齐(两端对齐)或者受表格全局设置影响。C 里通过 \centering 指令让文字居中对齐,R 里通过 \raggedleft 指令让文字右对齐且左边不做对齐(即“ragged left”)。

使用方法如下:

1
2
3
\begin{tabular}{|L{3cm}|}
    This is a long line with a line break \\
\end{tabular}

通过定义 L{width}C{width}R{width} 三个命令,可以快速实现在表格中插入多行内容,并且与默认的 lcr 类似,可以显式指定内容的对齐方式。

正文及表格自动格式化

在 VSCode 编写 LaTeX 项目中的表格时,最常用到的功能即为自动格式化。LaTeX 文件自动格式化依赖 VSCode 中的 LaTeX Workshop 插件,在使用格式化前请先安装该插件。

在 Windows 平台中格式化的快捷键为 Alt + Shift + F。格式化时,VSCode 会根据 &\\ 的位置自动调整表格的对齐方式。通常情况下,表格中的每一行内容末尾都会有 \\ 符号用于标志换行,而每一列内容之间都会有 & 符号用于标志列的分隔。

但在某些情况下,我们可能使用 \makecell 命令手动插入 \\ 符号用于单元格内容手动换行。而在格式化时,VSCode 会根据 &\\ 的位置自动调整表格的对齐方式,在使用 \makecell 的情况下,自动格式化功能可能会依据第一个 \\ 作为表格行末,这时候我们可以通过改变 LaTeX Workshop 设置来调整格式化的方式。

通过在 LaTeX Workshop 设置中指定按照每行最后一个 \\ 作为右边界格式化表格,即可解决上述问题。打开 VSCode 设置,搜索 latex-workshop.formatting.latexindent.args,点击 Add Item 选项,添加以下内容:

1
-y=lookForAlignDelims:tabular:alignFinalDoubleBackSlash:1

MacOS 无法格式化

若格式化时 VSCode - Output - LaTeX Workshop 中出现以下错误内容,则说明缺少 File::HomeDir perl 模块。

stderr: Can’t locate File/HomeDir.pm in @INC (you may need to install the File::HomeDir module) (@INC contains:…

可通过以下命令安装,安装完成后重启 VSCode 即可。

1
cpan -i File::HomeDir

在安装上述 File::HomeDir 时,可能会因为未安装 xcode-command-line-tools 而报错,此时需要先安装 xcode-command-line-tools。报错信息如下:

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

使用以下命令安装 xcode-command-line-tools,执行命令后按照弹窗指示安装,然后重复上述安装步骤即可。

1
xcode-select --install

表格列分隔宽度

在 LaTeX 中,表格中的列默认是没有分隔线的,如果需要添加分隔线,可以使用 \hline\cline{x-y} 命令添加水平分隔线,或者使用 | 符号添加垂直分隔线。但在某些情况下,我们可能需要调整列分隔线的宽度,这时我们可以手动指定列分隔线的宽度。

在 LaTeX 中,可以通过 \tabcolsep 命令来指定分隔线的宽度。使用方法如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
\begin{table}
    \setlength{\tabcolsep}{10pt}
    \begin{tabular}{|c|c|}
        \hline
        1 & 2 \\
        \hline
        3 & 4 \\
        \hline
    \end{tabular}
\end{table}

在上述代码中,\setlength{\tabcolsep}{10pt} 命令用于设置分隔线的宽度为 10pt。在表格中,每个单元格的左右两侧都会有 10pt 的空白,即分隔线的宽度为 10pt

自带类型引用 \cref

在 LaTeX 中,引用文献、公式、图表等内容时,通常使用 \ref 命令。但 \ref 命令只能引用编号,无法引用内容的类型(如“figure”、“section”、“table”等)。为了引用内容的类型,可以使用 cleveref 宏包中的 \cref 命令。使用方法如下:

1
2
3
4
5
6
7
8
\usepackage{cleveref}

\begin{figure}
    \caption{This is a figure}
    \label{fig:example}
\end{figure}

\cref{fig:example}

在上述代码中,\cref{fig:example} 命令会输出 figure 1,即引用了图表类型。但在某些情况下,我们可能需要引用内容的类型的缩写(如“fig”、“sec”、“tab”等),这时我们可以通过改变 \cref 命令的设置来实现。

通过在 LaTeX 文件中添加以下代码,即可实现引用内容类型的缩写:

1
2
\crefname{figure}{fig.}{figs.}
\Crefname{figure}{Fig.}{Figs.}

在上述代码中,\crefname{figure}{fig.}{figs.} 命令用于设置引用图表类型的缩写为“fig.”、“figs.”,使用方式仍为 \cref{fig:example}\Crefname{figure}{Fig.}{Figs.} 命令用于设置引用图表类型的缩写为“Fig.”、“Figs.”,使用方式为 \Cref{fig:example}

若只需要大写的类型缩写,则可直接将 \crefname 中的 fig. 改为 Fig.figs. 改为 Figs.。如下:

1
2
3
\crefname{figure}{Fig.}{Figs.}
\crefname{table}{Table}{Tables}
\crefname{equation}{Eq.}{Eqs.}

常用缩写定义

在 LaTeX 中,有一些常用的缩写,如“e.g.”、“i.e.”、“etc.”等,这些缩写在文档中经常使用,为了方便使用,可以在 LaTeX 文件中定义这些缩写。使用方法如下:

1
2
3
4
\newcommand{\eg}{\textit{e.g.} }
\newcommand{\ie}{\textit{i.e.} }
\newcommand{\etc}{\textit{etc.} }
\newcommand{\etal}{\textit{et~al.}}

在上述代码中,分别定义了 \eg\ie\etc\etal 四个命令,用于输出“e.g.”、“i.e.”、“etc.”、“et al.”。在文档中使用时,只需要调用相应的命令即可。

空格的使用

在 LaTeX 中,空格的使用是非常重要的,不同的空格符号会产生不同的效果。在 LaTeX 中,空格符号有以下几种:

  1. 空格符号: (空格键)
  2. 硬空格符号:~(波浪线键)
  3. 空格命令:\quad

其中,空格符号是最常用的空格符号,用于在单词之间添加可断行空格。硬空格符号用于在单词之间添加不可断行的空格,即在硬空格符号处断行时,硬空格符号不会断开。空格命令 \ 用于在单词之间添加空格,效果与空格符号相同。空格命令 \quad 用于在单词之间添加一个较大的空格。若需要添加更大的空格,可以使用 \qquad\hspace{1cm} 等命令。

在引用文献、公式、图表、使用缩写等情况下,通常在连接处添加硬空格符号,以避免断行时内容分离。示例如下:

1
Zhang~\etal~\cite{zhang2024} proposed a new method.

参考资料

  1. How to create fixed width table columns with text raggedright/centered/raggedleft?
  2. tabular aligning on first double backslash instead of last
  3. How do I change column or row separation in LaTeX tables?
  4. cleveref – Intelligent cross-referencing
Licensed under CC BY-NC-SA 4.0
Built with Hugo
Theme Stack designed by Jimmy