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} |