LaTeX中的文本

发布时间 2023-11-09 09:43:42作者: xzqbear

LaTeX中的文本

正文输入

语言问题

一般的情况下LaTeX只支持英语,其他的语言都需要相应的包来支持,比如中文需要CTeX宏包。由于我们目前处在中文环境之下所以不需要考虑一些小语种的问题。

在第一篇LaTeX文档当中我们已经采用了ctex宏包:

\usepackage{ctex}

在Overleaf里面可以直接采用这种方式,但是在TeXLive当中可能还是会出现中文不出现的情况,这个时候需要将编码改为UTF-8编码(如果本来不是的话)。

字母

有的时候我们可能需要在字母上输出重音(比如汉语的四声)。我们可以采用重音命令

ead8d5e4834724f8830d2a2186239e9f.png

还可能有一些特殊字符:

特殊字母

一些字体如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}