2019年8月4日 更新:
LaTeX Commands 插件已经提交到 VSCode 扩展商店,现已可以搜索到。
![8ec54e2b781cd6fb8a04687bab621034.png](https://img-blog.csdnimg.cn/img_convert/8ec54e2b781cd6fb8a04687bab621034.png)
从 2016 年开始接触 LaTeX ,到现在陆陆续续用了三年多了,有很多使用技巧需要总结一下。 这篇博客主要记录技巧,对于一些基础的操作不会进行说明。
编辑器的选用
我用过多款免费的 LaTeX 编辑器,收费破解版的没有用过。 总结下来我觉得需要符合以下条件才是一个好用的编辑器:
- 自动提示和补全
- 自定义宏替换
- 轻量,跨平台
- 可即时预览
于是又以下解决方案:
- TeXStudio
- Visual Studio Code + LaTeX Workshop + LaTeX Commands 扩展
TeXStudio 在 Windows 上由于对高分屏的支持不够好,因此我大部分情况下还用的是 Visual Studio Code 。 但是 TeXStudio 在自动提示和不全以及宏替换方面其实比 VSCode 更好,它似乎可以分析宏包提取出宏包中的命令。 但是作为颜控,以及平常 VSCode 用的最多,因此最终还是选择了 VSCode 。
LaTeX Workshop 是在应用商店中可以搜索到的扩展, LaTeX Commands 是我自己写的扩展,还没有上应用商店。 日后完善后会考虑登录应用商店。
这篇博客也是主要针对 Visual Studio Code 进行的经验总结,不过大部分都可以用于其他软件。
数学公式
LaTeX 最强大的功能是做数学公式,这点应该没有异议。但是往往数学公式做起来会非常繁琐。 尤其是中英文混杂的时候。这时就需要实现以下功能:
- 快捷键插入数学符号
$ $
和$$ $$
并自动将光标导航到中间位置,输入完成后一键将光标切换到最后; - 常用的符号有一个固定的宏定义或宏替换,如矩阵 $mathbf{A}$ 、转置符号 $^mathrm{T}$ 等符号;
- 常用符号组可以快捷输入,如常用的 $x_1, x_2, cdots, x_n$ 等符号组;
快捷数学环境
我使用 VSCode 插件实现的这个功能。安装 LaTeX Commands 后,会增加 Inline Math 命令和 Display Math 命令, 默认绑定的快捷键是 Ctrl + Alt + M
和 Ctrl + Alt + Shift + M
,这样可以实现快捷地插入数学环境符号。
当然这个功能也可以用于 Markdown ,目前没有做文档类型的约束。
常用数学符号
下面列出了一些常用的数学符号的 LaTeX 宏定义
newcommand{diff}{mathop{}!mathrm{d}} % 微分符号
newcommand{cpi}{symrm{pi}} % 圆周率常量符号
newcommand{trans}{^symrm{T}} % 矩阵转置符号
newcommand{hfrac}[2]{left. {#1} middle/ {#2} right.} % 横向分数
newcommand{ddfrac}[2]{displaystyle{frac{displaystyle{#1}}{displaystyle{#2}}}} % 显示模式分数
newcommand{e}[1]{times 10^{#1}} % 科学计数法符号
newcommand{rvec}[1]{left(#1right)} % 行向量
newcommand{cvec}[1]{rvec{#1}^{symrm{T}}} % 列向量
newcommand{diag}[1]{symrm{diag}left(#1right)} % 对角矩阵
由于矩阵的输入也非常繁琐,需要输入 mathbf{A}
,既不便于写作也不便于阅读, 因此可以将拉丁字母表示的矩阵单独定义为宏,以实现方便快捷输入。 由于比较长,这里只截取一部分。
newcommand{va}{symbf{a}}
newcommand{vb}{symbf{b}}
newcommand{vc}{symbf{c}}
newcommand{vd}{symbf{d}}
newcommand{ve}{symbf{e}}
newcommand{vA}{symbf{A}}
newcommand{vB}{symbf{B}}
newcommand{vC}{symbf{C}}
newcommand{vD}{symbf{D}}
newcommand{vE}{symbf{E}}
由于符号 mp
是减加符号,因此只能用 v
前缀表示矩阵和向量。
常用符号组
利用 VSCode Code 代码片段(Snippets)的功能,可以定义符号组。例如,如果定义如下代码片段:
{
"Sequence 1 to n": {
"prefix": "seq1n",
"body": "${3}1${1:,} ${3}2${1:,} cdots${1:,} ${3}${2:n}"
},
"Sequence add 1 to n": {
"prefix": "seqadd1n",
"body": "$1_{1}${2:,} $1_{2}${2:,} cdots${2:,} $1_{${3:n}}$0"
}
}
则可以通过键入 seq1n
输入 1, 2, cdots, n
即 $1,2,cdots,n$ , 光标可以随着代码片段中 ${}
标注的顺序进行跳转。 同样,可以通过键入 seqadd1n
键入 _1, _2, cdots, _n
以实现输入 $x_1,x_2,cdots,x_n$ 。
格式控制
格式可以包括很多,这里就不再进行分类了,仅作简单的罗列,按需取用即可。
摘要和关键字环境
中文论文的摘要和关键字的格式要求 LaTeX 中往往不满足,但是可以使用自定义的环境实现。
newenvironment{Abstract}{noindenttextbf{摘hspace{1em}要}quad!}{}
newenvironment{Keywords}{noindenttextbf{关键词}quad!}{}
其中命令 !
的效果是当你以如下方式使用该环境时:
begin{Abstract}
这是一段摘要
end{Abstract}
摘要字样和摘要内容之间不会增加一个空格。
如果要摘要占通栏、正文分栏,则这样使用
documentclass[UTF8,hyperref,a4paper,twocolumn]{ctexart}
begin{document}
twocolumn[{
maketitle
begin{Abstract}
摘要内容
end{Abstract}
begin{Keywords}
关键词
end{Keywords}
vspace{2baselineskip}
}]
正文内容
列表间距设置
使用 enumitem 宏包进行设置,可以取消与上下段落的间距、设置标签宽度等。
usepackage[inline]{enumitem}
setlist[enumerate,1]{topsep=0pt,partopsep=0pt,parsep=0pt,itemsep=0pt,itemjoin=quadquad,align=right,leftmargin=4em,label=(arabic*)}
参考文献的设置
中文论文的参考文献使用 GB7714 的格式要求。写好 bib 文件后,导言区通过如下命令设置格式
usepackage[backend=biber,bibstyle=gb7714-2015,citestyle=gb7714-2015,hyperref=true]{biblatex}
addbibresource{HouseHLM.bib}
最后打印参考文献列表时使用如下命令:
printbibliography[title=参考文献]
积分号格式设置
意外在网上发现一个 varint.sty 的宏包,里面可以定义不同的积分号格式。使用方法为:
usepackage[fourier]{varint}
该宏包可以在 GitHub 上搜索到。
排版的技巧
单图和多图
图片环境可以整个使用代码片段来快捷插入,如
{
"Single Figure": {
"prefix": "singlefig",
"body": [
"begin{figure}[hbtp]",
"tcentering",
"tincludegraphics[width=$1linewidth]{$2}",
"tcaption{$3}",
"tlabel{fig:$3}",
"end{figure}"
]
}
}
则通过键入 singlefig
即可替换为如下的图片环境命令
begin{figure}[hbtp]
centering
includegraphics[width=linewidth]{}
caption{}
label{}
end{figure}
对于多图环境,可以使用 subfloat
命令实现,代码片段如下
{
"Multiple Figure": {
"prefix": "multifig",
"body": [
"begin{figure}[hbtp]",
"tcentering",
"tsubfloat[$1]{",
"ttincludegraphics[width=$2linewidth]{$3}",
"t}$0",
"tcaption{$4}",
"tlabel{fig:$4}",
"end{figure}"
]
}
}
对应的 LaTeX 代码为
begin{figure}[hbtp]
centering
subfloat[]{
includegraphics[width=linewidth]{}
}
caption{}
label{fig:}
end{figure}
可以在后面增加其他的 subfloat
,这个命令的可选参数中填写子图标题即可。
进度条
在做 beamer 时,对于一些进度类的文字,可以使用进度条代替,显得更直观。可以定义如下
definecolor{color1}{HTML}{4F5D66} % light blue
definecolor{color2}{HTML}{fafafa} % dark grey
newcommand{progressbar}[2][2em]{%
setlength{fboxsep}{0pt}
framebox[#1][l]{textcolor{color1}{rule{#1 * real{#2} / 100}{1.5ex}}}
}
这样使用 progressbar{80}
就可以绘制出 80% 的进度条。