1# @Time    : 2020-12-28
2# @Language: Markdown
3# @Software: VS Code
4# @Author  : Di Wang
5# @Email   : [email protected]

因为要准备写大论文了,之前写 JACoW 论文都是直接拿template往里填充,对TeX语法也并不熟悉,决定稍微学习下,文章基于overleaf的教程和<latex入门-简版>-刘海洋

基础概念

类似于HTML 和 CSS , tex文件可以有两种格式定义:classstyle,前者是针对一个特定文档类型,后者则主要是添加某种feature。

BibTeX

参考文献管理是个麻烦事。 BibTeX涉及两种格式:bstbib

bst代表Bibliography Style,和tex文件的style类似,定义了参考文献的格式,比如期刊名怎么缩写,作者名字是名在前还是姓在前等等。

bib文件就是一个参考文献数据库文件,在一个bib文件里放一堆reference就构成了一个数据库,然后需要在文字哪个部分用哪个就在tex正文中用\cite{label}命令去引用,其中label是自定义的某个文献的别名。不引用的话默认不会出现在PDF文件中,除非用了\nocite{label},表示“我没有在正文中引用这个文献,但依然要在文末的reference section里显示它”。

大致了解LaTeX的都知道,需要多次编译,过程如下。

1(xe/pdf)latex foo.tex   # 表示使用 latex, pdflatex 或 xelatex 编译
2bibtex foo.aux
3(xe/pdf)latex foo.tex
4(xe/pdf)latex foo.tex

为什么需要四次编译?具体细节参考这篇

  1. LaTeX读取tex文件,找里面出现的cite命令,然后创建一个aux后缀的辅助文件,表示要引用某个label的文献,但此时还不知道是哪个文献。
  2. 由BibTex读取aux文件,去参考文献数据库里找名为label的文献,然后生成一个bbl文件,bbl文件里就是latex格式的bibitem列表。
  3. LaTeX这时候去读bbl文件,把文献列表在PDF中显示,然后更新aux文件,建立label和文献编号的关系。
  4. 最后一步,再读取aux文件,把正文中引用部分的label也替换成编号。

bib文件大概长这样:

1@book{adams1995hitchhiker,
2  title={The Hitchhiker's Guide to the Galaxy},
3  author={Adams, D.},
4  isbn={9781417642595},
5  url={http://books.google.com/books?id=W-xMPgAACAAJ},
6  year={1995},
7  publisher={San Val}
8}

而通过bibtex编译生成的bbl文件长这样:

1\begin{thebibliography}{9} % Use for 1-9 references
2	\bibitem{SuperKEKB}
3	    Y. Ohnishi et al., 
4	    \textquotedblleft{Accelerator design at SuperKEKB}\textquotedblright,
5        \emph{Prog. Theor. Exp. Phys.}, 2013, 03A011.
6    ...
7	\end{thebibliography}

当然也可以直接在tex文件里自己写bibitem,不过写的多了估计就意识到为什么要发明BibTeX这个东西了。

基础语法

在前言(preamble)中添加一些设置值,然后\maketitle,正文中的一些基础语法,斜体,加黑,下划线,插入图片表格,标签以及如何引用。

数学公式可以是inline mode或者displayed mode,后者可以添加公式编号。

 1\documentclass[12pt, letterpaper, twoside]{article}
 2\usepackage[utf8]{inputenc}
 3\usepackage{graphicx}
 4\graphicspath{ {images/} }
 5
 6\usepackage{amsmath}
 7
 8\title{First document}
 9\author{Hubert Farnsworth \thanks{funded by the Overleaf team}}
10\date{February 2017}
11
12\begin{document}
13
14\maketitle
15\tableofcontents
16
17\begin{abstract}
18This is a simple paragraph at the beginning of the 
19document. A brief introduction about the main subject.
20\end{abstract}
21
22We have now added a title, author and date to our first \LaTeX{} document!
23
24Some of the \textbf{greatest}
25discoveries in \underline{science} 
26were made by \textbf{\textit{accident}}.
27
28\begin{figure}[h]
29    \centering
30    \includegraphics[width=0.25\textwidth]{mesh}
31    \caption{a nice plot}
32    \label{fig:mesh1}
33\end{figure}
34
35As you can see in the figure \ref{fig:mesh1}, the 
36function grows near 0. Also, in the page \pageref{fig:mesh1} 
37is the same example.
38
39\begin{itemize}
40  \item The individual entries are indicated with a black dot, a so-called bullet.
41  \item The text in the entries may be of any length.
42\end{itemize}
43
44\begin{enumerate}
45  \item This is the first entry in our list
46  \item The list numbers increase with each entry we add
47\end{enumerate}
48
49The mass-energy equivalence is described by the famous equation
50\[ E=mc^2 \]
51discovered in 1905 by Albert Einstein. 
52In natural units ($c = 1$), the formula expresses the identity
53\begin{equation}
54E=m
55\end{equation}
56
57\begin{center}
58 \begin{tabular}{||c c c c||} 
59 \hline
60 Col1 & Col2 & Col2 & Col3 \\ [0.5ex] 
61 \hline\hline
62 1 & 6 & 87837 & 787 \\ 
63 \hline
64 2 & 7 & 78 & 5415 \\
65 \hline
66 3 & 545 & 778 & 7507 \\
67 \hline
68 4 & 545 & 18744 & 7560 \\
69 \hline
70 5 & 88 & 788 & 6344 \\ [1ex] 
71 \hline
72\end{tabular}
73\end{center}
74
75\end{document}

对于分段:

10	\chapter{chapter}
21	\section{section}
32	\subsection{subsection}
43	\subsubsection{subsubsection}
54	\paragraph{paragraph}
65	\subparagraph{subparagraph}

对于特殊字符:

字符功能打印字符本身
#宏参数\#
$数学公式$
%注释\%
^公式上标\^{} or \textasciicircum
&表格中分列\&
_公式下标\_
{ }processing block\{ \}
~不可\textasciitilde or \~{}
\符号后接命令\textbackslash

自定义命令:

对于\newcommand{\plusbinomial}[3][2]{(#2 + #3)^#1}[3]代表总共三个参数,[2]代表第一个参数的默认值。

 1\newcommand{\plusbinomial}[3][2]{(#2 + #3)^#1}
 2
 3To save some time when writing too many expressions 
 4with exponents is by defining a new command to make simpler:
 5
 6\[ \plusbinomial{x}{y} \]
 7
 8And even the exponent can be changed
 9
10\[ \plusbinomial[4]{y}{y} \]

自定义environment:

以下示例用了两种方法定义了带编号的environment

 1%In the preamble
 2---------------------------------
 3%Numbered environment
 4\newcounter{example}[section]
 5\newenvironment{example}[1][]{\refstepcounter{example}\par\medskip
 6   \noindent \textbf{Example~\theexample. #1} \rmfamily}{\medskip}
 7
 8
 9%Numbered environment defined with Newtheorem
10\usepackage{amsmath}
11\newtheorem{SampleEnv}{Sample Environment}[section]
12--------------------------------------------------------------------
13
14
15\begin{example}
16User-defined numbered environment
17\end{example}
18
19\begin{SampleEnv}
20User-defined environment created with the \texttt{newtheorem} command.
21\end{SampleEnv}

自定义class

一个class文件的通常分为四个部分:

identification

定义了版本,class的名称为Thesis,时间。

1\NeedsTeXFormat{LaTeX2e}[1996/12/01]
2\ProvidesClass{Thesis}
3              [2007/22/02 v1.0
4   LaTeX document class]

preliminary declarations

在这个部分定义新命令,引入继承的基础class,引入别的package,以及一些其他声明。

options

\DeclareOption命令接受两个参数,第一个代表option,第二个代表如果接受这个option需要执行的代码。

1\DeclareOption{onecolumn}{\OptionNotUsed}
2\DeclareOption{green}{\renewcommand{\headlinecolor}{\color{green}}}
3\DeclareOption{red}{\renewcommand{\headlinecolor}{\color{slcolor}}}
4\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
5\ProcessOptions\relax
6\LoadClass[twocolumn]{article}

more declarations

其他的一些命令定义等。