TeX 那些小事

本文记录了使用TeX的一些心得,多参考自它处,分享给TeXers,欢迎大家交流。


TeXStudio部分

我喜欢的魔法注释:

  • % !TeX TXS-program:compile = txs:///latexmk/{}[-xelatex -synctex=1 -interaction=nonstopmode %.tex] 用于XeLaTeX的编译方式
  • % !TeX TXS-program:compile = txs:///latexmk/{}[-pdf -synctex=1 -interaction=nonstopmode %.tex] 用于pdfLaTeX的编译方式
  • % !TeX TS-program = pdflatex ,等号后面可以换成xelatex
  • % !TeX root = ./your.tex指定主文件
  • % !TeX encoding = UTF-8 指定编码方式
  • % !TeX spellcheck = en_US 指定语法检查的语言

参考资料 :OsbertWang/install_latex

VsCode部分

VsCode的LaTeX插件LaTeX Workshop已经很优秀了,之前的魔法注释还不支持指定参数,现在已经可以了。

首先可以给它的配置文件里面先加上默认的魔法注释,如下:

1
2
3
4
5
6
7
8
9
"latex-workshop.latex.magic.args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOC%"
]
"latex-workshop.latex.magic.bib.args": [
"%DOCFILE%"
]

这时候在主文件开头加上魔法注释% !TEX program = pdflatex,运行时相当于pdflatex.exe -synctex=1 -interaction=nonstopmode -file-line-error "yourfile".tex

如果你还要用bibtex编译参考文献的话在上一个魔法注释下面再加一个魔法注释% !BIB program = bibtex,如果用的时biber后面的参数也可以改成biber

但是你可能想让不同的文档编译时可以带不同的参数,这时候还可以再加一个魔法注释% !TEX options = -synctex=1 -interaction=nonstopmode -file-line-error "%DOC%",等号后面的参数可以自己按需求修改。

看到这里texifylatexmk用户两眼就发亮了。这样的话就不需要配置文件,直接用魔法注释实现你想要的编译。

下面来说明这两种的魔法注释怎么写。

对于texify:

  • 想用xelatex的话这么配置魔法注释

    1
    2
    % !TEX program = texify
    % !TEX options = --synctex --pdf --engine=xetex --tex-option=\"-interaction=nonstopmode\" --tex-option=\"-file-line-error\" "%DOC%.tex"
  • 只用普通的pdflatex的话用下面这个魔法注释

    1
    2
    % !TEX program = texify
    % !TEX options = --synctex --pdf --tex-option=\"-interaction=nonstopmode\" --tex-option=\"-file-line-error\" "%DOC%.tex"

    对于latexmk用户也是类似的

  • 指定用pdflatex编译

    1
    2
    % !TEX program = latexmk 
    % !TEX options = -synctex=1 -interaction=nonstopmode -file-line-error -pdf "%DOC%"
  • 指定用xelatex编译

    1
    2
    % !TEX program = latexmk 
    % !TEX options = -synctex=1 -interaction=nonstopmode -file-line-error -xelatex "%DOC%"

    现阶段的魔法注释还有一定的缺点,也就是说% !TEX options = .....是把默认的魔法注释参数覆盖,而不是在上面添加参数。如果是添加参数的话,它可以写的更精简,而不是一大串,这样就可以在后面加上-pdf -xelatex --shell-escape这类参数,极大方便大家的使用。

还有提醒的一点就是,目前阶段它的工作还不稳定,我断断续续测试过一段时间,发现一些问题。例如用latexmk的魔法注释选择自己的参数时,需要在latexmk后面加上一个空格,否则编译结果只出.dvi文件。

我想大家应该也很难记住这么复杂的魔法注释,但是如果你和我一样很喜欢用的话,下面我提供一个用snippet解决这个问题的简单方案。关于snippet如何使用,最好的参考地址肯定是官方文档啦

为了方便对魔法注释感兴趣用户的使用,我下面分享一下自己写的。如果你有更好的欢迎分享。
当然我写的未必符合你个人的使用爱好,请自己根据喜好调整。

代码段的设置可以放入用户自定义的tex.json文件中,那样需要另外开启提示功能。也可以直接扔到该插件内部的latex.json文件中。

对于使用latexmk编译的用户,可以选用这个:

1
2
3
4
5
6
7
8
9
10
11
12
13
"latexmk": {
"prefix": "latexmk",
"body": [
"% !TEX program = latexmk ",
"% !TEX options = -synctex=1 -interaction=nonstopmode -file-line-error ${1|-pdf,-xelatex|}${8: --shell-escape} \"%DOC%\"",
"\\documentclass${2:[UTF8,]}{${10|ctexart,ctexbook,article,book|}}",
"$3",
"\\begin{document}",
"$0",
"\\end{document}"
],
"description": "Magic for latexmk"
},

MiKTex用户如果喜欢用texify的,可以参考这个:

1
2
3
4
5
6
7
8
9
10
11
12
13
"texify": {
"prefix": "texify",
"body": [
"% !TEX program = texify",
"% !TEX options = --pdf --synctex${1: --engine=xetex} --tex-option=\\\"-interaction=nonstopmode\\\" --tex-option=\\\"-file-line-error\\\"${2: --shell-escape} \"%DOC%.tex\"",
"\\documentclass${3:[UTF8,]}{${4|ctexart,ctexbook,article,book|}}",
"$5",
"\\begin{document}",
"$0",
"\\end{document}"
],
"description": "Magic command for texify"
},

用普通编译方式的可以选择这个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
"general": {
"prefix": "general",
"body": [
"% !TEX program = ${1|xelatex,pdflatex |}",
"%%${2:%} !BIB program = ${3|bibtex,biber|}",
"%${2:%} !BIB options = \"%DOCFILE%\"",
"%${4:%} !TEX options = -synctex=1 -interaction=nonstopmode -file-line-error${5: --shell-escape} \"%DOC%\"",
"\\documentclass${6:[UTF8,]}{${10|ctexart,ctexbook,article,book|}}",
"$7",
"\\begin{document}",
"$0",
"\\end{document}"
],
"description": "Magic command for general compile"
},

下面给一个MWE:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
% !TEX program = texify
% !TEX options = --synctex --pdf --tex-option=\"-interaction=nonstopmode\" --tex-option=\"-file-line-error\" "%DOC%.tex"
%魔法注释加在上面,替换称你想用的就行了。记得下面两行选择相应的一行使用。
\documentclass[UTF8]{ctexart}%测试pdflatex时用这个,把下面那句注释掉。
%\documentclass{ctexart}%测试xelatex时用这个,把上面那句注释掉。

\title{A Silly Article}
\author{Me}

\begin{document}
\maketitle

My favorite article is \cite{supercurves}.
我最喜欢的文章是\cite{supercurves}
\bibliographystyle{plain}
\bibliography{shortbib} %还需要建立一个shortbib.bib文件和这个文件放一起。
\end{document}
1
2
3
4
5
6
7
8
9
%这是shortbib.bib文件
@ARTICLE{supercurves,
AUTHOR={Minghui Xia},
TITLE={Image Registration by "Super-Curves"},
JOURNAL={IEEE Transactions on Image Processing},
YEAR={1985},
VOLUME = {13},
PAGES={720},
}

如果你想用配置文件的话,下面我提供texifylatexmk的配置。至于其它的可以参考这里的配置。如果愿意看插件作者的英文文档当然更好啦。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
"latex-workshop.latex.tools": [
{
"name": "texifyxe",
"command": "texify",
"args": [
"--synctex",
"--pdf",
"--engine=xetex",
"--tex-option=\"-interaction=nonstopmode\"",
"--tex-option=\"-file-line-error\"",
"%DOC%.tex"
],
"env": {}
},
{
"name": "texifypdf",
"command": "texify",
"args": [
"--synctex",
"--pdf",
"--tex-option=\"-interaction=nonstopmode\"",
"--tex-option=\"-file-line-error\"",
"%DOC%.tex"
],
"env": {}
},
{
"name": "latexmkxe",
"command": "latexmk",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"-xelatex",
//"-outdir=%OUTDIR%",
"%DOC%.tex"
]
},
{
"name": "latexmkpdf",
"command": "latexmk",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"-pdf",
//"-outdir=%OUTDIR%",
"%DOC%.tex"
]
},
],

"latex-workshop.latex.recipes": [
{
"name": "texifyxe",
"tools": ["texifyxe"]
},
{
"name": "texifypdf",
"tools": ["texifypdf"]
},
{
"name": "latexmkxe",
"tools": ["latexmkxe"]
},
{
"name": "latexmkpdf",
"tools": ["latexmkpdf"]
},
],

"latex-workshop.latex.magic.args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOC%"
],
"latex-workshop.latex.magic.bib.args": [
"%DOCFILE%"
],

//"latex-workshop.latex.outDir":"%DOC%",

参考资料: James-Yu/LaTeX-Workshop/Compile#building-the-document

有趣的宏包

  • therefore 地址在这里输入\Threrfore 会得到同义的表达
  • optidef
  • minted 展示代码很合适的宏包,编译时要加参数--shell-escape
  • filecontents 一个tex文件里面存放多个“文件”。

宏包加载的美学

geometry的加载需要在fancyhdr宏包前,否则会出现页眉的长度与页面内容的宽度不同。

你用的其它宏包没有特殊说明加载位置的话,hyperref常常最后加载,否则很容易出现问题。

cleveref宏包要在hyperref宏包之后加载。

一些小命令

好看的圆圈注脚制作

1
2
3
\usepackage{pifont}
\renewcommand\thefootnote{\ding{\numexpr171+\value{footnote}}}
\footnote{这个注脚的圆圈数字好看了吧}

参考资料: LaTeX入门,刘海洋

普通的带圈数字制作

1
2
3
\usepackage{tikz}
\newcommand*\circled[1]{\tikz[baseline=(char.base)]{
\node[shape=circle,draw,inner sep=1pt] (char) {#1};}}

参考资料: stackexchange

把Bib文件也放在主文件里,方便做MWE

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
% !TeX TS-program = pdflatex
\documentclass{article}
\usepackage{filecontents}
\title{A Silly Article}
\author{Me}
\begin{document}
\maketitle
\input{another}
My favorite article is \cite{supercurves}.

\bibliographystyle{plain}
\bibliography{shortbib}
\end{document}

\begin{filecontents}{shortbib.bib}
@ARTICLE{supercurves,
AUTHOR={Minghui Xia},
TITLE={Image Registration by "Super-Curves"},
JOURNAL={IEEE Transactions on Image Processing},
YEAR={1985},
VOLUME = {13},
PAGES={720},
}
\end{filecontents}

\begin{filecontents}{another.tex}
Another file.
\end{filecontents}

参考资料: stackexchange

简单的中英文字体配置简单示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
% !TeX TS-program = xelatex
\documentclass{ctexart}
%以下仅介绍如何配置,但是我的具体配置未必适合你使用的场合,请自己合理使用。
% 英文字体配置部分
\setmainfont{Times New Roman}%
\setsansfont{Footlight MT Light}%无衬线字体
\setmonofont{Bookman Old Style}%等宽字体
% 中文字体配置部分
\usepackage{xeCJK}%中文字体
\setCJKmainfont{宋体}%正文字体
\setCJKsansfont{黑体}%无衬线字体
\setCJKmonofont{楷体}%等宽字体
\setCJKfamilyfont{yahei}{Microsoft YaHei}

\begin{document}
\Huge
\centering
中文正文,这个不是微软雅黑

English.

\sffamily 无衬线字体

English

\ttfamily 等宽字体

English

\yahei 这是微软雅黑
\end{document}

参考资源: stone-zeng.github.io

用tex把图片转化成pdf(并不能提高图片的质量)

1
2
3
4
5
\documentclass{standalone}
\usepackage{graphicx}
\begin{document}
\includegraphics{yourpicture}
\end{document}

Welcome to my other publishing channels