LaTeX中的文本 正文输入 语言问题(转贴)
原文:https://www.cnblogs.com/han-son-xiong/p/17817022.html
一般的情况下LaTeX只支持英语,其他的语言都需要相应的包来支持,比如中文需要CTeX宏包。由于我们目前处在中文环境之下所以不需要考虑一些小语种的问题。
在第一篇LaTeX文档当中我们已经采用了ctex宏包:
| \usepackage{ctex} |
在Overleaf里面可以直接采用这种方式,但是在TeXLive当中可能还是会出现中文不出现的情况,这个时候需要将编码改为UTF-8编码(如果本来不是的话)。
字母
有的时候我们可能需要在字母上输出重音(比如汉语的四声)。我们可以采用重音命令。

还可能有一些特殊字符:

一些字体如Computer Modern等会在ff,fi等等情况下出现连字(连笔),如果不想要的话可以采用空的分组或者\/命令。
| stuf{}f | |
| stuf\/f |
标点
以下的标点可以直接使用:
| , . ; : ! ? ‘ ’ ( ) [ ] - / * @ |
分隔句子的标点之后注意加上空格以保持美观的距离。
注意引号的特殊性,双引号实际上是两个单引号:
| ‘‘ ’’ |
如果遇到单引号和双引号连续出现:
| ‘‘\,‘ |
其中的\,产生很小的空格间距。
-号也有重复使用的用途:
| % 一个是连字符,两个字符表示数字范围,三个即破折号 | |
| passer-by | |
| 1--2 | |
| dash---like this |
~也可以用来表示数字范围,但是直接打上去不能识别,需要在数学模式下用:$\sim$。
省略号使用命令更佳:
| % 在底部的省略号 | |
| \ldots |
以下标点符号不能直接使用,使用的时候需要使用\转义。
| # $ % & { } _ \ |
其中的\需要使用\textbackslash来输出。
空格和换行
空格起到分隔作用,注意LaTeX当中空格的几个特性:
- 任意多个和单个功能相同。
- 每行最前面的空格将被忽略。
- 单个换行也视为一个空格(这说明输出换行的文本需要两次换行,在代码里面留出一个空行)。
下面的空格从窄到宽:
| \! \, \; \ \quad \qquad |
当然如果你不想记住这么多,可以试试幻影空格,它将产生与参数内容一样大小的空格:
| \phantom{你好} |
上面的代码将产生长度与你好相等的空格。
有的时候我们不想在一些比较重要的地方断行,我们可以使用~来防止分行:
| Mr.~Knuth |
这样Mr和Knuth之间就不会断行。
为了保持英文排版的美观,请务必在逗号,句号,分号后边加空格!
空行,即两个换行可以用来分段,而且固定产生缩进。我们也可以用\par命令来产生分段,但是这个命令连续使用也只产生一次分段。
如何强制另起一行并且不缩进?我们可以直接\\来分行,这样在后面的内容就直接另起一行,\linebreak也有同样的效果,但是前一行会散开对齐。
特殊符号

其实输入特殊符号最快的方式是:如果这个符号可以用UTF-8编码下直接输入,那么直接输入就好。
或者直接输入unicode码表。
| \symbol{28450} |
字体
直接输入命令即可输出对应的字体。

| \upshape{text} |
如此即可。
中文字体也需要输入相对应的命令:
| {\CJKfamily{hei}黑体文本} | |
| {\CJKfamily{kai}楷体文本} | |
| {\songti 宋体} | |
| {\fangsong 仿宋} |
注意开始时需要导入ctex宏包。
中文的斜体和粗体实际上对应的字体就是楷体和黑体。
字体这个问题细究下去就会是一个深坑,如果有特殊需求建议自行翻阅手册。
强调文字
强调文字中最常用的命令就是\emph,它可以将直立体改为意大利体,把意大利体改为直立体。如下代码可以实现:
| \emph{text} | |
| {\em text \/} | |
| % 注意\/有倾斜校正的作用 |
更强烈的强调也就是粗体,可以直接使用\textbf。
下面是下划线的实现方式:
| % 直接给对应文本加上下划线 | |
| \underline{text} | |
| % 但是上面的代码使得划线文本不能换行,并且下划线与文本距离不整齐 | |
| % 下面的命令解决了这个问题 | |
| % 使用前需要导入ulem宏包 | |
| \uline{text} | |
| % 默认的emph在导入ulem之后也会变成下划线,需要注意。 |
除了下划线我们还有其他修饰文字的方式:(以下均需要先导入ulem宏包)
| \uuline{text} % 双下划线 | |
| \uwave{text} % 波浪线 | |
| \sout{text} % 删除线(中部) | |
| \xout{text} % 删除线(斜线) | |
| \dashuline{text} % 虚下划线 | |
| \dotuline{text} % 点下划线 | |
| % 下面是针对中文的。 | |
| % 使用前先导入CJKfntef宏包 | |
| \CJKunderdot{汉字下加点} | |
| \CJKunderline{汉字下划线} | |
| \CJKunderblline{汉字双下划线} | |
| \CJKunderwave{汉字波浪线} | |
| \CJKsout{汉字中部删除线} | |
| \CJKxout{汉字斜删除线} | |
| % CJKfntef也会改emph为下划线 | |
| % CJKfntef还提供了指定宽度让汉字分散对齐的环境 | |
| \begin{CJKfilltwosides}{5cm} | |
| 分散对齐 | |
| \end{CJKfilltwosides} |
如果不想要emph命令变成下划线,可以使用\normalem命令改回来。
字号和间距
调整文字大小可以使用比较简单的声明式命令来解决:
| \tiny | |
| \scriptsize | |
| \footnotesize | |
| \small | |
| \normalsize | |
| \large | |
| \Large | |
| \LARGE | |
| \huge | |
| \Huge | |
| % 示例: | |
| {\large text} |
中文字体命令和相对应的大小如下表。


latex文档里面行距的计算方式如上图,我们可以使用命令\linespread{因子}的方式来调整实际行距。
对article文档类,行距默认为1,也就是字号大小的1.2倍,而ctexart等中文文档就是1.3,默认是字号的1.56倍。
水平间距与盒子
水平间距
首先考虑长度单位的问题,TEX里面可以使用以下的长度单位:
| pt % 磅,或者说是point点 | |
| pc % 1 pica = 12 pt 相当于四号 | |
| in % inch 英寸 | |
| bp % 大点, 1 in = 72 bp | |
| cm % 厘米 | |
| mm % 毫米 | |
| dd % didot point 1157 dd = 1238 pt | |
| cc % cicero 1 cc = 12 dd | |
| sp % scaled point 65536 sp = 1pt 最小长度 | |
| em % 等于一个\quad | |
| ex % 小写字母x高度 |
\quad之前的空格水平间距都是不可换行的,而它与比他更大的空格通常是可以换行的。
如果本来的空格命令没有合适的,可以直接指定距离产生间距:
| \hspace{1cm} % 可断行 | |
| % 下面的代码告诉我们LaTeX会在只有一边有内容的地方忽略hspace的距离。 | |
| text\\ | |
| \hspace{1cm}text\\ | |
| \hspace*{1cm}text % 加星号防止忽略 |
盒子
box盒子就是TEX当中的基本处理单位,下面是一些有关盒子的代码。
| % 下面的text内容将会以左右模式排列,并且不允许断行。 | |
| \mbox{text} | |
| % makebox 与mbox类似,但是有可选参数 | |
| \makebox[1cm][s]{text} | |
| % 第一个可选参数是宽度 | |
| % 第二个可选参数是对齐方式,c中,l左,r右,s分散,默认居中。 | |
| % 如果宽度设置为0,可以产生重叠的效果。 | |
| % 下面是产生带边框的盒子,但是与上面相似 | |
| \fbox{text} | |
| \framebox[1cm][s]{text} | |
| % 长度变量fboxsep确定边框和内容的距离 | |
| \setlength{\fboxsep}{0pt} |
段落
缩进
西文文档类article等不会在每个章节的第一段缩进,但是中文文档类ctexart等会缩进两个汉字宽。
下面的代码可以调整缩进:
| % 临时禁用缩进 | |
| \noindent 段落 | |
| % 产生一个长为\parindent的缩进 | |
| \indent | |
| % 引入indentfirst宏包可以在西文文档产生章节首段的缩进 |
段间距
段落间距由\parskip控制,默认是橡皮长度0pt plus 1pt。
| % 定义为固定长度 | |
| \setlength{\parskip}{0pt} |
段落对齐方式
| % 强制段落左,右对齐 | |
| \raggedright | |
| \rightleft | |
| % 居中 | |
| \centering | |
| % 居中环境 | |
| \begin{center} | |
| 居中 | |
| \end{center} |
段落形状
这里可以采用一些宏包来实现一些比较复杂的效果,例如首字下沉:
| \usepackage{lettrine} | |
| \lettrine{T}{he} % T字首字下沉 |
还有shapepar宏包可以排出特定的形状,具体可以参看相应的手册。
文本环境
引用环境如下:
| \begin{quote} | |
| 引用文本,左右边距会比正文大,且没有首行缩进。 | |
| \end{quote} | |
| \begin{quotation} | |
| 多段引用,每段首行缩进。 | |
| \end{quotation} |
verse环境可以用来排版诗歌韵文:
| \begin{verse} | |
| \end{verse} | |
| % 利用\\换行,分段仍然用空行。 |
摘要环境:
| \begin{abstract} | |
| 摘要 | |
| \end{abstract} | |
| % 会增加摘要标题,如果不喜欢可以重定义 | |
| \CTEXoptions[abstractname={摘\quad 要}] |
列表环境:
| \begin{enumerate} | |
| \item 第一项 | |
| \item 第二项 | |
| \end{enumerate} | |
| % enumerate环境自动编号 | |
| % itemize不编号 | |
| \begin{itemize} | |
| \item 第一项 | |
| \item 第二项 | |
| \end{itemize} |
列表环境自动编号是依赖不同的计数器的,四个不同嵌套层次的enumerate环境会有不同的计数器:enumi,enumii,enumiii,enumiv.
如果想输出计数器的值:\the+计数器名称。将计数器名称作为参数输入不同命令可以实现不同的形式:
| 命令 | 形式 |
|---|---|
\arabic |
阿拉伯数字 |
\roman |
小写罗马 |
\Roman |
大写罗马 |
\alph |
小写字母 |
\Alph |
大写字母 |
\fnsymbol |
特殊符号 |
重定义 \theenumi 等命令可以让你在输入\item的时候有不同的效果。
页码,章节等也有计数器,比如页码计数器为page。
我们也可以自己定义计数器(在导言区):
| % 默认值 | |
| \newcounter{mycount}{0} | |
| % 默认阿拉伯数字 | |
| \renewcommand\themycount{\arabic{mycount}} | |
| % 使用 | |
| \stepcounter{mycount} % 自增 | |
| \addtocounter{mycount}{1} % 指定加法 |
定理类环境可以输出重要定理,以下为相应代码:
| % 一般在导言区先声明新的定理环境 | |
| \newtheorem{thm}{定理} | |
| % 上面的定义就是标题为定理的定理类环境 | |
| % 注意它是会自动编号的 | |
| \begin{thm}[小标题] | |
| \end{thm} | |
| % 如果要让定理按章节编号再加小编号,可以加可选参数: | |
| \newtheorem{thm}{定理}[chapter] |
抄录命令和环境可以让我们不需要转义就可以输入大量的特殊符号:
| \verb" $$$$$$$$\\\\\\\\ " | |
| \begin{verbatim} | |
| 原 样 输 出,包括空格数量 | |
| \end{verbatim} |
在\verb后面的起始和末尾的符号相同,两个符号中的内容将原样输出。
代码环境需要verbatim环境,如果还想代码高亮,就可以导入listings宏包。
| \begin{lstlisting}[language=C] | |
| #include<stdio.h> | |
| \end{lstlisting} |
我们通过一些处理可以输出一些特殊效果的代码。
| \lstset{language=C,flexiblecolumns,escapechar='} | |
| \begin{lstlisting} | |
| double x = 1/sin(x); // '$frac{1}{\sin x}$' | |
| \end{lstlisting} |
浙公网安备 33010602011771号