他山之石:
- 每個 LaTeX 用戶都應該使用的 9 個宏包
- LaTeX Tips for arXiv
- LaTeX 交叉引用系統簡介
- LaTeX筆記(八)——數學建模專題
- 如何用Markdown寫論文?
- LaTeX排版札記
- LaTeX排版札記:part 2—速查手冊、導言區、扉頁和公式
- 論文格式細節整理匯總
- https://www.zhihu.com/question/66167182/answer/239342568
- 只要遇到問題,Google 一下,后面加一個
site:http://stackoverflow.com
,能解決你 \(99.999\%\) 的疑問,還能順便把英文練好。 - 新手不要自己造輪子,你 \(99\%\) 的需求都有宏包支持,你只需要找到是哪個宏包,並且看懂手冊就行了。
- 查找手冊可以在命令行里用
texdoc
+ 宏包名字,執行起來有點小慢,我喜歡在 Everything 里搜索宏包名字 + PDF。 - Git 使用,那真是想刪哪就刪哪,大不了再退回來。而且,晚上回家前 push 到網上,回家可以繼續寫。多人合作一篇文章也不錯。
- 寫中文文檔一定要用 ctex 宏包,不要用 CJK 或者 xeCJK 宏包。
tabu
比 tabular 好用太多,cleveref 提供的\cref
比默認的 \ref 好用太多。- 關於 label 的命名,我建議
perfix:caption
,perfix 就是前綴,比如 fig、tab、lst、eqn、等等,一看就知道這個 label 是什么類型。前綴加 caption 的組合,可以很容易的找到需要引用的 label,而不用到處往回翻找。 - 數學公式,要規范,花點時間讀一下
ChinaTEX MathFAQ
。 - 不要忽視 Warning,最好弄明白每個 Warning 是什么意思,怎么產生的,會對文檔造成什么影響,如何消除。實在覺得 Warning 礙眼的話,可以用 silence 宏包屏蔽掉。
- 寫特別大的文檔,要將整個文檔分成若干部分,用
\input
或者\include
加到主文件中。 - 論文實驗數據繪圖可以考慮用
pgfplots
,實驗代碼只需要把結果保存成文本格式的數據就行。有兩點好處:第一,圖的風格與正文一致,強迫症福音;第二,修改實驗不需要改圖,只需要重新跑一下實驗,然后重新用 LaTeX 編譯一下就行了。 - 如果你是強迫症晚期的話,其他插圖可以考慮用
tikz
宏包完成。 - LaTeX 表格對新手不是特別友好,可以考慮用這個 https://www.tablesgenerator.com/。
- 說到表格,不管你用什么編輯器,一定要用支持列模式的編輯器,一定要用等寬字體,千萬別用 Times New Roman 等非等寬字體的,畫表格想死。
- 最后推薦幾個我經常用的宏包吧。
tcolorbox
,簡直是黑魔法的存在;minted/listings
,排版代碼需要他們;enumitem
,列表環境想怎么調就怎么調;xparse
,提供\NewDocumentCommand
等命令,方便定義形參復雜的命令。
- 只要遇到問題,Google 一下,后面加一個
0. 使用 LaTeX 有什么比較好的編寫技巧或習慣?
Detexify
識別手寫的 symbol 然后給出相應的 Latex 代碼並且給出需要 include 的 package,識別的准確度很高。
制作表格
在線制作 Latex 表格的網站神器:LaTeX Table Generator !真正的所見即所得,支持代碼與表格之間的無縫轉換!更支持與Excel的復制粘貼,非常好用!
除去 Latex 之外,網站還支持 Markdown, HTML 等多種格式的表格生成。再也不用花時間做表格了!(當然,如果需要特別精細的調整,還是需要結合自己的需要靈活用LaTex代碼調整。這個工具只是輔助,但是基本上能解決很多的大問題的。)
地址在這里:http://www.tablesgenerator.com
在線LaTex協作編譯器 -- 合作者的利器 Overleaf
自定義一些命令
例如: \def\R{\mathbb{R}}
這樣你敲 $\R$
就等價於 敲 $\mathbb{R}$
了。
.bib
文檔
把所有 citation 都放在一個叫 research.bib
的文檔里,然后代碼的最后加上以下兩行:
\bibliographystyle{unsrt}
\bibliography{research}
bib文檔中一個引用是長這樣的:
@ARTICLE{potts,
author = {{Potts}, R.~B. and {Domb}, C.},
title = {Some generalized order-disorder transformations},
journal = {Proceedings of the Cambridge Philosophical Society},
year = 1952,
volume = 48,
pages = {106--109},
}
這樣的好處是,容易管理 citation,方便重復利用。
以下我均是在 TeXstudio 軟件環境下編譯的!
TeXstudio 有很豐富的向導操作,比如在 向導(w)
中有插入圖片按鈕,十分方便。
1. 基本結構及操作
構成一篇文檔最基本的三個語句是:
\documentclass{book} %模板類型為book
\title{...} %添加標題
\author{...} %添加作者
\date{} %LaTeX會自動生成日期,如果不需要就加這一步將日期去掉
\begin{document} %開始正文
\maketitle %制作封面
\tableofcontents %加入目錄,包括頁碼(非必需)
\mainmatter %如果希望頁碼是從正文部分開始就加上這句命令(非必需)
%下面是幾個主要的層次結構;
\part{...} %第一部分
\chapter{...} %第一章
\section{...} %第一節
\subsection{...} %第一小節
%可以重復排列添加上面的層次結構。
\part{...} %第二部分
\chapter{...} %第二章
\section{...} %第二節
\subsection{...} %第二小節
- 注意一件事情:如果輸入
\tableofcontents
但是pdf格式中卻什么都沒有出現,那么需要再重復幾次 L 與 dvi 轉 pdf 過程。
2. 列表和表格環境
2.1 列表
LaTeX 的列表分為無序列表和自定義列表。
無序列表
\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\begin{document}
\begin{itemize}
\item This is the first row.
\item This is the first row.
\item This is the first row.
\end{itemize}
\end{document}
自定義列表
需要使用宏包,命令為:
\usepackage{...} %...為宏包名字
簡單來說,這個過程就像是 Python 里面的 import 和 C 語言里面的 include。
\usepackage{enumerate}
\begin{enumerate}[A.] %這里我們將項目符號自定義為大寫字母.,也就是說自定義過程需要將內容加在后面的[]中。
\item hello
\item hello,suri
\item hello
\end{enumerate}
同樣可以把 A.
換成任何自定義的符號。另外也可以在 []
中對項目符號的格式進行修改。比如:
\begin{enumerate}[\beseries A.] %對項目符號加粗
\begin{enumerate}[\sffamily A.] %無襯線字體
2.2 表格
表格基本操作
插入表格的命令為編輯器上方的 向導
\(\longrightarrow\) 表格
,點擊之后確認行數和列數(這里是三行三列),將會出現:
\begin{tabular}{|*|*|*|} %這里的內容是為了確認對齊情況
\hline
% after \\: \hline or \cline{col1-col2} \cline{col3-col4} ...
* & * & * \\ %將內容輸入在*的位置
* & * & * \\
* & * & * \\
\hline
\end{tabular}
- 表格內容對齊的方式有三種,分別是居中對齊,靠左對齊,靠右對齊。三種格式反映在表格第一行,代表符號分別為
c
,l
,r
(英文首字母)
例如,如果我們需要將這份表格內容全部居中對齊,則輸入:
\begin{tabular}{|c|c|c|}
- 這里的豎線代表了輸出之后的表格中會出現豎的表格線,如果不需要可以去掉,即為:
\begin{tabular}{ccc}
\hline %添加橫線,單獨一行
-
\cline{2-3}
表示在是在上一行的第二個第三個單元格下面添加橫線。 -
\\
用在每一行的后面,表示表格中的換行 -
\multicolumn {number} {...}{...}
合並列,其中number
為要合並的列的數量,第一個 ... 為對齊方式,第二個為合並的內容。只對該行有效。 -
\multirow
合並行,需要導入該宏包 -
&
是分隔符
添加表頭
table
:
這里的 caption
是標題,label
主要在添加超鏈接時使用,centering
表示所有內容居中對齊。
\begin{table}
\centering
\begin{tabular}{cccc}
\hline
eshi&sd&dfefe&sdsd\\
\hline
12&343&423&312\\
123&32&132&312\\
23&434&231&23\\
\hline
\end{tabular}
\caption{this is my table}
\end{table}
- 注:如果表格太長無法在一頁的話,需要將
table
換成longtable
,並需要使用宏包。
3 特殊字符
%
后面為注釋;輸入正規的%
需要在%
前面加\
$
在數學狀態下使用,數學公式有行間公式和行內公式兩部分組成,行間公式需要在兩個$$
之間進行,居中對齊。一個$
是生成行內公式;正規的$
也需要\
{}
屬於內部命令,需要在前段和后端加\
\
在 latex 有專門的命令為backslash
處理中文時應該用 ctex 宏包
CTeX 和 TeX Live 套件都包含 ctex 處理中文的包,可以看下 ctex 的文檔
- 全中文文檔建議使用 cTex 文檔類:
ctexart
、ctexrep
、ctexbook
、ctexbeamer
\documentclass{ctexart}
或者直接使用
\documentclass{ctex}
4 公式編輯
latex 公式有兩種,分別為行內公式和行間公式(行間公式有兩種插入方式):
$a^2+b^2=c^2$ %行內公式
$$a^2+b^2=c^2$$ %行間公式
\[a^2+b^2=c^2\] %行間公式
4.1 對公式編號
\begin{equation}\label{} %label仍然表示標簽,只有引用時用得到,非必需
\end{equation}
示例:
\begin{equation}
\frac{{ - b \pm \sqrt{{b^2} - 4ac} }}{{2a}}
\end{equation}
編號時根據章節來的,若程序中沒有層次結構,所以顯示為(1)
,這個是可以人為控制的,想要按照哪一部分來編號,可以在前面加代碼:
\numberwithin{equation}{subection} %按照subection對公式編號
而有的時候,如果出現兩個重要程度等同的公式需要用ab進行編號,那么需要使用的命令是:
\begin{subequations}
*%公式
\end{subequations} %使用ab進行編號
需要注意的是,使用 subequations
命令需要使用到宏包 amsmath
,需要在開頭導入宏包。
\documentclass{book}
\usepackage{amsmath} %導入宏包
使用方法舉例如下:
\begin{subequations}
\begin{equation}
\frac{{ - b \pm \sqrt{{b^2} - 4ac} }}{{2a}}
\end{equation}
\begin{equation}
\frac{{ - b \pm \sqrt{{b^2} - 4ac} }}{{2a}}
\end{equation}
\end{subequations}
4.2 公式格式修改
為了起到強調的作用,我們可以給公式加一個框。加框的命令為:
\boxed{}
boxed
命令必須是在 equation
環境之下,舉例用法如下:
\begin{equation}\boxed{
\frac{{ - b \pm \sqrt{{b^2} - 4ac} }}{{2a}}}
\end{equation}
展示如下:
%%latex
\begin{equation}\boxed{
\frac{{ - b \pm \sqrt{{b^2} - 4ac} }}{{2a}}}
\end{equation}
4.3 通過自定義簡化函數
在 latex 中有些命令非常長,在輸入公式的時候會帶來很多的不便,為了簡化這些命令,我們可以使用 newcommand
,這個命令大致相當於 C語言
中的宏替換,用法如下:
\newcommand{\fc}{\frac} %這個命令使用在文章的開頭,表示用 fc 來表示 frac,同時 frac 函數仍然可以繼續使用。
之后在后面需要使用 frac
函數時,只需要輸入 fc
即可,我們可以進行對比:
$$\frac{{ - b \pm \sqrt{{b^2} - 4ac} }}{{2a}}$$
$$\fc{{ - b \pm \sqrt{{b^2} - 4ac} }}{{2a}}$$
但是需要注意的是,自定義的名稱不能夠與 latex 內置的命令沖突。
5 圖片的插入
TeXstudio 可以直接插入圖片
使用 latex 插入圖片時基本的操作有兩個:
- 第一個是需要使用宏包:
\usepackage{graphicx} %在導言區導入宏包
- 第二個為格式
\includegraphics{*.eps} %*代表了文件名
下面以不同格式的圖片為例進行介紹:
- 插入
eps
格式圖片
EPS是 Encapsulated Post Script 的縮寫。EPS 格式是 Illustrator CS5 和 Photoshop CS5 之間可交換的文件格式。 EPS 文件是目前桌面印刷系統普遍使用的通用交換格式當中的一種綜合格式。 ——百度百科
示例:
\begin{figure}
\centering
\includegraphics[scale=0.2]{hellohellotest.eps} %這里 scale 控制圖片的大小為原圖片的 0.2倍,備注:其實可以不加 .eps
\caption{This is a Poster} %圖片標題
\end{figure}
控制圖片輸出格式的幾個常見的具體命令:
width
=* %寬度height
=* %高度 高度和寬度必須標明明確的單位,比如厘米(cm)或者英寸(in)scale
=* %倍數angle
=* %順時針旋轉角度
6 數學公式排版進階
事實上,$$
因為會產生一些不良的間距,缺少錯誤檢查,並且不能正確處理 fleqn
等文檔選項,所以不推薦。
一般的上下標都是放在數學符號的右上,右下方,如果需要將它們寫在正下,正上方(比如寫 max
,寫 ∑
什么的),我們可以使用 \limits
。
$\sum_{i=1}^{n}$\quad %\quad表示拉開一段距離
$\sum\limits_{i=1}^{n}$
\(\sum\limits_{i=1}^{n}\)
想加入多行的上下標?可以使用 \substack
命令,舉個例子:
$\sum\limits_{\substack{i=1\\j=1}}^{n}$ %注意\substack使用的位置
\(\sum\limits_{\substack{i=1\\j=1}}^{n}\)
6.1 定界符
嵌套多了式子會變得非常復雜,也就會變得越來越大!可是這個時候如果你使用括號你會發現,它的大小並沒有什么變化,這就顯得非常的 low,影響美觀,因此我們會在括號外加一個 left 或者是 right 進行大小的控制。
6.2 標准的LaTeX提供的數學字體有以下幾種
%%latex
\[
\mathit{ABCDE}\]
\[
\mathrm{ABCDE}\\\]
\[
\mathbf{ABCDE}\\\]
\[
\mathsf{ABCDE}\\\]
\[
\mathtt{ABCDE}\\\]
[
\mathit{ABCDE}]
[
\mathrm{ABCDE}\]
[
\mathbf{ABCDE}\]
[
\mathsf{ABCDE}\]
[
\mathtt{ABCDE}\]
數學公式對齊
對齊功能一般使用align環境:
注意:
- 每一行都有一個換行
\\
和一個&
符號,每一行按照&
對齊,即對齊之后的所有內容。 - 但是有一點不太好就是每一行之后都會顯示公式的編號,這又顯得不太好。這個時候只要在每一行的最后(
\\
的之前)加一個命令\notag
即可去掉本行公式的標號。當然,也可以使用align*
環境,這種環境可以直接消去所有編號。
%%latex
\begin{align}
&\lim\limits_{x\to 1}\left(\frac{1}{1-x}-\frac{3}{1-x^3}\right)\\
= &\lim\limits_{x\to 1}\left(\frac{x^2+x-2}{1-x^3}\right) \\
=& \lim\limits_{x\to 1}\frac{(x+2)(x-1)}{(1-x)(x^2+x+1)}\\
=& \lim\limits_{x\to 1}\frac{-(x+2)}{x^2+x+1}\\
=& -1
\end{align}