LaTeX教程2
latex10-LaTeX数学公式初步
紧接LaTeX教程1
这一讲,主要讨论在LaTeX中排版时数学公式的问题。
- 为了方便,我们可以打开VSCode的结构视图,以查看文档的结构。
- LateX的文档内容分为文本模式和数学模式,分别用于排版普通文档和数学公式。
- 首先是行内公式,行内公式可以用一对单个$符号进行排版,也可以用小括号命令进行排版,也就是用\引出的左右小括号。还可以使用math环境进行排版,要排版的数学公式置于这些环境或命令中。类似这样的美元符号、小括号命令、math环境中的内容称之为数学模式。当然,这些命令或环境之外的内容,我们称之为文本模式。编译并查看结果,实现了行间公式的正确排版。
% 导言区
\documentclass{article} % ctexbook, ctexrep
\usepackage{ctex}
\usepackage{amsmath}
% 正文区(文档区)
\begin{document}
\section{简介}
\LaTeX{}将排版内容分为文本模式和数学模式,文本模式用于普通文本排版,数学模式用于数学公式排版。
\section{行内公式}
\subsection{美元符号}
交换律是 $a+b=b+a$, 如 $1+2=2+1=3$。
\subsection{小括号}
交换律是 \(a+b=b+a\),如 \(1+2=2+1=3\)。
\subsection{math环境}
交换律是 \begin{math}
a+b=b+a
\end{math}
,如 \begin{math}
1+2=2+1=3
\end{math}。
\section{上下标}
\subsection{上标}
\subsection{下标}
\section{希腊字母}
\section{数学函数}
\section{分式}
\section{行间公式}
\subsection{美元符号}
\subsection{中括号}
\subsection{displaymath环境}
\subsection{自动编号公式equation环境}
\subsection{不编号公式equation* 环境}
\end{document}
- 当然在数学公式中,不可避免的要使用到上标和下标。
- 上标是通过^符号实现排版的。
\subsection{上标}
$3x^2 - x + 2 = 0$
- 如果我们把指数变成20,编译并查看结果
\subsection{上标}
$3x^20 - x + 2 = 0$
- 显然并没有实现需要的排版,LaTeX只是对2进行了上标处理,而0并没有上标处理。此时需要用{}构成分组,实现需要的排版。编译并查看结果,此时排版结果正确。
\subsection{上标}
$3x^{20} - x + 2 = 0$
- 在LaTeX的数学模式中,甚至可以将一个已有的公式作为上标进行处理,要注意使用{}。编译查看结果。
\subsection{上标}
$3x^{20} - x + 2 = 0$
$3x^{3x^{20} - x + 2} - x + 2 = 0$
- 对于下标的排版,LaTeX中是通过下划线实现的。当然,如果下标中有多个字符,而并没有用{}进行分组处理,则无法正确实现下标排版。
\subsection{下标}
$a_0, a_1, a_2$
$a_0, a_1, a_2, ..., a_100$
- 此时需要将构成下标的所有字符置于{}中构成分组,注意查看结果
\subsection{下标}
$a_0, a_1, a_2$
$a_0, a_1, a_2, ..., a_{100}$
- 类似的,也可以将一个已有公式作为下标进行处理,此时注意{}的使用。查看结果
\subsection{下标}
$a_0, a_1, a_2$
$a_0, a_1, a_2, ..., a_{3x^{20} - x + 2}$
- 当然,希腊字母也是构成公式的一个重要元素,在LaTeX的数学模式中,可以直接使用相应的命令排版希腊字母。这些命令都是希腊字母对应的英文名称。注意查看结果。
\section{希腊字母}
$\alpha$
$\beta$
$\gamma$
$\epsilon$
$\pi$
$\omega$
$\Gamma$
$\delta$
$\Theta$
$\Pi$
$\Omega$
- 部分以大写字母开始的命令用于排版大写希腊字母。希腊字母命令也可以用在通用公式排版中。注意查看结果。
\section{希腊字母}
$\alpha$
$\beta$
$\gamma$
$\epsilon$
$\pi$
$\omega$
$\Gamma$
$\delta$
$\Theta$
$\Pi$
$\Omega$
$\alpha^3 + \beta^2 + \gamma = 0$
- 对于一些常用的函数,在数学模式中,也可以用相应的命令进行排版。
\section{数学函数}
$\log$
$\sin$
$\cos$
$\arcsin$
$\arccos$
$\ln$
- 并且可以进一步构成公式,注意查看结果。
\section{数学函数}
$\log$
$\sin$
$\cos$
$\arcsin$
$\arccos$
$\ln$
$\sin^2 x + \cos^2 x = 1$
- 还可以使用上下标构成更为复杂的公式,注意查看结果。
\section{数学函数}
$\log$
$\sin$
$\cos$
$\arcsin$
$\arccos$
$\ln$
$\sin^2 x + \cos^2 x = 1$
$y = \arcsin x$
$y = \sin^{-1} x$
$y = \log_2 x$
$y = \ln x$
- 另一个比较特殊的命令是\sqrt命令,用于排版根式。通过与上下标结合,以及自身的相互嵌套,可以生成复杂的公式。还可以通过\sqrt命令的可选参数指定开方的次数。注意查看结果。
\section{数学函数}
$\log$
$\sin$
$\cos$
$\arcsin$
$\arccos$
$\ln$
$\sin^2 x + \cos^2 x = 1$
$y = \arcsin x$
$y = \sin^{-1} x$
$y = \log_2 x$
$y = \ln x$
$\sqrt{2}$
$\sqrt{x^2 + y^2}$
$\sqrt{2 + \sqrt{2}}$
$\sqrt[4]{x}$
- 当然,分式也是公式构成中一个常用的构成元素。可以在数学模式中直接输入分式,也可以使用\frac命令排版分式,该命令的第一个必选参数是分子,第二个必选参数是分母。编译并查看结果。
\section{分式}
大约是原体积的$3/4$。
大约是原体积的$\frac{3}{4}$。
- 当然,也可以将\frac命令与上下标以及其他的公式排版命令进行结合,从而构成更为复杂的公式。编译并查看结果。
\section{分式}
大约是原体积的$3/4$。
大约是原体积的$\frac{3}{4}$。
$\frac{x}{x^2 + x + 1}$
$\frac{\sqrt{x - 1}}{\sqrt{x + 1}}$
$\frac{1}{1 + \frac{1}{x}}$
$\sqrt{\frac{x}{x^2 + x + 1}}$
- 另一类公式是行间公式。可以使用一对双刀乐符号排版行间公式,将公式置于双到乐构成的数学模式中。编译并查看结果。
\section{行间公式}
交换律是 $$a+b=b=a$$,如$$1+2=2+1=3$$
- 可以适当调整源代码的格式,以使代码更加清晰。注意,此处多了一个逗号,可以直接进行删除。
\subsection{美元符号}
交换律是 $$a+b=b=a$$
如
$$1+2=2+1=3$$
- 也可以使用中括号命令进行行间公式排版,也就是由\引出的左右方括号命令。
\subsection{中括号}
交换律是
\[a+b=b+a\]
如
\[1+2=2+1=3\]
- 还可以使用displaymath环境来排版行间公式。可以看到,结果是一样的。
\subsection{displaymath环境}
交换律是
\begin{displaymath}
a+b=b+a,
\end{displaymath},
如
\begin{displaymath}
1+2=2+1=3.
\end{displaymath}
- 若需要对公式进行自动编号,需要使用equation环境进行公式排版。将需要排版的公式置于equation环境中,注意查看结果。
\subsection{自动编号公式equation环境}
\begin{equation}
a+b=b+a
\end{equation}
- 此时LaTeX对公式进行了自动编号。也可以对equation环境中的公式使用\label命令对公式添加标签,在任意位置,我们就可以通过\ref命令引用这个标签,从而实现公式的交叉引用。编译并查看结果,从而实现了正确的交叉引用。
\subsection{自动编号公式equation环境}
交换律见式\ref{eq:commutative}
\begin{equation}
a+b=b+a \label{eq:commutative}
\end{equation}
- 如果不需要对公式进行编号,我们可以用带*的equation环境进行排版。此时也可以使用\label和\ref命令实现交叉引用。
\subsection{不编号公式equation*环境}
交换律见式\ref{eq:commutative2}
\begin{equation*}
a+b=b+a \label{eq:commutative2}
\end{equation*}
- 注意此时交叉引用的编号为小结编号。
- 要注意的是,公示的编号与交叉引用也是自动实现的,大家在排版中,要习惯于采用自动化的方式处理诸如图、表、公式的编号与交叉引用。
- 在此,再添加一个行间公式,并使用\label和\ref命令实现交叉引用。
\begin{equation}
x^5 - 7x^3 + 4x = 0 \label{eq:pol}
\end{equation}
- 用注释的方式删除前一个行间公式,注意查看结果,再次取消这个行间公式的注释,再次查看结果,可以看到,LaTeX能够自动化的处理各种编号及交叉引用。
- 另外需要注意的是,带*的equation环境需要使用amsmath宏包。
本节代码:
% 导言区
\documentclass{article} % ctexbook, ctexrep
\usepackage{ctex}
\usepackage{amsmath}
% 正文区(文档区)
\begin{document}
\section{简介}
\LaTeX{}将排版内容分为文本模式和数学模式,文本模式用于普通文本排版,数学模式用于数学公式排版。
\section{行内公式}
\subsection{美元符号}
交换律是 $a+b=b+a$, 如 $1+2=2+1=3$。
\subsection{小括号}
交换律是 \(a+b=b+a\),如 \(1+2=2+1=3\)。
\subsection{math环境}
交换律是 \begin{math}
a+b=b+a
\end{math}
,如 \begin{math}
1+2=2+1=3
\end{math}。
\section{上下标}
\subsection{上标}
$3x^{20} - x + 2 = 0$
$3x^{3x^{20} - x + 2} - x + 2 = 0$
\subsection{下标}
$a_0, a_1, a_2$
$a_0, a_1, a_2, ..., a_{3x^{20} - x + 2}$
\section{希腊字母}
$\alpha$
$\beta$
$\gamma$
$\epsilon$
$\pi$
$\omega$
$\Gamma$
$\delta$
$\Theta$
$\Pi$
$\Omega$
$\alpha^3 + \beta^2 + \gamma = 0$
\section{数学函数}
$\log$
$\sin$
$\cos$
$\arcsin$
$\arccos$
$\ln$
$\sin^2 x + \cos^2 x = 1$
$y = \arcsin x$
$y = \sin^{-1} x$
$y = \log_2 x$
$y = \ln x$
$\sqrt{2}$
$\sqrt{x^2 + y^2}$
$\sqrt{2 + \sqrt{2}}$
$\sqrt[4]{x}$
\section{分式}
大约是原体积的$3/4$。
大约是原体积的$\frac{3}{4}$。
$\frac{x}{x^2 + x + 1}$
$\frac{\sqrt{x - 1}}{\sqrt{x + 1}}$
$\frac{1}{1 + \frac{1}{x}}$
$\sqrt{\frac{x}{x^2 + x + 1}}$
\section{行间公式}
\subsection{美元符号}
交换律是 $$a+b=b=a$$
如
$$1+2=2+1=3$$
\subsection{中括号}
交换律是
\[a+b=b+a\]
如
\[1+2=2+1=3\]
\subsection{displaymath环境}
交换律是
\begin{displaymath}
a+b=b+a,
\end{displaymath}
如
\begin{displaymath}
1+2=2+1=3.
\end{displaymath}
\subsection{自动编号公式equation环境}
交换律见式\ref{eq:commutative}
\begin{equation}
a+b=b+a \label{eq:commutative}
\end{equation}
\subsection{不编号公式equation*环境}
交换律见式\ref{eq:commutative2}
\begin{equation*}
a+b=b+a \label{eq:commutative2}
\end{equation*}
要注意的是,公示的编号与交叉引用也是自动实现的,
大家在排版中,要习惯于采用自动化的方式处理诸如图、
表、公式的编号与交叉引用。再如公式\ref{eq:pol}:
\begin{equation}
x^5 - 7x^3 + 4x = 0 \label{eq:pol}
\end{equation}
\end{document}
latex11-LaTeX数学模式中的矩阵
这一讲将讲解在LaTeX数学模式中如何排版矩阵的问题。
- 在LaTeX中,可以使用matrix环境实现矩阵的排版。
- 用于矩阵排版的matrix环境与用于表格排版的tabular环境使用方法非常类似。
- 编译并查看结果。
% 导言区
\documentclass{ctexart} % ctexbook, ctexrep
% \usepackage{ctex}
% 正文区(文档区)
\begin{document}
\[
\begin{matrix}
0 & 1 \\
1 & 0
\end{matrix}
\]
\end{document}
此时会出现无法识别matrix环境的错误,为此,我们需要用\usepackage命令引入amsmath宏包。再次编译,结果正确。
\usepackage{amsmath}
- 注意调整LaTeX的源代码格式,以便后期维护。
- 类似的,也可以使用其他的矩阵排版环境。
% 导言区
\documentclass{ctexart} % ctexbook, ctexrep
% \usepackage{ctex}
\usepackage{amsmath}
% 正文区(文档区)
\begin{document}
\[
% matrix环境
\begin{matrix}
0 & 1 \\
1 & 0
\end{matrix} \qquad
% pmatrix环境
\begin{pmatrix}
0 & -i \\
i & 0
\end{pmatrix} \qquad
% bmatrix环境
\begin{bmatrix}
0 & -1 \\
1 & 0
\end{bmatrix} \qquad
% Bmatrix环境
\begin{Bmatrix}
1 & 0 \\
0 & -1
\end{Bmatrix} \qquad
% vmatrix环境
\begin{vmatrix}
a & b \\
c & d
\end{vmatrix} \qquad
% Vmatrix
\begin{Vmatrix}
i & 0 \\
0 & -i
\end{Vmatrix}
\]
\end{document}
- matrix环境-无定界符;
- pmatrix环境-小括号;
- bmatrix环境-中括号;
- Bmatrix环境-大括号;
- vmatrix环境-单竖线;
- Vmatrix环境-双竖线。
- 与tabular环境类似,在matrix环境中,也是用&符号分割列,用\分割行;
- 在矩阵中,也可以使用下划线和帽子符号得到上下标,注意查看结果。
% 可以使用上下标
\[
A = \begin{pmatrix}
a_{11}^2 & a_{12}^2 & a_{13}^2 \\
0 & a_{22} & a_{23} \\
0 & 0 & a_{33}
\end{pmatrix}
\]
- 矩阵中经常使用的省略号:可以用\dots、\vdots、\ddots命令实现。注意查看结果
% 常用省略号:\dots、\vdots、\ddots
\[
A = \begin{bmatrix}
a_{11} & \dots & a_{1n} \\
& \ddots & \vdots \\
0 & & a_{nn}
\end{bmatrix}_{n \times n}
\]
- 在数学模式中,可以用\times命令来排版×号。
- 那么,能不能用一个类似的\adots命令来输入另一个方向上的省略号呢?
% 常用省略号:\dots、\vdots、\ddots、\adots
\[
A = \begin{bmatrix}
a_{11} & \dots & a_{1n} \\
\adots & \ddots & \vdots \\
0 & & a_{nn}
\end{bmatrix}_{n \times n}
\]
编译,结果显示没有\adots这样的命令。当然,可以用一个\newcommand命令来定义一个新的\adots命令,\adots命令执行括号中的操作。也就是用不同的方式排版三个英文句点符号,细节请查看相关资料。注意查看结果。
% 导言区
\documentclass{ctexart} % ctexbook, ctexrep
% \usepackage{ctex}
\usepackage{amsmath}
\newcommand{\adots}{\mathinner{\mkern2mu%
\raisebox{0.1em}{.}\mkern2mu\raisebox{0.4em}{.}%
\mkern2mu\raisebox{0.7em}{.}\mkern1mu}}
% 正文区(文档区)
\begin{document}
% 矩阵环境,用&分割列,用\\分割行
\[
% matrix环境
\begin{matrix}
0 & 1 \\
1 & 0
\end{matrix} \qquad
% pmatrix环境
\begin{pmatrix}
0 & -i \\
i & 0
\end{pmatrix} \qquad
% bmatrix环境
\begin{bmatrix}
0 & -1 \\
1 & 0
\end{bmatrix} \qquad
% Bmatrix环境
\begin{Bmatrix}
1 & 0 \\
0 & -1
\end{Bmatrix} \qquad
% vmatrix环境
\begin{vmatrix}
a & b \\
c & d
\end{vmatrix} \qquad
% Vmatrix
\begin{Vmatrix}
i & 0 \\
0 & -i
\end{Vmatrix}
\]
% 可以使用上下标
\[
A = \begin{pmatrix}
a_{11}^2 & a_{12}^2 & a_{13}^2 \\
0 & a_{22} & a_{23} \\
0 & 0 & a_{33}
\end{pmatrix}
\]
% 常用省略号:\dots、\vdots、\ddots、\adots
\[
A = \begin{bmatrix}
a_{11} & \dots & a_{1n} \\
\adots & \ddots & \vdots \\
0 & & a_{nn}
\end{bmatrix}_{n \times n}
\]
\end{document}
- 当然,利用矩阵环境的嵌套还可以实现分块矩阵的排版,也就是把一个矩阵作为另一个矩阵的一个元素进行处理。
- 此处的\text命令用于数学模式中临时切换到文本模式。
- 注意查看结果
% 分块矩阵(矩阵嵌套)
\[
\begin{pmatrix}
\begin{matrix} 1 & 0 \\ 0 & 1 \end{matrix}
& \text{\Large 0} \\
\text{\Large 0} & \begin{matrix}
1 & 0 \\ 0 & -1 \end{matrix}
\end{pmatrix}
\]
- 如果在数学模式中不使用\text命令,则结果是不一样的。
% 分块矩阵(矩阵嵌套)
\[
\begin{pmatrix}
\begin{matrix} 1 & 0 \\ 0 & 1 \end{matrix}
& \Large 0 \\
\Large 0 & \begin{matrix}
1 & 0 \\ 0 & -1 \end{matrix}
\end{pmatrix}
\]
- 利用matrix环境还可以排版三角矩阵;
% 三角矩阵
\[
\begin{pmatrix}
a_{11} & a_{12} & \cdots & a_{1n} \\
& a_{22} & \cdots & a_{2n} \\
& & \ddots & \vdots \\
\multicolumn{2}{c}{\raisebox{1.3ex}[0
pt]{\Huge 0}}
& & a_{nn}
\end{pmatrix}
\]
- \multicolumn命令合并多列,也可以用\raisebox命令来调整高度。
- 还可以使用\hdotsfor命令产生跨列省略号。
% 跨列的省略号:\hdotsfor{<列数>}
\[
\begin{pmatrix}
1 & \frac 12 & \dots & \frac 1n \\
\hdotsfor{4} \\
m & \frac m2 & \dots & \frac mn
\end{pmatrix}
\]
- 同时,还可以使用smallmatrix环境排版行内小矩阵,例如,将smallmatrix环境置于math环境中,此处的\left(命令用于生成矩阵的左括号。smallmatrix环境与matrix环境的使用方式完全相同,可以用&符号分割各列,用\命令实现换行,用\right)命令产生矩阵右括号。需要注意的是,right与left是成对出现,相互呼应的。
% 行内小矩阵(smallmatrix)环境
复数 $z = (x,y)$ 也可用矩阵
\begin{math}
\left( % 需要手动加上左括号
\begin{smallmatrix}
x & -y \\ y & x
\end{smallmatrix}
\right) % 需要手动加上右括号
\end{math}来表示。
- 也可以使用array环境排版矩阵,array环境与表格环境tabular一致,在必选参数中用r、l、c和竖线指定列位置格式,仍然使用&符号分割各列,用\命令换行,用\hline命令产生横线。
- 在本例中,需要注意分式排版命令\frac的特殊使用方式,也就是可以不使用分组命令排版分式。当然,也可以使用{}进行分组,以区分分子和分母。
- 注意,当不使用分组时,\frac命令只能区分单个字母。注意此处的c并不属于分式的一部分。
- 当然,如果\frac命令后面直接跟字母,会产生语法错误。在使用中,一定要注意这些细节。
% array环境(类似于表格环境tabular)
\[
\begin{array}{r|r}
\frac{1}{2} & 0 \\
\hline
0 & -\frac abc \\
\end{array}
\]
- 若需要多个字母构成分母,需要使用{}进行分组
% array环境(类似于表格环境tabular)
\[
\begin{array}{r|r}
\frac{1}{2} & 0 \\
\hline
0 & -\frac a{bc} \\
\end{array}
\]
- 利用array环境可以排版更为复杂的矩阵,先查看结果
% 用array环境构造复杂矩阵
\[
% @{<内容>}-添加任意内容,不占表项计数
% 此处添加一个负值空白,表示向左移-5pt的距离
\begin{array}{c@{\hspace{-5pt}}l}
% 第1行,第1列
\left(
\begin{array}{ccc|ccc}
a & \cdots & a & b & \cdots & b \\
& \ddots & \vdots & \vdots & \adots \\
& & a & b \\ \hline
& & & c & \cdots & c \\
& & & \vdots & & \vdots \\
\multicolumn{3}{c|}{\raisebox{2ex}[0pt]{\Huge
0}}
& c & \cdots & c
\end{array}
\right)
&
% 第1行,第2列
\begin{array}{l}
% \left.仅表示与\right\}配对,什么都不输出
\left.\rule{0mm}{7mm}\right\}p \\
\\
\left.\rule{0mm}{7mm}\right\}q
\end{array}
\\[-5pt]
% 第2行,第1列
\begin{array}{cc}
\underbrace{\rule{17mm}{0mm}}_m &
\underbrace{\rule{17mm}{0mm}}_m
\end{array}
& % 第2行,第2列
\end{array}
\]
- 该array环境用c指定第一列居中对齐,用l指定最后一列居左对齐;
- 利用@{\hspace{-5pt}}在两列之间插入一个-5磅的水平空白。注意,用@符号插入的内容不列入表列计数。
- 使用array环境的嵌套、省略号、以及\multicolumn命令产生需要的矩阵,注意用\left(命令和\right)命令产生矩阵两端的小括号定界符。
- 可以继续使用array环境产生右侧的大括号p标识符。注意,此处的\left.命令是为了实现与\right命令的配对,不输出任何内容。
- 可以通过再嵌套一个array环境,用于产生下方的横向大括号m标识符,可以使用\underbrace命令排版横向大括号,用\rule命令指定横向大括号的尺寸,以下标的方式指定m标识符。
本节代码:
% 导言区
\documentclass{ctexart} % ctexbook, ctexrep
% \usepackage{ctex}
\usepackage{amsmath}
\newcommand{\adots}{\mathinner{\mkern2mu%
\raisebox{0.1em}{.}\mkern2mu\raisebox{0.4em}{.}%
\mkern2mu\raisebox{0.7em}{.}\mkern1mu}}
% 正文区(文档区)
\begin{document}
% 矩阵环境,用&分割列,用\\分割行
\[
% matrix环境
\begin{matrix}
0 & 1 \\
1 & 0
\end{matrix} \qquad
% pmatrix环境
\begin{pmatrix}
0 & -i \\
i & 0
\end{pmatrix} \qquad
% bmatrix环境
\begin{bmatrix}
0 & -1 \\
1 & 0
\end{bmatrix} \qquad
% Bmatrix环境
\begin{Bmatrix}
1 & 0 \\
0 & -1
\end{Bmatrix} \qquad
% vmatrix环境
\begin{vmatrix}
a & b \\
c & d
\end{vmatrix} \qquad
% Vmatrix
\begin{Vmatrix}
i & 0 \\
0 & -i
\end{Vmatrix}
\]
% 可以使用上下标
\[
A = \begin{pmatrix}
a_{11}^2 & a_{12}^2 & a_{13}^2 \\
0 & a_{22} & a_{23} \\
0 & 0 & a_{33}
\end{pmatrix}
\]
% 常用省略号:\dots、\vdots、\ddots、\adots
\[
A = \begin{bmatrix}
a_{11} & \dots & a_{1n} \\
\adots & \ddots & \vdots \\
0 & & a_{nn}
\end{bmatrix}_{n \times n}
\]
% 分块矩阵(矩阵嵌套)
\[
\begin{pmatrix}
\begin{matrix} 1 & 0 \\ 0 & 1 \end{matrix}
& \Large 0 \\
\Large 0 & \begin{matrix}
1 & 0 \\ 0 & -1 \end{matrix}
\end{pmatrix}
\]
% 三角矩阵
\[
\begin{pmatrix}
a_{11} & a_{12} & \cdots & a_{1n} \\
& a_{22} & \cdots & a_{2n} \\
& & \ddots & \vdots \\
\multicolumn{2}{c}{\raisebox{1.3ex}[0
pt]{\Huge 0}}
& & a_{nn}
\end{pmatrix}
\]
% 跨列的省略号:\hdotsfor{<列数>}
\[
\begin{pmatrix}
1 & \frac 12 & \dots & \frac 1n \\
\hdotsfor{4} \\
m & \frac m2 & \dots & \frac mn
\end{pmatrix}
\]
% 行内小矩阵(smallmatrix)环境
复数 $z = (x,y)$ 也可用矩阵
\begin{math}
\left( % 需要手动加上左括号
\begin{smallmatrix}
x & -y \\ y & x
\end{smallmatrix}
\right) % 需要手动加上右括号
\end{math}来表示。
% array环境(类似于表格环境tabular)
\[
\begin{array}{r|r}
\frac{1}{2} & 0 \\
\hline
0 & -\frac a{bc} \\
\end{array}
\]
% 用array环境构造复杂矩阵
\[
% @{<内容>}-添加任意内容,不占表项计数
% 此处添加一个负值空白,表示向左移-5pt的距离
\begin{array}{c@{\hspace{-5pt}}l}
% 第1行,第1列
\left(
\begin{array}{ccc|ccc}
a & \cdots & a & b & \cdots & b \\
& \ddots & \vdots & \vdots & \adots \\
& & a & b \\ \hline
& & & c & \cdots & c \\
& & & \vdots & & \vdots \\
\multicolumn{3}{c|}{\raisebox{2ex}[0pt]{\Huge
0}}
& c & \cdots & c
\end{array}
\right)
&
% 第1行,第2列
\begin{array}{l}
% \left.仅表示与\right\}配对,什么都不输出
\left.\rule{0mm}{7mm}\right\}p \\
\\
\left.\rule{0mm}{7mm}\right\}q
\end{array}
\\[-5pt]
% 第2行,第1列
\begin{array}{cc}
\underbrace{\rule{17mm}{0mm}}_m &
\underbrace{\rule{17mm}{0mm}}_m
\end{array}
& % 第2行,第2列
\end{array}
\]
\end{document}
这一讲主要讨论了使用amsmath宏包中的matrix环境排版矩阵的基本方法,以及使用array环境排版复杂矩阵的方法。
latex12-LaTeX数学公式的多行公式
- 引入amsmath宏包、amssymb宏包。
- 可以使用gather环境实现多行公式的排版,在gather环境中可以使用\命令实现换行。
- 注意查看结果。
\begin{gather}
a + b = b + a \\
ab ba
\end{gather}
- 不但实现了公式的分行排版,并且对每一行公式都进行了编号。也可以使用带星号的gather*环境实现不带编号的多行公式的排版,注意,同样使用\命令实现换行。
- 注意查看结果。
% 不带编号
\begin{gather*}
3 + 5 = 5 + 3 = 8 \\
3 \times 5 = 5 \times 3
\end{gather*}
- 实现了多行公式的排版,但并没有对公式进行编号。
- 在gather环境中,也可以在\命令前使用\notag命令阻止编号。
% 在\\前使用\notag命令阻止编号
\begin{gather}
3^2 + 4^2 = 5^2 \notag \\
5^2 + 12^2 = 13^2 \notag \\
a^2 + b^2 = c^2
\end{gather}
- 可以看到,有\notag命令的公式并没有进行编号,而其他的公式进行了编号。
- 也可以使用align环境和align星环境在公式排版中按指定位置进行对齐。同样,align环境用于实现公式的编号,而align星环境对公式不进行编号。
- 对齐位置是由&符号指定的。
% aline和aline*环境(用&进行对齐)
% 带编号
\begin{align}
x &= t + \cos t + 1 \\
y &= 2\sin t
\end{align}
% 不带编号
\begin{align*}
x &= t & x &= \cos t & x &= t \\
y &= 2t & y &= \sin (t+1) & y &= \sin t
\end{align*}
- 例如,此处是按等号左端进行对齐,也可以指定任意位置,实现对齐,例如,可以按等号对齐、按部分公式的起始位置对齐。
- 也可以使用split环境,在equation环境中实现一个公式的多行排版,其对齐位置仍然由&符号指定。
% split环境(对齐采用align环境的方式,编号在中间)
\begin{equation}
\begin{split}
\cos 2x &= \cos^2 x - \sin^2 x \\
&= 2\cos^2 x - 1
\end{split}
\end{equation}
- 分行仍然用\命令实现,注意,由于这是由equation环境排版的一个公式,所以只有一个编号,并且在公式垂直方向居中排版。
% cases环境
% 每行公式中使用 & 分割为两部分,
% 通常表示值和后面的条件
\begin{equation}
D(x) = \begin{cases}
1, & \text{如果 } x \in \mathbb{Q}; \\
0, & \text{如果 } x \in \mathbb{R}\setminus\mathbb{Q}.
\end{cases}
\end{equation}
- 对于类似分段函数的公式排版,可以使用cases环境实现,在cases环境中使用&符号将一个公式分成两部分,并在此对齐,同样使用\命令实现换行。
- 注意,此时是按一个公式进行编号,此处的\in命令用于输出属于符号,\mathbb命令用于输出花体字符,注意,这需要amssymb宏包支持。
- 数学模式中的\text命令用于临时切换到文本模式,如果不使用\text命令,则在数学公式中无法实现中文排版,因此,需要\text命令,在数学模式中处理中文。
本节代码:
% 导言区
\documentclass{ctexart} % ctexbook, ctexrep
% \usepackage{ctex}
\usepackage{amsmath}
\usepackage{amssymb}
% 正文区(文档区)
\begin{document}
% gather和gather*环境(可以使用\\换行)
% 带编号
\begin{gather}
a + b = b + a \\
ab ba
\end{gather}
% 不带编号
\begin{gather*}
3 + 5 = 5 + 3 = 8 \\
3 \times 5 = 5 \times 3
\end{gather*}
% 在\\前使用\notag命令阻止编号
\begin{gather}
3^2 + 4^2 = 5^2 \notag \\
5^2 + 12^2 = 13^2 \notag \\
a^2 + b^2 = c^2
\end{gather}
% aline和aline*环境(用&进行对齐)
% 带编号
\begin{align}
x &= t + \cos t + 1 \\
y &= 2\sin t
\end{align}
% 不带编号
\begin{align*}
x &= t & x &= \cos t & x &= t \\
y &= 2t & y &= \sin (t+1) & y &= \sin t
\end{align*}
% split环境(对齐采用align环境的方式,编号在中间)
\begin{equation}
\begin{split}
\cos 2x &= \cos^2 x - \sin^2 x \\
&= 2\cos^2 x - 1
\end{split}
\end{equation}
% cases环境
% 每行公式中使用 & 分割为两部分,
% 通常表示值和后面的条件
\begin{equation}
D(x) = \begin{cases}
1, & \text{如果 } x \in \mathbb{Q}; \\
0, & \text{如果 } x \in \mathbb{R}\setminus\mathbb{Q}.
\end{cases}
\end{equation}
\end{document}
- 这一讲讨论了在LaTeX中使用多行公式的问题,要注意使用amsmath宏包和amssymb宏包;
- 可以使用gather环境和gather*环境分别排版编号公式和不编号公式;
- 也可以使用align环境和align*环境来设定公式中的对齐方式;
- 还可以使用split环境将一个公式分成多行排版;
- 也可以使用cases环境实现类似分段函数公式的排版;
- 还需要注意临时文本模式\text命令的使用,数学符号字体\mathbb命令的使用,数学运算符\in命令和\setminus命令的使用。
latex13-LaTeX中的参考文献BibTeX
这一讲,主要讨论在LaTeX中用BibTeX工具排版参考文献的问题。
- 对于简单的参考文献排版需求,也就是一次管理,一次使用的参考文献,可以使用thebibliography环境实现排版。在该环境中,使用\bibitem命令排版一个参考文献条目,每一条参考文献都可以按通用的LaTeX排版方式进行排版。\bibitem命令需要一个必选参数,指定该条参考文献的引用标志。编译,并查看结果。
\begin{thebibliography}{99}
\bibitem{article1}陈立耀,苏伟,蔡川,陈晓云.\emph{基于LaTex的Web数堂公式提取方法研究}[1]、让算机科学、2014(06)
\bibitem{book1}william H. Press,saul A.Teukolsky, william T. Metterling, Brian P. Elannery,\emph{Numerical Recipes 3rd Edition:The Art of Scientific Computing}Cambridge University Press,New York,2007.
\bibitem{latexGuide} Kopka Helmut,w. Daly Patrick,\emph{Guide to \LaTeX},$4^{th}$ Edition.Available at \texttt{http://www.amazon.com}.
\bibitem{latexMath} Graetzer George,lemph{Math Into \LaTeX},BirkhAuser Boston; 3 edition (une 22,2000).
\end{thebibliography}
- 可以使用\emph命令强调参考文献中的某些内容,也可以在参考文献排版中使用\texttt等命令。
- 使用\cite命令引用参考文献。在\cite命令的必选参数中,使用\bibitem命令的必选参数指定的引用标志引用该文献。
- 显然使用thebibliography环境来排版参考文献需要对每一条参考文献进行详细排版,并且不便于在其他文档中使用,更为合理的是将参考文献单独处理,实现一次管理,多次使用。
- 在LaTeX中,可以使用BibTeX工具实现这一需求。
- 在TeXstudio中,需要将构建操作的默认文献工具原命令设置为BibTeX。当然,也可以对BibTeX原命令进行更为详细的设置。(注:视频中是用TeXstudio为例进行讲解的,所以需要进行设置,VSCode中没有这些设置)
- 完成TeXstudio的配置后,创建一个新文件,在该文件中编写参考文献的详细信息,例如用@BOOK指定这是一本书籍参考文献,大括号{}中的第一个参数是引用标志,其他诸如title、publisher、year…使用key-value的形式指定该参考文献的其他详细信息,每一个字段用逗号实现分割,用{}限定每一个字段的取值,在各自段的取值中也可以使用\LaTeX命令。每一个参考文献使用一对大括号{}实现分组,然后将该文献保存为以.bib后缀名结尾的参考文献数据库文件。
- 在导言区使用\bibliographystyle命令指定参考文献的排版样式,在正文区需要输出参考文献的地方使用\bibliography命令指定参考文献数据库,可以不指定扩展名,查看结果。
% 导言区
\documentclass{ctexart}
\usepackage{ctex}
% \usepackage{cite}
% 指定参考文献的排版样式:plain,unsrt,alpha,abbrv
\bibliographystyle{plain}
% 正文区(文档区)
\begin{document}
% 把bib的Id作为key传给\cite{}
这是一个参考文献的引用:\cite{mittelbach2004}
% 引入bib文件,如果有多个bib文件,使用逗号隔开
\bibliography{test}
\end{document}
-
注意,此时首先用xelatex执行了两次编译,编译后,会生成一个后缀名为aux的辅助文件,bibtex工具会编译这一辅助文件,此时会根据指定的plain.bst样式文件,通过\cite命令中的引用标志,在bib参考文献数据库中提取指定的参考文献,并对提取的参考文献按bst样式文件中指定的格式进行排版,生成另一个bbl辅助文件,再次使用xelatex命令编译两次。(注意:在使用TeXstudio进行编译时,会显示以上标准顺序,但是对于VSCode,由于latex workshop插件,使得这里稍有不同,请查看VSCode+latex引用bibtex参考文献和VS Code中引用参考文献(bibtex)
-
添加\cite引用命令,使用bib数据库文件中参考文献条目的引用标志作为\cite命令的参数,编译并查看结果。
-
当然,手动维护参考文献数据库是非常繁琐的,并且是极易出错的,可以使用google scholar的相应功能来实现文献数据库的管理和维护。
-
大家注意,在google scholar的搜索结果中,有一个引用链接,点击打开,注意在下方有一个BibTeX链接,点击打开,可以得到该文献BibTeX格式的数据,可以直接将该数据粘贴拷贝到参考文献数据库中。
-
当然,在\cite命令中,可以通过该引用标志引用这一个文献,注意查看结果。
% 把bib的Id作为key传给\cite{}
这是一个参考文献的引用:\cite{mittelbach2004}
这是另一个引用:\cite{patashnik1984bibtex}
% 引入bib文件,如果有多个bib文件,使用逗号隔开
\bibliography{test}
- 同样,也可以从知网检索中导入数据,为此,需要使用安装有zotero的firefox浏览器。因为我主要使用Citavi文献管理工具,因此,该部分不做记录。
- 注意,不同数据库之间用逗号分隔。
- 注意,在参考文献列表中,并没有出现未引用的参考文献。如果需要在参考文献列表中排版未引用的参考文献,需要使用\nocite命令,此处的*参数用于指定排版所有参考文献。当然,在\nocite命令中,也可以用引用标志排版特定的参考文献。清理编译过程文件,查看结果。
% 导言区
\documentclass{ctexart}
\usepackage{ctex}
\usepackage{cite}
% 指定参考文献的排版样式:plain,unsrt,alpha,abbrv
\bibliographystyle{plain}
% 正文区(文档区)
\begin{document}
% \cite括号内为引用文献的变量名,\cite前要有一个空格
% 在正文中引用,如果不引用则在参考文献部分中不显示该文献
这是一个参考文献的引用:\cite{mittelbach2004}
这是另一个引用:\cite{patashnik1984bibtex}
还有一个:\cite{patashnik1988designing}
\nocite{*}
% 引入bib文件,如果有多个bib文件,使用逗号隔开
\bibliography{test}
\end{document}
- 也可以将所有参考文献数据放置在同一个参考文献数据库文件中进行管理。注意,此时只使用了test参考文献数据库文件,编译并查看结果。
- 也可以使用不同的参考文献排版样式,清理编译过程文件,注意引用格式的变化和列表格式的变化。
% 导言区
\documentclass{ctexart}
\usepackage{ctex}
\usepackage{cite}
% 指定参考文献的排版样式:plain,unsrt,alpha,abbrv
\bibliographystyle{alpha}
% 正文区(文档区)
\begin{document}
% \cite括号内为引用文献的变量名,\cite前要有一个空格
% 在正文中引用,如果不引用则在参考文献部分中不显示该文献
这是一个参考文献的引用:\cite{mittelbach2004}
这是另一个引用:\cite{patashnik1984bibtex}
还有一个:\cite{patashnik1988designing}
\nocite{*}
% 引入bib文件,如果有多个bib文件,使用逗号隔开
\bibliography{test}
\end{document}
- 可以使用natbib宏包使用更多的样式,清理编译过程文件,注意查看并分析结果的异同。
% 导言区
\documentclass{ctexart}
% \usepackage{ctex}
\usepackage{cite}
\usepackage{natbib}
% 指定参考文献的排版样式:plain,unsrt,alpha,abbrv
\bibliographystyle{plainnat}
% 正文区(文档区)
\begin{document}
% \cite括号内为引用文献的变量名,\cite前要有一个空格
% 在正文中引用,如果不引用则在参考文献部分中不显示该文献
这是一个参考文献的引用:\cite{mittelbach2004}
这是另一个引用:\cite{patashnik1984bibtex}
还有一个:\cite{patashnik1988designing}
\nocite{*}
% 引入bib文件,如果有多个bib文件,使用逗号隔开
\bibliography{test}
\end{document}
- 还可以通过对natbib宏包指定不同的参数来设定不同的排版格式,排版结果变成了圆括号。
\usepackage[round]{natbib}
- natbib宏包还提供了\citet和\citep命令,用于实现不同的引用格式。
这是一个参考文献的引用:\citet{mittelbach2004}
这是另一个引用:\citep{patashnik1984bibtex}
- natbib宏包还提供了更多的排版格式,更多细节,请查阅其宏包使用说明。
- 若需要定制更多的参考文献排版格式,则需要根据需要编写相应的bst样式文件,但由于bst样式文件使用了较为复杂的后缀式栈语言,其理解和使用都较为复杂,建议大家直接使用清华、北大、IEEE等机构提供的样式文件。在使用中,可以根据需要对其进行适当的修改。
- 另外对于参考文献数据库文件,还可以使用类似JabRef这样的软件进行可视化管理。
- 这一讲主要讨论了如何使用BibTeX工具来排版参考文献的问题,以及构建参考文献数据库常用的方法,本次讲解就到这里,谢谢大家。
本节代码:
% 导言区
\documentclass{ctexart}
% \usepackage{ctex}
\usepackage{cite}
\usepackage[round]{natbib}
% 指定参考文献的排版样式:plain,unsrt,alpha,abbrv
\bibliographystyle{plainnat}
% 正文区(文档区)
\begin{document}
% \cite括号内为引用文献的变量名,\cite前要有一个空格
% 在正文中引用,如果不引用则在参考文献部分中不显示该文献
这是一个参考文献的引用:\citet{mittelbach2004}
这是另一个引用:\citep{patashnik1984bibtex}
还有一个:\cite{patashnik1988designing}
\nocite{*}
% 引入bib文件,如果有多个bib文件,使用逗号隔开
\bibliography{test}
\end{document}
latex14-LaTeX中的参考文献BibLaTeX
- 这一讲,主要讲解使用BibLaTeX工具在LaTeX中排版参考文献的方法,其基本思想仍然是一次管理,多次使用。
- biblatex宏包和biber工具是一种新的参考文献排版引擎,其样式文件编写比较简单,有参考文献样式文件–bbx文件,引用样式文件–cbx文件,这些文件都是用LATEX代码编写的,编写和维护相对比较简单。
- biber工具还支持本地化排序排版,例如,可以用参数指定按拼音排序,也可以用参数指定按笔画排序。为了能够在TeXstudio中使用biber排序引擎,需要对TeXstudio进行相应的设置,需要将构建操作中的默认文献工具元命令设置为Biber(注意:对应的,这里在VSCode中需要在Buid LaTeX project中选择Recipe:Windows xe->bib->xe->xe复杂编译这个选项,我在这里也是搞了一下午,B站一个视频点醒了我)。准备参考文献数据库文件bib文件,参考文献数据库文件包含了参考文献的基本信息。
- 用\usepackage命令引入biblatex宏包,并指定必要的参数,例如,指定样式为numeric,后端程序为biber。
- 在导言区,使用\addbibresource命令添加参考文献数据库,注意,不可以省略文献后缀名.bib。
- 在正文区,使用相应的\cite命令既可以实现无格式化引用、带方括号引用和上标引用等不同方式的参考文献的引用。
- 在需要的地方,使用\printbibliography命令输出参考文献列表,编译运行,注意查看编译过程。
% 导言区
\documentclass{ctexart} % ctexbook, ctexrep
% \usepackage{ctex}
% biblatex/biber
% 新的TEX参考文献排版引擎
% 样式文件(参考文献样式文件--bbx文件,引用样式文件--cbx文件)使用LATEX编写
% 支持根据本地化排版,如:
% biber -l zh__pinyin texfile,用于指定按拼音排序
% biber -l zh__stroke texfile,用于按笔画排序
% 引入biber宏包
\usepackage[style=numeric,backend=biber]{biblatex}
\addbibresource{test.bib}
% 正文区(文档区)
\begin{document}
% 一次管理,多次使用
无格式化引用\cite{papageorgiou2000trainable}
带方括号引用\parencite{papageorgiou1998general}
上标引用\supercite{viola2001robust}
\printbibliography
\end{document}
- 首先是xelatex的编译,生成aux辅助文件,然后使用bib后端程序对该辅助文件进行编译,生成bbl文件,最后,再一次用xelatex进行编译,注意,编译结果中的参考文献标题是英文References,这可以在\printbibliography命令的参数中使用title参数进行修改。例如,修改为中文参考文献。
\printbibliography[title = {参考文献}]
-
可以在当前工作目录中看到aux、bbl等辅助文件。
-
也可以使用\nocite命令列出没有引用的参考文献,参数星号表示未引用的所有文献;也可以用引用标志列出指定的未引用文献。
-
由于需要重新编译参考文献数据库,因此需要先清理上一次编译生成的辅助文件,注意结果的变化。
\nocite{*}
-
若需要更多的样式,需要编写相应的样式文件。
-
在此介绍一个由CasperVector编写的符合国标7714标准的样式文件,网址。
-
打开其主页,下载样式文件压缩包,保存在指定路径,解压该样式文件包,找到参考文献样式文件bbx文件和引用样式文件cbx文件,将这些文件拷贝到当前工作目录。
-
可以在Texstudio(VSCode)中打开这些bbx和cbx样式文件,进行查看和编辑与修改。
-
然后在导言区将biblatex宏包的style参数修改为caspervector,并指定编码格式为utf8格式,编译并注意查看结果。
\usepackage[style=caspervector,backend=biber,utf8]{biblatex}
- 要注意的是,结果中的中英文文献是一起混排的。为解决这一问题,需要对biber工具指定排序参数。为此,需要对Texstudio进行相关的设置。在元命令设置中,找到biber命令,为该biber命令添加相应的参数。编译并查看结果
- 注意,结果并没有发生变化。为能够正确实现参考文献的排序,需要为biblatex宏包指定sorting参数。在此,指定排序方式为cenyt,其中,c表示中文,e表示英文,n表示作者姓名,t表示文献标题,y表示出版年份,也就是按language字段,先中文,后英文,并根据姓名,标题和出版年字段进行排序。
\usepackage[style=caspervector,backend=biber,utf8,sorting=cenyt]{biblatex}
- 也可以按language字段先英文、后中文进行排序,注意查看结果
\usepackage[style=caspervector,backend=biber,utf8,sorting=ecnyt]{biblatex}
- 注:VSCode中不需要要上面提到的相关设置,只需要指定sorting参数即可。另外,新版的先中文后英文是cenyt,不是旧版的centy;同样,新版的先英文后中文是ecnyt,不是旧版的ecnty。我在这里遇到了问题,看到这个回答才得以解决。
- 我因为参考文献中没有中文文献,可能对比不是特别明显,但是应该没有错误。
- 此处需要两次编译,以产生正确的索引编号。注意排版结果中排序的方式。
- 有关caspervector样式的详细说明,请使用texdoc命令查阅其使用手册。
- 除了可以在Texstudio中使用biblatex和biber引擎外,还可以使用bat批处理文件执行对应的编译操作。打开当前工作路径,确保存在latex源文件、参考文献数据库文件和参考文献样式文件,右键单击,新建一个文本文件,将其后缀名改为bat,表示是一个批处理文件,编辑该文件,添加如下内容:
xelatex latexRefBibLaTeX
biber -l zh_pinyin latexRefBibLaTeX
xelatex latexRefBibLaTeX
xelatex latexRefBibLaTeX
del *.aux *.bbl *.bcf *.blg *.log *.xml
- 首先使用xelatex进行编译,生成aux辅助文件,然后使用biber引擎,携带拼音排序参数,对aux辅助文件进行编译,生成bbl辅助文件,再使用xelatex编译两次,生成最终结果,最后使用del命令删除不需要的文件。
- 注意:bat文件的创建要以管理员身份运行记事本的方式来创建。
- 执行该批处理文件,可以查看其执行过程,直至结束。打开生成的pdf文件,查看最终的排版结果。
- 当编译过程比较复杂时,可以考虑采用类似的bat文件进行编译。
- 另外,也可以使用google schalar、Firefox浏览器+zotero扩展,使用知网、JabRef可视化软件等工具实现参考文献数据库、bib文件的编写和管理。
这一讲,主要讲解了如何使用biblatex宏包和biber引擎排版参考文献的方法,并简单说明了caspervector样式文件的使用方法,同时还讨论了如何使用bat批处理文件处理编译复杂文档的方法,这一讲就讲到这里,谢谢大家。
本节代码:
% 导言区
\documentclass{ctexart} % ctexbook, ctexrep
% \usepackage{ctex}
% biblatex/biber
% 新的TEX参考文献排版引擎
% 样式文件(参考文献样式文件--bbx文件,引用样式文件--cbx文件)使用LATEX编写
% 支持根据本地化排版,如:
% biber -l zh__pinyin texfile,用于指定按拼音排序
% biber -l zh__stroke texfile,用于按笔画排序
% 引入biber宏包
\usepackage[style=caspervector,backend=biber,utf8,sorting=ecnyt]{biblatex}
\addbibresource{test.bib}
% 正文区(文档区)
\begin{document}
% 一次管理,多次使用
无格式化引用\cite{papageorgiou2000trainable}
带方括号引用\parencite{papageorgiou1998general}
上标引用\supercite{viola2001robust}
\nocite{*}
\printbibliography[title = {参考文献}]
\end{document}
latex15-LaTeX中的自定义命令和环境
- 这一讲,主要讨论LaTeX中命令和环境的定义与重定义的方法。
- 一般都在导言区进行命令的定义和重定义。\newcommand用于定义一个命令,需要指定新定义的命令名称、参数个数、默认参数值以及具体的定义。例如,定义一个不带参数的PRC命令,该命令的具体定义是:People’s Republic of \emph{China},并对China执行\emph强调命令,这实际上是一个简单的字符串替换。然后,就可以在正文区使用这一个\PRC命令。编译,并查看结果
\newcommand{\PRC}{People's Republic of \emph{China}}
- 显然,只需要修改\PRC命令的定义就可以修改排版结果。而在正文区只需要使用\PRC命令,并不需要做出任何修改,这就是LaTeX排版中内容与格式分离的基本思想。
- 也可以为用\newcommand定义的新命令指定参数,参数个数最多是9个,可以用1到9来表示,可以用诸如#1,#2,…,#9这样的方式使用各参数。例如,#1表示第一个参数,#2表示第二个参数。在正文区,使用定义的新命令,注意查看结果
% 导言区
\documentclass{ctexart} % ctexbook, ctexrep
% \newcommand-定义命令
% 命令只能由字母组成,不能以\end开头
% \newcommand<命令>[<参数个数>][<首参数默认值>]{<具体定义>}
% \newcommand可以是简单字符串替换,例如:
% 使用\PRC 相当于 Peaple's Republic of \emph{China} 这一串内容
\newcommand{\PRC}{People's Republic of \emph{China}}
% \newcommand也可以使用参数
% 参数个数可以从 1 到9,使用时用 #1,#2,...,#9 表示
\newcommand{\loves}[2]{#1 喜欢 #2}
\newcommand{\hatedby}[2]{#2 不受 #1 喜欢}
% 正文区
\begin{document}
\PRC
\loves{猫}{鱼}
\hatedby{猫儿}{萝卜}
\end{document}
- 如果定义的命令需要参数,则在使用该命令时需要为其提供必要的参数,例如,\loves命令中,猫儿对应#1参数,鱼对应于#2参数,在\hatedby命令中,猫儿对应#1参数,萝卜对应#2参数。
- 还可以为\newcommand命令定义的命令指定默认值,注意,只能为第一个参数指定默认值,此时,第一个参数成为该命令的可选参数。在使用该命令时,如果需要为第一个参数提供实际参数,则该参数需要用方括号指定。例如,定义一个新命令\love,他有三个参数,第一个参数默认值是喜欢,接下来,是该命令的具体定义。
- 可以使用不同的方式使用该命令,注意查看结果
% 导言区
\documentclass{ctexart} % ctexbook, ctexrep
% \newcommand-定义命令
% 命令只能由字母组成,不能以\end开头
% \newcommand<命令>[<参数个数>][<首参数默认值>]{<具体定义>}
% \newcommand可以是简单字符串替换,例如:
% 使用\PRC 相当于 Peaple's Republic of \emph{China} 这一串内容
\newcommand{\PRC}{People's Republic of \emph{China}}
% \newcommand也可以使用参数
% 参数个数可以从 1 到9,使用时用 #1,#2,...,#9 表示
\newcommand{\loves}[2]{#1 喜欢 #2}
\newcommand{\hatedby}[2]{#2 不受 #1 喜欢}
% \newcommand的参数也可以有默认值
% 指定参数个数的同时指定了首个参数的默认值,那么这个命令的
% 第一个参数就成为可选的参数(要使用中括号指定)
\newcommand{\love}[3][喜欢]{#2#1#3}
% 正文区
\begin{document}
\PRC
\loves{猫}{鱼}
\hatedby{猫儿}{萝卜}
\love{猫儿}{鱼}
\love[最爱]{猫儿}{鱼}
\end{document}
- 在\love的第一种使用方式中,只提供了两个参数,此处的猫儿对应#2参数,鱼对应于#3参数,而#1参数取默认值喜欢。在第二个\love命令中,猫儿对应于#2参数,方括号指定地可选参数最爱对应于#1参数,从而取代了该参数的默认值喜欢,鱼对应于#3参数。
- 也可以使用\renewcommand重新定义已有的命令。\renewcommand命令与\newcommand命令的用法完全一致,唯一的区别是\renewcommand只能作用于已有的命令,例如,可以将\abstractname重新定义为内容简介,该命令会被abstract环境自动使用。
% 导言区
\documentclass{ctexart} % ctexbook, ctexrep
% \newcommand-定义命令
% 命令只能由字母组成,不能以\end开头
% \newcommand<命令>[<参数个数>][<首参数默认值>]{<具体定义>}
% \newcommand可以是简单字符串替换,例如:
% 使用\PRC 相当于 Peaple's Republic of \emph{China} 这一串内容
\newcommand{\PRC}{People's Republic of \emph{China}}
% \newcommand也可以使用参数
% 参数个数可以从 1 到9,使用时用 #1,#2,...,#9 表示
\newcommand{\loves}[2]{#1 喜欢 #2}
\newcommand{\hatedby}[2]{#2 不受 #1 喜欢}
% \newcommand的参数也可以有默认值
% 指定参数个数的同时指定了首个参数的默认值,那么这个命令的
% 第一个参数就成为可选的参数(要使用中括号指定)
\newcommand{\love}[3][喜欢]{#2#1#3}
% \renewcommand-重定义命令
% 与\newcommand 命令作用和用法相同,但只能用于已有命令
% \renewcommand<命令>[<参数个数>][<首参数默认值>]{<具体定义>}
\renewcommand{\abstractname}{内容简介}
% 正文区
\begin{document}
\begin{abstract}
这是一段摘要\dots
\end{abstract}
\PRC
\loves{猫}{鱼}
\hatedby{猫儿}{萝卜}
\love{猫儿}{鱼}
\love[最爱]{猫儿}{鱼}
\end{document}
- 注意,其标题为重新定义的\abstractname命令的内容。再次更改,注意查看结果
\renewcommand{\abstractname}{简介}
- 也可以使用\newenviroment和\renewenviroment定义新环境和重定义已有的环境,其语法与command类命令类似,需要指定环境名称、参数个数、首参数默认值、环境前定义和环境后定义。例如,定义一个新的摘要环境myabstract,它有一个可选参数,其默认值为摘要。
- 在环境前定义中,用\small命令设定环境中内容的字号,并指定#1参数的排版方式,同时,用\begin命令开始quotation环境,在环境后定义中,用\end命令结束quotation环境。
- 注意,在环境前定义和环境后定义两端使用大括号。用\begin和\end命令使用自定义的myabstract环境。注意查看结果
% 导言区
\documentclass{ctexart} % ctexbook, ctexrep
% \newcommand-定义命令
% 命令只能由字母组成,不能以\end开头
% \newcommand<命令>[<参数个数>][<首参数默认值>]{<具体定义>}
% \newcommand可以是简单字符串替换,例如:
% 使用\PRC 相当于 Peaple's Republic of \emph{China} 这一串内容
\newcommand{\PRC}{People's Republic of \emph{China}}
% \newcommand也可以使用参数
% 参数个数可以从 1 到9,使用时用 #1,#2,...,#9 表示
\newcommand{\loves}[2]{#1 喜欢 #2}
\newcommand{\hatedby}[2]{#2 不受 #1 喜欢}
% \newcommand的参数也可以有默认值
% 指定参数个数的同时指定了首个参数的默认值,那么这个命令的
% 第一个参数就成为可选的参数(要使用中括号指定)
\newcommand{\love}[3][喜欢]{#2#1#3}
% \renewcommand-重定义命令
% 与\newcommand 命令作用和用法相同,但只能用于已有命令
% \renewcommand<命令>[<参数个数>][<首参数默认值>]{<具体定义>}
\renewcommand{\abstractname}{简介}
% 定义和重定义环境
% \newenvironment{<环境名称>}[<参数个数>]{<首参数默认值>}
% {<环境前定义>}
% {<环境后定义>}
% \renewenvironment{<环境名称>}[<参数个数>][<首参数默认值>]
% {<环境前定义>}
% {<环境后定义>}
% 为 book 文档类中定义摘要(abstract)环境
\newenvironment{myabstract}[1][摘要]%
{\small
\begin{center}\bfseries #1\end{center}%
\begin{quotation}}%
{\end{quotation}}
% 正文区
\begin{document}
\begin{myabstract}
这是一段自定义格式的摘要\dots
\end{myabstract}
\begin{abstract}
这是一段摘要\dots
\end{abstract}
\PRC
\loves{猫}{鱼}
\hatedby{猫儿}{萝卜}
\love{猫儿}{鱼}
\love[最爱]{猫儿}{鱼}
\end{document}
- 也可以为myabstract环境指定可选参数,注意查看结果
\begin{myabstract}[我的摘要]
这是一段自定义格式的摘要\dots
\end{myabstract}
- 在此,我的摘要对应于#1参数,并取代了第一个参数的默认值-摘要。
- 当然,也可以将\newcommand和\newenvironment进行嵌套使用。例如,可以在\newenvironment的环境前定义中,用\newcommand定义一个使用\newenvironment参数的命令,并将该新命令应用于环境后定义中,以解决环境后定义中无法使用参数的问题。
- 此处,环境前定义中的\quotesource命令使用了新环境quotation的#1参数,并在环境后定义中使用了该新命令。
- 用\begin和\end命令使用新定义的环境。编译并查看结果
% 导言区
\documentclass{ctexart} % ctexbook, ctexrep
% \newcommand-定义命令
% 命令只能由字母组成,不能以\end开头
% \newcommand<命令>[<参数个数>][<首参数默认值>]{<具体定义>}
% \newcommand可以是简单字符串替换,例如:
% 使用\PRC 相当于 Peaple's Republic of \emph{China} 这一串内容
\newcommand{\PRC}{People's Republic of \emph{China}}
% \newcommand也可以使用参数
% 参数个数可以从 1 到9,使用时用 #1,#2,...,#9 表示
\newcommand{\loves}[2]{#1 喜欢 #2}
\newcommand{\hatedby}[2]{#2 不受 #1 喜欢}
% \newcommand的参数也可以有默认值
% 指定参数个数的同时指定了首个参数的默认值,那么这个命令的
% 第一个参数就成为可选的参数(要使用中括号指定)
\newcommand{\love}[3][喜欢]{#2#1#3}
% \renewcommand-重定义命令
% 与\newcommand 命令作用和用法相同,但只能用于已有命令
% \renewcommand<命令>[<参数个数>][<首参数默认值>]{<具体定义>}
\renewcommand{\abstractname}{简介}
% 定义和重定义环境
% \newenvironment{<环境名称>}[<参数个数>]{<首参数默认值>}
% {<环境前定义>}
% {<环境后定义>}
% \renewenvironment{<环境名称>}[<参数个数>][<首参数默认值>]
% {<环境前定义>}
% {<环境后定义>}
% 为 book 文档类中定义摘要(abstract)环境
\newenvironment{myabstract}[1][摘要]%
{\small
\begin{center}\bfseries #1\end{center}%
\begin{quotation}}%
{\end{quotation}}
% 环境参数只有<环境前定义>中可以使用参数,
% <环境后定义>中不能再使用环境参数。
% 如果需要,可以先把前面得到的参数保存在一个命令中,在后面使用:
\newenvironment{Quotation}[1]%
{\newcommand{\quotesource}{#1}%
\begin{quotation}}%
{\par\hfill---《textit{\quotesource}》%
\end{quotation}}
% 正文区
\begin{document}
\begin{myabstract}[我的摘要]
这是一段自定义格式的摘要\dots
\end{myabstract}
\begin{Quotation}{易$\cdot$乾}
初九,潜龙勿用
\end{Quotation}
\begin{abstract}
这是一段摘要\dots
\end{abstract}
\PRC
\loves{猫}{鱼}
\hatedby{猫儿}{萝卜}
\love{猫儿}{鱼}
\love[最爱]{猫儿}{鱼}
\end{document}
- 注意,新环境Quotation的必选参数易乾对应于#1参数,并传递到\quotesource命令中,而且,在环境后定义中使用了该\quotesource命令。
- 这一讲,主要讨论了命令与环境的定义与重定义。使用命令和环境的定义和重定义,达到内容与格式分离的目标,这是LaTeX排版中的一个重要理念。在LaTeX排版中,一定要避免直接在正文中使用原始的和基础的排版命令。当然,还可以定义和重定义带星号的短命令与环境,以禁止在命令或环境中使用段落,其详情请大家查阅相关资料。这一讲就讲到这里,谢谢大家。
本节代码:
% 导言区
\documentclass{ctexart} % ctexbook, ctexrep
% \newcommand-定义命令
% 命令只能由字母组成,不能以\end开头
% \newcommand<命令>[<参数个数>][<首参数默认值>]{<具体定义>}
% \newcommand可以是简单字符串替换,例如:
% 使用\PRC 相当于 Peaple's Republic of \emph{China} 这一串内容
\newcommand{\PRC}{People's Republic of \emph{China}}
% \newcommand也可以使用参数
% 参数个数可以从 1 到9,使用时用 #1,#2,...,#9 表示
\newcommand{\loves}[2]{#1 喜欢 #2}
\newcommand{\hatedby}[2]{#2 不受 #1 喜欢}
% \newcommand的参数也可以有默认值
% 指定参数个数的同时指定了首个参数的默认值,那么这个命令的
% 第一个参数就成为可选的参数(要使用中括号指定)
\newcommand{\love}[3][喜欢]{#2#1#3}
% \renewcommand-重定义命令
% 与\newcommand 命令作用和用法相同,但只能用于已有命令
% \renewcommand<命令>[<参数个数>][<首参数默认值>]{<具体定义>}
\renewcommand{\abstractname}{简介}
% 定义和重定义环境
% \newenvironment{<环境名称>}[<参数个数>]{<首参数默认值>}
% {<环境前定义>}
% {<环境后定义>}
% \renewenvironment{<环境名称>}[<参数个数>][<首参数默认值>]
% {<环境前定义>}
% {<环境后定义>}
% 为 book 文档类中定义摘要(abstract)环境
\newenvironment{myabstract}[1][摘要]%
{\small
\begin{center}\bfseries #1\end{center}%
\begin{quotation}}%
{\end{quotation}}
% 环境参数只有<环境前定义>中可以使用参数,
% <环境后定义>中不能再使用环境参数。
% 如果需要,可以先把前面得到的参数保存在一个命令中,在后面使用:
\newenvironment{Quotation}[1]%
{\newcommand{\quotesource}{#1}%
\begin{quotation}}%
{\par\hfill---《\textit{\quotesource}》%
\end{quotation}}
% 正文区
\begin{document}
\begin{myabstract}[我的摘要]
这是一段自定义格式的摘要\dots
\end{myabstract}
\begin{Quotation}{易$\cdot$乾}
初九,潜龙勿用
\end{Quotation}
\begin{abstract}
这是一段摘要\dots
\end{abstract}
\PRC
\loves{猫}{鱼}
\hatedby{猫儿}{萝卜}
\love{猫儿}{鱼}
\love[最爱]{猫儿}{鱼}
\end{document}