购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.4 段落

介绍完语言文字和字符字号,就要开始组织段落了。一般地,正文段落要求首行缩进,之后确定文本对齐方式,并适当调整行间距。在一些学术论文中,可能会要求首字母下沉;为了节省版面,可能需要图文环绕、分栏排版等,都属于调整段落样式的操作。

除可以自己做一些常规的段落格式调整外,还可以借用预定义的文本环境,快速完成个性化段落格式控制。例如排版引用的选段、节选的诗歌词赋,可以放在文本环境中。对理工科文档来说,可能更多见到的是列表、定理、代码等,这些具有代表性的段落,都可以借助特定环境完成排版。

以上这些内容是本节的重点部分,读者在应用过程中不可避免要遇到。此外,本节还简单介绍了行号与盒子,以供读者查阅。

2.4.1 缩进和换行

默认情况下,LATEX 文档的正文部分,所有段落的首行都会自动缩进。在 ctex 宏包 中,强行缩进的命令为\indent,与之相反的是\noindent命令,表示不缩进。在ctex宏包中,默认情况下,标题不会缩进(除subparagraph),如表2.20所示。

可根据需要修改标题的缩进距离。

其中format用于表示设置标题格式,它包含numberformat、nameformat、titleformat:numberformat 设置标题序号样式,nameformat 用于设置章节序号和名称(如第1章)样式,titleformat用于设置标题样式。

表2.20 ctex宏包的缩进设置

除ctex宏包中提供了首行缩进命令外,indentfirst宏包的\parindent命令也可设置首行缩进。

LATEX 文本中的空行表示换行,默认情况下,以空行换行的段落,会自动得到首行缩进。多个空行与一个空行效果相同,只会产生一个换行。

\par命令也可以产生换行效果,但在普通正文行文中,不推荐使用,以空行作为换行更加方便、标准。\par命令产生的效果与空行的效果相似,即使使用多个\par命令,也只会产生一次分段。

\\命令可以强行换行,上一段的文字排列不会受到影响,而会在\\的位置断开。下一段紧跟在下一行,不会有首行缩进效果。\\命令后面可以带一个参数,表示换行之后,额外增加的行间距离,如\\[2cm]。需要注意的是,如果\\命令后面需要使用方括号[],则应该添加空分组,即\\{},否则可能发生编译错误。

\linebreak命令作为换行断点,也是强制换行,上一段最后一行文字会均匀分布,下一段不会有首行缩进效果。\linebreak命令也可以带有一个参数,参数值为0~4,表示允许换行的程度。0表示不可以换行,4表示必须换行(默认)。类似地,\nolinebreak命令与\linebreak命令意义相反。

2.4.2 文本对齐

你一定遇到过这样的情况:某个单词很长,却刚好处在一行的结束位置,导致文本超出范围,不能正常换行,例如有下面这样的文本。

这里有一些很长的单词:unenthusiastically、acquaaintanceship、biotransformation、chemiluminescence、dihydrostreptomycin、electroencephalography、great-granddaughter,你认识几个呢?

其中“chemiluminescence”超出了行末,不能正常换行(LATEX 编译日志提示行末超出)。TEX中提供了\linebreak命令,用于强制换行,即\linebreak{text},前一行文本自动两端对齐。类似地,当不能正常换页的时候,使用\pagebreak命令。

段落的水平对齐方式有左对齐、居中对齐、右对齐三种,可分别在 flushleft、center、flushright 环境中设置,也可以用\raggedright、\centering、\raggedleft 命令实现,如表2.21所示。

表2.21 段落对齐方式控制

在flushleft环境下排版一段文字,即段落左对齐:

上述LATEX命令打印效果如下:

What the hell is that?What is your motto here?Boys,inform on your classmates,save your hide,anything short of that,we're gonna burn you at the stake?

用\raggedright命令可以得到与flushleft环境相同的排版效果。

上述LATEX命令打印效果如下:

What the hell is that?What is your motto here?Boys,inform on your classmates,save your hide,anything short of that,we're gonna burn you at the stake?

ragged2e宏包也提供了类似于LATEX中定义文本对齐的环境和命令,如表2.22所示。

表2.22 ragged2e宏包中段落对齐方式控制

用ragged2e宏包的\RaggedRight设置段落左对齐。

上述LATEX命令打印效果如下:

What the hell is that?What is your motto here?Boys,inform on your classmates,save your hide,anything short of that,we're gonna burn you at the stake?

2.4.3 行间距

在LATEX中,行间距与字号相关,默认情况下,行间距为字号的1.2倍。行间距是指一行文字的基线到下一行文字的基线之间的距离,如图2.2所示。

图2.2 行间距

TEX定义的参数\baselineskip设置了基本的段间距离,比字号大20%,LATEX提供的\linespread命令,可基于\baselineskip修改段间距离,如\baselineskip{2.0}{text}。

setspace宏包提供了一组命令与环境,在修改行间距的时候,尽量使得数学公式、浮动体、脚注等行间距相对合理,如表2.23所示。setspace 宏包中的\singlespacing、\onehalfspacing、\doublespacing 三个命令可对文本行间距进行设置,在全局范围内产生单倍行间距、多倍行间距和双倍行间距。\setstretch命令可用于指定多倍行距,如\setstretch{1.2}。与这三个命令对应的,还有三个环境:singlespace、onehalfspace、dou-blespace,可单独设置某部分段落的行间距。除预置的行间距外,还可以在spacing环境中自定义行间距。

表2.23 行间距控制

用setspace宏包下的spacing环境对某段文本设置行间距,下面是LATEX文本和打印效果(限于篇幅,命令中略去了部分文本)。

上述LATEX命令打印效果如下:

What the hell is that?What is your motto here?Boys,inform on your classmates,save your hide,anything short of that,we're gonna burn you at the stake?Well,gentleman,when the shit hits the fan some guys run and some guys stay,here's Charlie,facing the fire and there's George hiding in big daddy's pocket.And what are you doing?And you are gonna reward George,and destroy Charlie.

这段文字在spacing环境中打印,为2倍行间距。因为是在spacing环境中设置的,所以不会影响后面其他文本的行间距,而以\doublespacing 等命令设置的行间距,作用范围为后面的所有文本,会影响后续内容的行间距,可以采用分组的方式缩小其作用范围。

2.4.4 首字下沉

不管是在英文文献中,还是在中文文献中,都有首字下沉的应用。首字下沉,就是段落开始的第一个字母或者汉字单独占据两行及以上的空间。lettrine 宏包的\lettrine 命令可以实现这一需求,其命令格式为

\lettrine 命令最简单的使用方法为忽略可选项 [key/val-list],参数 initial 表示需要下沉的字母或者汉字,可通过重定义\LettrineFontHook 修改字符样式。参数 text为文本,如果是英文,则默认全部大写,可重定义\LettrineTextFont修改字体。

以《闻香识女人》中的经典台词为例,打印首字下沉效果(限于篇幅,命令中省去了文本)。

上述LATEX命令打印效果如下:

W hat the hell is that?What is your motto here?Boys,inform on your classmates,save your hide,anything short of that,we're gonna burn you at the stake?Well,gentleman,when the shit hits the fan some guys run and some guys stay,here's Charlie,facing the fire and there's George hiding in big daddy's pocket.And what are you doing?And you are gonna reward George,and destroy Charlie.

翻译成中文,也可以有首字下沉效果(限于篇幅,命令中省去了文本):

上述LATEX命令打印效果如下:

这到底是什么?你们的校训是什么?孩子们,给你们的同学打小报告,要是隐瞒不能彻底的交待,就把你放在火上烤。看吧!子弹扫来的时候,有些人跑了,有些人毅力不动。这位查理迎上去面对火刑,而乔治躲到他老爸的羽翼之下去了,你要怎么做,奖赏乔治,还是毁掉查理。

对\LettrineFontHook和\LettrineTextFont重定义,再次打印上面的案例。

上述LATEX命令打印效果如下:

W

HAT THE HELL IS THAT?What is your motto here?Boys,inform on your class-mates,save your hide,anything short of that,we're gonna burn you at the stake?Well,gentleman,when the shit hits the fan some guys run and some guys stay,...

下面来看可选项 [key/val-list] 部分,其部分键值对如表2.24所示。表2.24中参数可以调整首字下沉行数、下沉高度、行首缩进等。

结合表2.24中的参数,有LATEX文本(限于篇幅,命令中省去了文本)。

上述LATEX命令打印效果如下:

A

WHAT THE HELL IS THAT?What is your motto here?Boys,inform on your class-mates,save your hide,anything short of that,we're gonna burn you at the stake?Well,gentleman,when the shit hits the fan some guys run and some guys stay,here's Charlie,facing the fire and there's George hiding in big daddy's pocket.And what are you doing?And you are gonna reward George,and destroy Charlie.

表2.24 lettrine命令可选项键值对(部分)

2.4.5 图文环绕

你一定见过书籍、论文中插入的图表,如果图表很小,则为了节省版面,常常让文字环绕在图表四周。picinpar 宏包定义了 window 环境和 figwindow 环境,用于在段落中插入图表。

picinpar宏包的window环境的语法格式如下:

在这个环境中,可以有多个可选参数:lines表示在第几行插入图表;where表示插入的位置,有l(left)、c(center)和r(right)三个参数值;commands表示要插入的内容,caption表示标题,可以省略。

在picinpar宏包的window环境下,实现图文环绕。

上述LATEX命令打印效果如下:

What the hell is that?What is your motto here?Boys,inform on your class-mates,save your hide,anything shortof that,we're gonna burn you at the stake?Well,gentleman,when the shit hits the fan some guys run and some guys stay,here's Charlie,facing the fire and there's George hiding in big daddy's pocket.And what are you doing?And you are gonna reward George,and destroy Charlie.

标题

在这个案例中,可选项1(数字1)表示在第1行下面插入图表;c表示图表位置居中;\shortstack命令让换行符产生的换行效果得以实现(如堆栈向上叠加);\fbox命令即产生一个边框;标题caption可以省略。

在window环境中不仅可以插入文本框,还可以插入图片、表格等,但是在设置标题的时候,并没有生成图表的编号,在figwindow环境中却可以实现,其语法格式与在window环境中类似。

在picinpar宏包的figwindow环境中,实现图文环绕。

上述LATEX命令打印效果如下:

Mr.Simms doesn't want it.He doesn't need to be labeled,still worthy of being a Baird man!What the hell is that?What is your motto here?Boys,inform on your classmates,save your hide,any-thing short of that,we're gonna burn you at the stake?

图2.3 图文环绕

Well,gentleman,when the shit hits the fan some guys run and some guys stay,here's Charlie,facing the fire and there's George hiding in big daddy's pocket.And what are you doing?And you are gonna reward George,and destroy Charlie.

在figwindow环境中,用\includegraphics插入图片(需要引入graphicx宏包),并为图片配置了标题,且自动编号。由于这段文字很长,所以还添加了\par命令,用于开启新的段落,\indent命令产生首行缩进。

2.4.6 文本环境

在LATEX中有几种常用的文本环境,分别是引用环境、诗歌环境和摘要环境等。quote环境和 quotation 环境都是引用环境,verse 环境用于诗歌排版,article 和 report 类型文档还有abstract环境,用于打印文章摘要。

下面的案例,都是以形如\begin{quote}...\end{quote} 的方式实现的,所以不逐一列举LATEX文本。

quote环境下的引用,中间对齐,行首没有缩进。左右、上下间距比正文大,常用于引用小段文章。

北国风光,千里冰封,万里雪飘。望长城内外,惟余莽莽;大河上下,顿失滔滔。山舞银蛇,原驰蜡象,欲与天公试比高。须晴日,看红装素裹,分外妖娆。江山如此多娇,引无数英雄竞折腰。惜秦皇汉武,略输文采;唐宗宋祖,稍逊风骚。一代天骄,成吉思汗,只识弯弓射大雕。俱往矣,数风流人物,还看今朝。

quotation 环境下的引用,有首行缩进。左右、上下间距比正文大,常用于引用大段文章。

北国风光,千里冰封,万里雪飘。望长城内外,惟余莽莽;大河上下,顿失滔滔。山舞银蛇,原驰蜡象,欲与天公试比高。须晴日,看红装素裹,分外妖娆。江山如此多娇,引无数英雄竞折腰。惜秦皇汉武,略输文采;唐宗宋祖,稍逊风骚。一代天骄,成吉思汗,只识弯弓射大雕。俱往矣,数风流人物,还看今朝。

verse环境下的引用,左右、上下间距比正文大,过长的文本会在折行的时候悬挂缩进。

北国风光,千里冰封,万里雪飘。望长城内外,惟余莽莽;大河上下,顿失滔滔。山舞银蛇,原驰蜡象,欲与天公试比高。须晴日,看红装素裹,分外妖娆。江山如此多娇,引无数英雄竞折腰。惜秦皇汉武,略输文采;唐宗宋祖,稍逊风骚。一代天骄,成吉思汗,只识弯弓射大雕。俱往矣,数风流人物,还看今朝。

abstract 环境需要在 article 或者 report 类型文档中实现,其使用方式与 quote 环境的使用方式相同,这里不再赘述。值得一提的是,摘要的标题由\abstractname命令定义,英文文档默认标题为“Abstract”,中文文档默认标题为“摘要”,可通过\abstractname命令重定义名称。

2.4.7 列表环境

标准LATEX提供了三种列表环境:itemize、enumerate、description,用户可以基于这些列表环境进行个性化定义。

①itemize环境下的列表格式

在itemize环境中添加列表项,每一个列表项都由\item开始,\item后面即列表项内容。

上述LATEX命令打印效果如下:

·列表项

·列表项

·......

在列表itemize环境中,对列表项层级标记的控制如表2.25所示。根据各层级的控制命令,可尝试修改列表标记。

表2.25 itemize环境下的列表项层级控制

②enumerate环境下的列表格式

enumerate 环境下的列表格式与 itemize 环境下的列表格式相似,列表项用\item 陈列,enumerate环境下的列表项层级控制如表2.26所示。

表2.26 enumerate环境下的列表项层级控制

enumerate环境下的默认列表形式如下:

上述LATEX命令打印效果如下:

1第一层列表

(a) 第二层列表

第二层描述

i.第三层列表

ii.第三层列表

(b) 第二层列表

第二层描述

2 Literature Survey

③description环境下的列表格式

description环境下的列表格式与前面两种列表相似,也是用\item陈列列表项。

上述LATEX命令打印效果如下:

A. 第一层列表

第二层列表

第二层列表

B. 第一层列表

在默认情况下,各个列表项前面是没有标记符号的,可以在\item命令后面添加标记(这种方式同样适用于itemize、enumerate列表)。

下面简单介绍一些宏包,如表2.27所示,这些宏包中定义了很多个性化的列表环境,读者可以查阅对应的参考手册。

表2.27 LATEX中支持脚注的部分宏包

如果上述的列表环境还不能满足个性化需求,还可以自定义列表环境,语法格式为:

其中参数default-label表示默认的列表标记,如果没有为\item添加标记,则用默认标记。参数decls表示具体定义的列表版面,其中相关参数如表2.28所示,各参数之间的关系如图2.4所示。

表2.28 自定义列表中参数decls可控制的布局

图2.4 表2.28中各参数的位置关系

定义下面的Quote环境,将某段文本放在一对双引号里面包裹起来。

上述LATEX命令打印效果如下:

‘‘列表内容放在双引号里面,即使有多个段落,也只有一对双引号,且只有一个列表项。

列表内容放在双引号里面,即使有多个段落,也只有一对双引号,且只有一个列表项。’’

在自定义的列表 Quote 环境中,设置了左边距\leftmargin。在 Quote 里面只有一个列表项\item,且没有给该列表添加标识([]为空)。

2.4.8 定理环境

特别是在理工类文档中,常常看到很多定理、引理、定义等,它们与正文样式有着很大不同,一般还伴随着标题、编号等。在LATEX中可用\newtheorem命令来实现这样的需求,一般有下面三种形式:

envname 为自定义环境的名称,caption 为自定义环境的标题,within 为自定义环境的主计数器,counter为延续编号的计数器。

用\newtheorem命令定义一个定理环境thm:

上述LATEX命令打印效果如下:

定理1 任意两边之和大于第三边,可以构成三角形。

thm为自定义的环境名称,该环境的标题为“定理”,且可以自动编号。除设定的“定理”外,还可以添加定理名称。

上述LATEX命令打印效果如下:

定理2(三角形定理) 任意两边之和大于第三边,可以构成三角形。

在自定义的 thm 环境中添加一个参数,指示该定理的名称。这种方式可以应用于其他由\newtheorem定义的环境中,但要注意,这个参数是在应用的时候以方括号的形式添加的。

\newtheorem的第二种形式,修改编号开始的层级。

上述LATEX命令打印效果如下:

引理2.4.1 如果知道最长边,两条短边之和小于最长边,则可以构成三角形。

在定义lemma环境的时候,设置该环境的编号从section这一层级开始计数。自定义环境中计数器的起始计数,可以继承其他环境的计数器。

延续其他环境的计数器。

上述LATEX命令打印效果如下:

案例3 假设AB是最长边,如果AC加BC的和大于AB,则ABC为三角形。

example环境延续了thm环境的计数器,在thm的基础上继续增加。需要注意的是,这个计数器放置的位置与设置主计数器的位置不同。

默认的\newtheorem方式定义的环境格式比较固定,theorem宏包对其做了扩展,也提供\newtheorem命令,其使用方式与LATEX原始\newtheorem命令相同,但必须放在导言区。theorem宏包还定义了\theoremstyle命令,可指定环境的格式,如\theoremstyle{change}。theorem宏包中预定义了一些格式,如表2.29所示。

表2.29 theorem宏包中预定义的格式

用theorem宏包提供的支持定义一个定理环境theorem,并设置其格式为change。

上述LATEX命令打印效果如下:

1定理(三角形定理) 任意两边之和大于第三边,可以构成三角形。

在change格式中,编号放在前面,标题放在后面,由案例可知,\newtheorem的使用方式与原始\newtheorem的使用方式相同,但必须放在导言区。

theorem宏包还提供了\theorembodyfont命令和\theoremheaderfont命令,分别用于设置定理环境中内容的字体和定理标题的字体。定理环境前后的间距,可分别由两个命令控制:\theorempreskipamount和\theorempostskipamount。

ntheorem宏包在theorem宏包的基础上进行扩展,功能更强大。例如\theoremstyle的预定义格式添加了nonumberplain、nonumberbreak、empty(扩大了表2.29)。关于nthe-orem宏包的使用,读者可参考官方说明。

2.4.9 代码环境

IT行业在短短的几十年里,取得了极大的发展,培养了大量的IT人才。程序代码越来越被人们熟知,如果想要排版某种编程语言的源程序代码该怎么办?像输入文本一样,直接放在 document 环境里面吗?还是用抄录(见第2.2.3节)的方式,放在 verbatim 等环境中?

假设有C语言的源代码如下:

即使读者没有学习过C语言也没有关系,我们也可以在这段简单的程序中看到很多符号:#、"、\、%,这些符号在document环境中是特殊符号,并不能直接打印,它们会被LATEX解析为LATEX命令(见第2.2.1节)。如果通过某些方式(如转义)打印这些字符,则可能失去了源程序原有的结构,当需要修改或者引用(复制)的时候就很不方便。更何况,除了C语言,还有很多其他的编程语言(如LATEX本身也是一种编程语言)。用抄录的方式虽然可以按照字符原样打印,但是在代码缩进、关键字颜色控制上有很大不便。如何将程序的源代码漂亮地排版出来?LATEX的listings宏包为该需求提供了解决方案。

读者也许会思考,为什么上面引用的 C 语言源程序能够像编译器中的排版一样打印,所有特殊字符也正常显示?其实是作者在编排的时候,将该源程序放在了lstlisting环境中,下面来讨论有关listings宏包的应用。

与其他环境相同,要使用代码环境,首先需要在导言区添加listings宏包。类似地,添加 listings 宏包的命令如下,其中可选项 options 的说明如表2.30所示(一般省略该可选参数,应用默认选项即可)。

表2.30 可选项options的说明

如果所用的程序语言需要频繁改变,为了更快地加载不同的程序语言样式,建议在加载listings宏包之后,用\lstloadlanguages命令对其预先加载:

其中languages list列表可以是:[ISO]C++、Java等编程语言,列表项用逗号分隔,如\lstloadlanguages{[ISO]C++,Java},这些编程语言预定义的格式化样式将同时加载进来。其中[ISO]为C++对应的版本,已定义好的编程语言及对应的版本如表2.31所示。当然,用户也可以自定义编程语言的排版样式。

表2.31 预定义的编程语言及对应的版本

定义编程语言的样式用\lstset{key=value list} 命令,它有一个参数列表,以键值对的形式表示。如果设置某个键值对,将会覆盖原有的默认形式。

打印上述C语言程序的LATEX文本如下:

从案例中可知,C语言程序放在lstlisting环境中,就能够按照源码的形式打印。其中[language=C]指定了源码属于C语言,还可以通过\lstset命令统一设置,即在加载lstlisting环境之前设置。

lstlisting环境可选项的键值对非常多,所以可设置的样式也非常多,下面我们列举一些常见的案例,来了解lstlisting环境的特性。

在默认情况下,制表符(Tabulator)作为源码的一部分,会同源码一起输出,制表符占据多大的空间呢?其空格多少由tabsize控制,如tabsize=2,即一个制表符占据两个英文字符的宽度,设tabsize=n,即占据 n个英文字符的宽度。

设置制表符占据两个英文字符的宽度。

上述LATEX命令打印效果如下:

123456789

一个制表符

两个制表符

制表符两个制表符

如果对制表符(或者空格)的个数没有什么概念,或者说个数不够直观,则可以将制表符打印出来,可设置参数showspaces=true和showtabs=true。默认情况下,制表符(或者空格)以⊔的形式打印。

打印制表符或者空格。

上述LATEX命令打印效果如下:

123456789123456

一个制表符

两个制表符

制表符 两个制表符一个空格

为了方便源码阅读,很多时候会设置行号,通过行号可以很快定位源码位置。listings宏包也提供了可选参数numbers设置源码行号。

设置行号。

上述LATEX命令打印效果如下:

在这个案例中,numbers用于设置行号,出现在源程序的右边,同时设置行号字号为\tiny,行号步长为2。与行号相关的参数如表2.32所示。

表2.32 lstlisting中关于行号的控制

设置:[language=C,numbers=left,stepnumber=2,firstnumber=3],打印效果如下:

用\thelstnumber命令打印行号,默认为\arabic{lstnumber},可对\thelstnumber命令进行自定义。

在 lstlisting 环境中,除预定义的关键字高亮外,用户可以自定义着重标记(下画线、颜色等)。首先确定哪些字符将要着重显示,用emph确定字符,然后用emphstyle为这些字符设置样式。

为源码中的字符for、root添加下画线:

为使程序代码有更好的可读性,难免要写一定的注释内容,在前面的案例中也接触到了注释的样式控制,注释一般用morecomment关键字说明,之后设置相应的样式。

源码注释部分的样式控制。

这里定义了两种注释,一种是行注解,其样式跟随关键字的样式(keywordstyle);另一种是多行注解,字符为红色。

与列表环境、定理环境类似,lstlisting环境装载的代码独立于正文文本,可控制其边框,如表2.33所示。可见,lstlisting环境的边框样式非常丰富。

表2.33 lstlisting中关于边框的控制

有如下设置:[language=C,frame=shadowbox,rulesep=1pt,rulesepcolor=\color{red}],打印的代码框如下所示。

还有一个很有意思的参数 frameshape={top shape}{left shape}{right shape}{bottom shape}:left shape 或 right shape 为 left-to-right,设置为 y 或 n,可以为空,y 表示画标尺(rule)。top shape 或 bottom shape 为 left-rule-right,其中 left、right 可以设置为 y、n 或者 r,可以省略为空。添加\lstset{frameshape={RYRYNYYYY}{yny}{yny}{RYRYNYYYY}},打印的lstlisting环境代码边框如图2.5所示

图2.5 代码边框

如果是很短的一行代码,可能不需要占据很大的版面空间,或者就是想要将这行代码插入当前句子中,又该如何解决呢?listings宏包提供了\lstinline命令,可以将源代码插入到行中,不会把源码解析为LATEX命令。\lstinline命令的一般形式为:

其中包含一个可选列表,可设置某些样式;character与same character选项,表示同一(或匹配)符号,如 {}、||等符号,可将源码包含其中:\lstinline{source code}、\lstinline|source code|。虽然\lstinline 命令很方便,但是也有一些局限性,如不支持设置边框和背景颜色等。

另一个很有意思的命令就是\lstinputlisting命令,其功能为插入源码文件,该命令有两个参数,第一个参数是可选项列表,第二个参数为文件的路径(或相对路径),一般形式为:

有\lstinputlisting[lastline=5]{.../lstinputlistin.txt},将lstinputlistin.txt文件中的前5行内容打印出来,其中lastline=5表示读取到文件的第5行位置。需要打印文件内容,其文件所在路径尽量用相对路径。

如果要在lstlisting中解析LATEX文本,则可以用参数escapechar=character,character之间的内容作为LaTeX文本,所以character应该成对出现。

在lstlisting环境中,$sum=s_1+s_2$置于%之间,作为LATEX命令解析,打印出 sum=s 1 +s 2

上述LATEX命令打印效果如下:

2.4.10 行号

在某些文档中,对每行文本标号是有必要的,可以有针对性地引用行号。lineno 宏包中的\linenumbers命令和\nolinenumbers命令分别用于打印行号和停止打印行号。

用lineno宏包中的\linenumbers命令和\nolinenumbers命令打印行号和取消行号。

上述LATEX命令打印效果如下:

1当前文本是单栏文本,前文还没有行号,从这个位置开始设置行号。设置行号用lineno2宏包中的\linenumbers命令,或者\linenumbers[start-number]命令,即行号从start-3number开始。如果要结束行号,就用\nolinenumbers命令。需要注意的是,\nolinenumbers 4命令不能与需要行号的段落在一起。

5 这是下一段文本,行号接着上一段文本。

-100下一个段落的行号从-100开始。

\nolinenumbers 命令与上一个段落之间必须分段(空行),即表示与上一段落没有关系,否则上一段落不会有行号。

\linenumbers命令以段落为标准打印行号。

上述LATEX命令打印效果如下:

\linenumbers命令打印行号以段落为标准,如果没有分段,将不会有行号。

x/=y

1从这行开始有行号:

x/=y

2为了让上一行有行号,将$$ x\neq y $$放在linenomath中。

如果要为公式行添加行号,则可以在引用 lineno 宏包的时候,添加 mathlines 选项,有关lineno宏包的可选项如表2.34所示。

表2.34 lineno宏包的可选项

在图书这样的长文档中,行号也许不需要从头到尾连续。要想在新的段落开始位置重置行号,可以有下面几种方式:

linenumbers 环境与 runninglinenumbers 环境分别代替了\linenumbers 命令和\runninglinenumbers命令,在该环境中,不需要\linenumbers和\nolinenumbers等命令开启或者关闭行号打印,将行号打印的范围缩小。如果number=1,则可以用星号(*)代替,如\linenumbers*。

在linenumbers环境中的段落有行号。

上述LATEX命令打印效果如下:

10将段落放在linenumbers环境中,行号从10开始,linenumbers环境之外的内容不会11打印行号。

文本中添加行号,一是方便阅读,二是方便引用。lineno 宏包的\linelabel 命令为行设置标记,\lineref命令或者\ref命令引用对应的行。

为行设置引用标记。

上述LATEX命令打印效果如下:

1这里有一段文本,为文本打印行号,之后引用某一行文本:\linelabel命令为行设置2标记,\lineref命令或者\ref命令引用对应的行。

3在这里设置行标记\linelabel{linenum},标记不会被打印。在这里用\lineref{4linenum}引用,即打印行3,或者\ref{linenum}引用,也打印行3。

行号的样式也是可以自定义的,控制行号字体的是\linenumberfont,文本与行号的左边距为\linenumbersep,行号本身由\thelinenumber 定义,\makeLineNumber 表示文本与行号之间的连接。

重定义行号样式。

上述LATEX命令打印效果如下:

i→重定义\thelinenumber为罗马字。文本与行号之间的距离\linenumbersep设置为ii→1cm。在行号与文本之间由\LineNumber添加一个箭头,其中\llap表示左端对齐,\rlap iii→表示右端对齐。

2.4.11 分栏

很多学术论文为了节省版面,以双栏的形式排版。默认情况下,LATEX文档都是单栏排版的。为了实现双栏排版或者更多栏排版,可以借助parallel、multicol等宏包实现。parallel宏包可实现双栏排版,如果要实现更多栏的排版,则可以使用multicol宏包。

先看parallel宏包下的双栏排版,其格式如下:

在 Parallel 环境中,\ParallelLText 的文本在左边,\ParallelRText 文本在右边。不管左右的文本是否高度相同,都不会相互填充,且脚注跟随在左边分栏的底部。

上述LATEX命令打印效果如下:

1 左边栏的脚注。

2 右边栏的脚注。

案例中Parallel环境的两个参数都为空,文档将按照均分的方式布局,\ParallelLText和\ParallelRText里面可以用空行划分段落。\ParallelPar用于划分两组分栏,放在一组\ParallelLText和\ParallelRText的后面。

需要注意的是:在双栏分布的地方添加行号,只有左边分栏打印行号,右边分栏不打印。不管脚注添加在\ParallelLText 或\ParallelRText,都在左边分栏的尾部打印。\ParallelAtEnd用于定义正文与脚注之间的内容,案例中设置了垂直距离为7pt,并添加了分隔线(\footnoterule)。

标准LATEX文档不能在同一个页面中产生部分双栏的文档,要么直接在新的页面产生双栏。multicol宏包的multicols环境就能实现多栏文档的定义,且具有很好的自适应能力,可定义2~10列。

参数 columns 即分栏数,参数 preface 即添加在分栏文本前面的内容,如在分栏文本前面添加标题。

首先看一个简单的案例,不考虑[preface],指定列数为3。

上述LATEX命令打印效果如下:

在 multicols 环境中填入文本内容,不需要像Par-allel 环境中那样,用类似于\ParallelLText 和\ParallelRText的命令分隔各个列,multicols会自动将内容均分到各列中,只会在最后一列出现内容不够而留白的情况。

在分列打印之前,还可以为该部分内容添加前言信息,如添加一个标题(为节约篇幅,命令中的文本有省略)。

上述LATEX命令打印效果如下:

再别康桥

轻轻的我走了,正如我轻轻的来;我轻轻的招手,作别西天的云彩。

那河畔的金柳,是夕阳中的新娘;波光里的艳影,在我的心头荡漾。

软泥上的青荇,油油的在水底招摇;在康河的柔波里,我甘心做一条水草!

那榆荫下的一潭,不是清泉,是天上虹;揉碎在浮藻间,沉淀着彩虹似的梦。

寻梦?撑一支长篙,向青草更青处漫溯;满载一船星辉,在星辉斑斓里放歌。

但我不能放歌,悄悄是别离的笙箫;夏虫也为我沉默,沉默是今晚的康桥!

悄悄的我走了,正如我悄悄的来;我挥一挥衣袖,不带走一片云彩。

multicols环境的布局参数如表2.35所示。例如每列之间添加竖线由\columnseprule控制,增加两列之间的距离用\columnsep。

表2.35 multicols环境的布局参数

增加列间距,且列间添加竖线(为节约篇幅,省略了文本)。

上述LATEX命令打印效果如下:

沁园春

北国风光,千里冰封,万里雪飘。望长城内外,惟余莽莽;大河上下,顿失滔滔。山舞银蛇,原驰蜡象,欲与天公试比高。须晴日,看红装素裹,分外妖娆。江山如此多娇,引无数英雄竞折腰。惜秦皇汉武,略输文采;唐宗宋祖,稍逊风骚。一代天骄,成吉思汗,只识弯弓射大雕。俱往矣,数风流人物,还看今朝。

对multicols环境中的文本添加行号,每一列都会打印行号。对multicols环境中的文本添加脚注,脚注打印在页面的底部(为节约篇幅,省略了大部分文本)。

上述LATEX命令打印效果如下:

沁园春

1北国风光,千里冰封,万里雪飘。望长2城内外,惟余莽莽;大河上下,顿失滔滔。3山舞银蛇,原驰蜡象,欲与天公试比高。须4晴日,看红装素裹,分外妖娆。江山如此多5娇,引无数英雄竞折腰。惜秦皇汉武,略输6文采;唐宗宋祖,稍逊风骚。一代天骄,成7吉思汗,只识弯弓射大雕。俱往矣,数风流8人物,还看今朝。

2.4.12 盒子

盒子是LATEX的基本组成单元,一个字符、一个图表都是盒子。这里我们介绍一些常用的盒子命令,如表2.36所示。

表2.36 常用的盒子命令

以\framebox[width][pos]{text}为例,打印一个带边框的盒子。

上述LATEX命令打印效果如下:

\framebox的长度为10cm,选择的对齐方式为s,即分散对齐(两端对齐)。对于\fbox和\framebox,可通过\fboxsep控制边框与内容的距离,通过\fboxrule控制线条粗细。

\newsavebox 命令用于自定义盒子,\sbox 与\savebox 命令以及 lrbox 环境用于设置盒子装载的具体内容,\usebox 命令用于调用定义好的盒子。\newsavebox、\sbox、\savebox、lrbox、\usebox的语法格式如下:

cmd表示自定义的命令,text表示盒子中装载的内容,width表示盒子的宽度,pos表示对齐方式,可选值有:c(中)、l(左)、r(右)、s(分散)。

用\newsavebox命令自定义盒子。

上述LATEX命令打印效果如下:

\parbox命令与minipage环境为垂直方向上的盒子,适用于装载段落,必须带有宽度。

上述LATEX命令打印效果如下:

每个盒子都有宽度、高度和深度,\settowidth、\settoheight、\settodepth分别用于打印盒子的宽度、高度和深度,它们的语法格式为:

length cmd 表示长度命令,可用\newlength{cmd} 定义长度命令,该命令有一个参数,即自定义的长度命令,用于存储盒子长度。text为盒子,包括文本内容及自定义盒子等。

\settowidth、\settoheight、\settodepth用于获取盒子尺寸。

上述LATEX命令打印效果如下:

width=55.96405pt height=7.43025pt depth=0.0pt xZ8ftSlMkYAAfq4Aemr/atCCz/OKHHVzGL8ZKqmhQ9djQ8jqtAoPJBfm1PKMFsVe

点击中间区域
呼出菜单
上一章
目录
下一章
×