从零开始用 LaTeX 排版一篇中文期刊论文 - (一)<完结>
由于篇幅过长,本篇已完结。
第二部分链接
本篇文章主要是对B站 用Latex 排版一篇中文期刊论文 (上) 中的内容进行总结的第一部分。由于本文档以讲解为主,所以源代码会放到附录中,可能会与视频中的内容有所不同,附录中代码主要针对视频中所讲的命令的使用的精简版。
创建简单文档
使用
LaTeX
\LaTeX
LATEX 的时候,第一步就是选择要使用的文档类型。使用命令 \documentclass{}
选择文档类型,常用的文档类型有如下几种:
类型 | 用途 |
---|---|
article | 基本文档类型,主要用于排版一些较短的期刊论文。 |
book | 书籍文档类型,用于长篇的书籍排版,也可用来排毕业论文等中长篇文章。 |
report | 虽然是报告类型,但是其实是功能介于book和article之间的一个文档类型。 |
standalone | 用来单独保存 latex 做的图片或表格的文档类型 |
而本文是针对中文期刊论文的,因此使用的是article 的文档类型。
选择完文档类型之后,就可以正式编辑文档,正文的编辑需要在 document 环境中进行。而 LaTeX \LaTeX LATEX 环境是需要由 begin 和 end 组成。如下:
\documentclass{article}
\begin{document}
This is a TEST sentence.
这是一段中文字体。
\end{document}
需要注意的是,编译完成之后,结果是不显示中文的。这是因为,latex 并不能直接支持中文,因此需要借助于宏包才可以显示中文。而宏包必须在导言区使用,导言区指的是\begin{document}
以上\documentclass{article}
以下的部分。而使用宏包需要借助命令\usepackage{}
而实现中文显示可以借助 ctex 宏包。 即在导言区使用\usepackage{ctex}
。
除此之外,为了更好的实现中文,需要将texstudio 的默认编译器改为 xelatex。因为texstudio默认使用的编译器是pdflatex。更改方式如下:
选项 --> 设置 --> 构建 -->默认编译器 --> xelatex
为什么要把pdflatex 更换为 xelatex 呢? 其实粗俗的一点解释,实现编译中文就像要吃一碗面条,而pdflatex 是勺子,但 xelatex是筷子。吃面条的时候只有勺子吃个卵啊,那用勺子可以吃面条吗,当然也是可以的,但是他费劲啊。所以还是建议大家使用筷子吃面条。
这里再强调一下,texstudio 是编译软件,不是编译器,编译器是xelatex、pdflatex 等,texstudio 只是为我们提供这样使用编译器的平台,更高效的完成撰写和编译任务而已。
编写标题
LaTeX \LaTeX LATEX 编写标题,有两种方法,
直接编辑
一种就是正常的编辑标题、作者等文本,并居中显示。如:
\documentclass{article}
\usepackage{ctex}
\begin{document}
\begin{center}
这是标题
宋荍
2020年8月3日
\end{center}
\end{document}
其中 center 环境用于使文本居中,但是上述代码运行的结果所有的字体是在同一行的,这是因为
LaTeX
\LaTeX
LATEX 中回车并不能换行,实现换行,可以在段落后面使用\\
。但是这样的换行方式,第二行文本没有缩进。如果想使换行后的文本自动缩进,则需要使用空行的方法换行,即在两行文本之间空一行。
LaTeX
\LaTeX
LATEX 中无论空多少行都是分段(另起一段),而不能增加两个段落间的距离。想要增加距离可以使用\\[10pt]
即段落后多空出10pt 的距离。
另外字体间的空格也不能实现真正意义上的空格, LaTeX \LaTeX LATEX 会忽视输入的空格,因此如果想实现字体间空格可以使用如下命令:
命令 | 效果 | 长度 |
---|---|---|
a \qquad b | a b a \qquad b ab | 两个 m 的宽度 |
a \quad b | a b a \quad b ab | 一个 m 的宽度 |
a\ b 或 a~b | a b a\ b a b | 1/3个 m 宽度 |
a;b | a b a\;b ab | 2/7个 m 宽度 |
a,b | a b a\,b ab | 1/6个 m 宽度 |
a!b | a b a\!b ab | 缩进1/6个 m 宽度 |
使用命令生成
我们也可以使用命令,提前定义标题名称、作者姓名和日期。如下:
\title{这是标题}
\author{作者}
\date{\today}
此部分内容可以放在导言区也可以放在正文部分,单纯定义这些内容,正文是不会显示的,想要正文显示这部分内容,还需要在正文部分使用命令\maketitle
,使用 这一命令生成的文本的字体字号使被提前定义好的。
- 并且标题和页面顶部有一部分空隙,想消除这部分空隙,可以使用
\vspace{}
命令,使文本竖直向上移动一段距离。这一命令是用来控制其后面的内容和前面内容的间隔,花括号内填正距离使增加距离,负距离使减小距离。因此向提高标题位置应该对\title{}
内的内容进行如下操作。
\title{\vspace{-4cm}这是标题}
使标题内容与页面顶部间距缩短4cm,注意这里面的数值一定要有距离单位。latex 中的距离单位如下:
单位 | 名称 | 说明 |
---|---|---|
mm | 毫米 | 1 mm = 2.845 pt |
pt | 点 | 1 pt = 0.351 mm |
bp | 大点 | 1 bp = 0.353 mm > 1 pt |
dd | 迪多 | 1 dd = 0.376 mm = 1.07 pt |
pc | 排卡 | 1 pc = 4.218 mm = 12 pt |
sp | 定标点 | 65536 sp = 1 pt |
cm | 厘米 | 1 cm= 10 mm= 28.453 pt |
cc | 西塞罗 | 1 cc= 4.513 mm= 12 dd = 12.84 pt |
in | 英寸 | 1 in = 25.4 mm = 72.27 pt |
ex | ex | 1 ex = 当前字体尺寸中 x 的高度 |
em | em | 1 em = 当前字体尺寸中 M 的宽度 |
- 至于作者,可能需要填写多个作者的名字,三个字和两个字的作者为了保持长度一致可以用两个
~
放在两个字中间,如下:
\title{宋作者,宋~~荍}
其效果如下:
宋 作 者 , 宋 荍 宋作者,宋~~荍 宋作者,宋 荍
- 最后是日期中使用了命令
\today
,其作用是显示当日的日期。也可以填写包含具体日期信息的文本作为日期。ctex 宏包情况下使用\today
命令生成的日期格式形如:
不使用ctex宏包的条件下格式形如:
如果需要更改其样式可使用 \renewcommand{已有命令}{重新定义内容}
命令对 \today
命令的形式重新定义,如下:
\renewcommand{\today}{\number\year /\number\month /number\day }
可将其形式改为形式如下的日期:
这里面 \numer\year
调用的是年份; 月份和日期与之类似。 此外这里面的 “/” 前面的空格会被忽略,"/" 后面如果有空格的话,会被认为 “/” 和后边内容是两个单词自动添加一个空格。 因此如果想是年月日和 " / " 之间不存在空隙的话,因此需要把年、月、日对应的命令直接放在 / 后面。
字体字号设置
LaTeX \LaTeX LATEX 中字体、字号也需要通过命令进行控制。
英文字体
默认包含如下表中的字体族(family)。字体设置命令主要用于局部改变字体,而字体声明命令可以对声明后的所有字体产生作用,但是也可以使用花括号限制作用范围,使其仅对花括号内的内容起作用。默认为罗马字体(注意:这里面的罗马字体并非新罗马字体)。
字体族 | 设置命令 | 声明命令 |
---|---|---|
罗马字体 | \textrm{字体内容} | {\rmfamily 字体内容} |
无衬线字体 | \textsf{字体内容} | {\sffamily 字体内容} |
打字机字体 | \texttt{字体内容} | {\ttfamily 字体内容} |
控制字体粗细(series),如下表所示,其中\textmd{}
和 {\rmseries }
常用于全局加粗时,局部需要还原为正常字体的地方。默认为正常字体。
字体系列 | 设置命令 | 声明命令 |
---|---|---|
正常字体 | \textmd{字体内容} | {\rmseries 字体内容} |
加粗字体 | \textbf{字体内容} | {\bfseries 字体内容} |
控制字体形状(shape)。其中斜体字体主要又被称为意大利斜体,类似于花体一样的字体,而伪斜体(slant) 只是让字体发生倾斜。
字体形状 | 设置命令 | 声明命令 |
---|---|---|
直立字体 | \textup{字体内容} | {\upshape 字体内容} |
斜体字体 | \textit{字体内容} | {\itshape 字体内容} |
伪斜体 | \textsl{字体内容} | {\slshape 字体内容} |
小型大写 | \textsc{字体内容} | {\scshape 字体内容} |
中文字体
PC端中,中文字体包含以下几种,
字体 | 声明命令 | 声明命令 |
---|---|---|
宋体 | \songti | \CJKfamily{zhsong} |
黑体 | \heiti | \CJKfamily{zhhei} |
仿宋 | \fangsong | \CJKfamily{zhfs} |
楷书 | \kaishu | \CJKfamily{zhkai} |
虽然中文没有属于自己的字体设置命令,仅有两种声明方式,但是英文的设置命令同样会影响中文字体,具体影响如下:
设置命令 | \textsf{} | \texttt{} | \textit{} | \textbf{} | \textsl{} |
---|---|---|---|---|---|
中文字体 | 黑体 | 仿宋 | 楷书 | 黑体 | 楷书 |
注意到加粗命令对中文字体的影响是使其变成黑体,因此 $\LaTeX $ 中,中文加粗又称为加黑,并不是真正的加粗。斜体命令对中文的影响是使其变为楷体,也并不是真正的斜体。同时使用加粗和斜体,最终得到的也是黑体正体
想实现中文字体的加粗和斜体,需要打开文档类型的伪粗体和伪斜体设置。字体设置部分会在加载系统字体的文档中一并解决。
字号设置
字号设置主要包括两部分内容,一是定义全局正文的默认字号,另一个是局部修改字号。
全局定义字号
一般论文写作过程中不需要修改正文字号,因为latex 默认的正文字号为五号字,这也是期刊论文普遍论文要求的字号,因此基本无需修改。 但是并不是不可以修改,latex 为我们提供了几个修改全文正文字体的方法,即在加载文档类的时候,添加一个设置字体的可选参数,例如:
\documentclass[11pt]{ctexart}
即将正文默认字体改为 11pt 的字体大小。
而文档类更改默认字体的参数其实不是随意的,我们可以使用的只有 10pt,11pt,12pt。并且默认文档为10pt。
那在中文文档中,如果使用了ctex宏包,它也为我们提供了全局定义自豪的两种方法。zihao = 5
(默认)和 zihao = -4
即将全局正文字体更改为 五号字 和 小四号字。用法同上面类似。如下:
\documentclass[
zihao = -4]{ctexart}
局部定义字号
局部定义字号方法不止一种,本文只分享常用的两种方法:
基本的字号命令及其对应大小见下表(摘自 lshort-zh-cn)
字号 | 10(默认,单位pt) | 11 (单位pt) | 12(单位pt) |
---|---|---|---|
\tiny | 5 | 6 | 6 |
\scriptsize | 7 | 8 | 8 |
\footnotesize | 8 | 9 | 10 |
\small | 9 | 10 | 10.95 |
\normalsize | 10 | 10.95 | 12 |
\large | 12 | 12 | 14.4 |
\Large | 14.4 | 14.4 | 17.28 |
\LARGE | 17.28 | 17.28 | 20.74 |
\huge | 20.74 | 20.74 | 24.88 |
\Huge | 25 | 25 | 25 |
但是通常情况下,我们需要的是中文字号,因此ctex 宏包为我们提供了更方便的定义中文字号的方法,和全局定义方法类似,我们只需要用命令\zihao{<字体大小>}
<字体大小> :为数字,例如 \zihao{0}
为初号字;\zihao{3}
为 三号字 \zihao{-5}
为小五号字,以此类推。
另外基本文档的字体命令与对应的字号大小如下表 :
字号 | zihao = 5 | zihao = -4 | ||
---|---|---|---|---|
命令 | 字号 | 单位:bp | 字号 | 单位:bp |
\tiny | 七号 | 5.5 | 小六 | 6.5 |
\scriptsize | 小六 | 6.5 | 六号 | 7.5 |
\footnotesize | 六号 | 7.5 | 小五 | 9 |
\small | 小五 | 9 | 五号 | 10.5 |
\normalsize | 五号 | 10.5 | 小四 | 12 |
\large | 小四 | 12 | 小三 | 15 |
\Large | 小三 | 15 | 小二 | 18 |
\LARGE | 小二 | 18 | 二号 | 22 |
\huge | 二号 | 22 | 小一 | 24 |
\Huge | 一号 | 26 | 一号 | 26 |
相关内容可查看 ctex 宏包说明。讲的很清楚的嘞。
摘要
摘要部分其实也是可以通过直接编辑,不需要使用环境,因为一般期刊论文不需要我们产生目录等,
个人还是比较推荐直接编译摘要,也就是文本内容该加粗的加粗,该黑体的黑体。但是直接编译的话,段落内容会自动缩进,因此取消摘要前面的缩进,可以在摘要段落的前面使用命令 \noindent
。
另外投稿时,摘要下方可能需要添加中图分类号和文献标识,而且两者之间有很长一段间隔,使用前面提到的加空格的方法肯定十分麻烦,因此我们可以借用\hspace{}
命令,类似于 \vsapce
是竖直方向控制间隔距离,\hspace
是水平方向控制间隔距离,依然正值为增加距离,负值为缩短距离,我们可以用下面这串命令来排中图分类号和文献表示:
中图分类号:xxx \hspace{3cm} 文献表示: X
对于中文摘要后面的英文标题、作者及摘要,以正文方式排版即可。
当然对摘要也可以使用 article 文档类型中提供的 abstract 环境。abstract 可以自动生成固定格式的摘要内容,不作为本文的重点,需要使用的可自行检索查阅。
多级标题
各级标题命令和样式
LaTeX \LaTeX LATEX 中还可以对多级标题实现自动编号。article 文档类型中多级标题的深度、名称、命令、以及默认样式如下表:
深度 | 名称 | 命令 | 默认样式 |
---|---|---|---|
0 | chapter | \part | part I 章节名称 |
1 | section | \section | 1 章节名称 |
2 | subsection | \subsection | 1.1 章节名称 |
3 | subsubsection | \subsubsection | 1.1.1 章节名称 |
4 | paragraph | \paragraph | 标题加粗无缩进,正文内容与标题同行显示 |
4 | subparagraph | \subparagraph | 标题加粗有缩进,正文内容与标题同行显示 |
注意:使用ctex宏包时,其默认样式和article 文档类型默认样式相同。但是更好的控制文章结构,而不仅仅是实现中文显示,我们可以使用 ctexart 文档类型。即:使用:\documentclass{ctexart}
。这样使用的话,\part{}
命令的结果会变为
并且为居中显示,而 一级标题 section 的样式和article 基本样式相同,但是为居中显示,其余各级标题样式和位置与article 中的基本样式相同。
自定义多级标题样式
前面我们提到,使用 ctex 宏包,我们仅可以实现中文,但是文章章节段落的格式,其实还是 article 文档类型中的基本格式。因此想更方便的控制章节标题等元素的格式,我们可以使用 ctexart 文档类型。
ctexart 文档类型下,我们可以使用 \ctexset
命令来自定义各级标题的样式。默认
以一级、二级标题为例:
要求:
一级标标题格式为: 第一章 标题名称,序号要求黑体3号字,名称要求宋体3号字,且都加粗。段前5pt
±
\pm
± 3pt 段后 2pt
二级标题格式为:1.1.章节名称,4号字楷书。加粗。段前单倍行距,段后0.5倍行距。
且都为左对齐。
\documentclass[AutoFakeBold=1]{ctexart}
\ctexset{
section={name={\heiti 第,章},%标号内容,逗号是为序号预留的位置
number={\heiti \chinese{section}},%序号形式,采用中文序号
format={\zihao{3} \songti \bfseries},%标题内容字体格式
beforeskip={5pt plus 3pt minus3pt},%段前,+3pt,-3pt
afterskip={2pt}%段后2pt
},
subsection={
format={\zihao{4} \kaishu \bfseries},
aftername={.},%序号与标题间内容,使用句点
beforeskip={\baselineskip},%行距:baselineskip
afterskip={.5\baselineskip}
}
}
\begin{document}
\section{章节名称}
\subsection{示例章节名称}
正文内容,这里是一行示例文本。
\end{document}
其中为了实现中文加粗而非加黑,使用了伪粗体 AutoFakeBold 参数。默认为AutoFakeBold = 2 若认为太粗可更改此数值为1。
\ctexset
命令仅在使用 ctexart 文档类型时有效。如果使用 ctex 宏包则会提示无此命令。若使用宏包的情况下仍想使用 \ctexset
命令,可增加可选参数 [heading=true] 即:
\usepackage[heading = true]{ctex}
latex 中命令后面的方括号内通常为可选参数,而花括号内为必填参数。
脚注
因为我了解到的中文期刊论文的脚注都是要求的无序号的脚注,因此,本文只分享不需要添加序号的脚注,如果想自定义序号类型可自行查看footnote 相关宏包,或着百度。
一般论文要求我们添加的脚注内容包括,
投稿日期:xxxx年xx月xx日
项目名称:项目一二三四五六七八,项目二三四五六七八九,项目二三四五六七八九十,项目一二三四五六七八,项目二三四五六七八九,项目二三四五六七八九十
作者简介:略
字号为小五的无序脚注可以使用\footnotetext{脚注内容}
来添加,一般添加给标题或者是作者,如下:
\title{这是标题 \footnotetext{\small 投稿日期:xxxx年xx月xx日\\
项目名称:项目一二三四五六七八,项目二三四五六七八九,项目二三四五六七八九十,项目一二三四五六七八,项目二三四五六七八九,项目二三四五六七八九十}
}
小五我们可以使用 \small
。因为是两段,因此使用 " \\ " 换行。 另外这样“投稿日期”会因为首行缩进,和“项目名称”不是对齐的。
调整使其对齐,可在投稿日期前使用命令 \hskip -6pt
使其向前移动 6 pt ,然后再项目名称前使用命令 \hspace*{1 em}
使其向后移动 1 em 的距离。这些单位距离使借鉴 系统工程学报模板的样式和代码。而实际上是否能达到对其和使用的页边距\字号等都有关系,因此还需自己决定如何调整其距离。 其中 要注意掉这里的 \hspace{}
命令家里 星号,是因为段首如果不加 星号的话,是不起作用的,同样\vspace
命令在页面首段段首等位置也需要用 \vspace*{}
才可以起作用。
如要求项目内容 是在 项目名称后的冒号处对齐,可使用 minipage 环境。如下:
项目名称:\begin{minipage}[t]{0.85\linewidth}
项目一二三四五六七八,项目二三四五六七八九,项目二三四五六七八九十,项目一二三四五六七八,项目二三四五六七八九,项目二三四五六七八九十
\end{minipage}
其中 环境后的花括号 是用来定义 minipage 的长度的, 其中 0.85\linewidth
代表0.85倍 的行长度。(随意取的可根据需要调整)。方括号内为可选参数,用来定义minipage 和 环境外文本的对齐方式,有 t、c、b 三个选项。分别代表顶部、居中和底部对齐。
脚注分界线设置
会有期刊要求脚注分界线的长度和粗细,因此在此简要介绍一下其方法如下:
首先需要了解一个生成直线的命令 \rule[与下文间距]{长度}{粗细}
重新定义分界线(分界线命令为:\footnoterule):
\renewcommand\footnoterule{\noindent \rule[0.25\baselineskip]{105pt}{1pt}}
因为我们的分界线不需要缩进,因此使用了命令 \noindent
其次间距设置为 0.25\baselineskip
为0.25倍的行间距,是为了不让横线和下面的段落内容距离太近。长度和粗细自己按照要求进行定义即可。
行距和页边距
行距
首先了解什么是行距。在
LaTeX
\LaTeX
LATEX 中行距由 \baselineskip
控制,他的高度(其实就是字体基线间的距离):
行距=字体高度+两行字体间空白距离
因此设置行距可以使用 如下命令将行距设置为 20 pt。
\setlength{\baselineskip}{10pt}
而基础文档和 中文 ctexart 文档类型中的行距是不同的,因此如果想要知道当前文档的行间距具体是多少的时候,可以使用如下明亮,使其在生成的pdf 中显示出来。
\the\baselineskip
另一种设置行间距的方法,就是 设置 \baselinestretch
,stretch 这个单词是拉伸的意思,因此此命令看控制的是当前行距拉伸的倍数,例如双倍行距就可以使用如下命令实现:
\renewcommand{\baselinestretch}{2}
或 \linespread{2}
这两个命令是等价的,其后面的花括号内都是填的一个倍数。表示行距的多少倍,但是只是用这个命令是不够的,如果你尝试后会发现,文章的行间距不管设置成多少,都没有任何的变化,这是因为,他只有在指定字体的时候才会起作用,(和使用\fontsize{}{} 命令的时候相似)
因此为了使其产生效果,我们需要在其后面使用命令 \selectfont
。
此外需要注意的是,前面的两个命令会更改所有的行间距,包括脚注 等。因此仅想使论文主体部分的行间距产生变化,可以参考 setspace 宏包。本文不在详细介绍。
页边距
页边距设置较为简单,可借助 geometry 宏包。通常设置页边距,仅需要对上下左右边距进行设置。方法如下:
第一种:直接添加可选参数
\usepackage[left=2.25cm,right=1.97cm,top=2.25cm,bottom=2.25cm]{geometry}
第二种:加载完宏包,再进行设置:
\usepackage{geometry}
\geometry{left=2.25cm,right=1.97cm,top=2.25cm,bottom=2.25cm}
两种方法的效果相同,第一种适合全局页边距相同的时候使用,更简单,不用再使用geometry 命令。第二种方法可以用来重新设置各边距,方法可参考geometry 宏包说明。另外需要注意,这里面的长度单位不能省略,因为他没有默认单位。但是单位不一定是cm 可是其他单位
geometry 宏包不只是边距,版式的事情他大都可以做。例如限制每一页具体有多少行,页眉页脚的高度等等。
如果你的论文是双开门的(含奇偶页), 为了装订等都需要里面宽,外面窄,这个时候可以将 left 和 right 两个参数换成 inner 和outer。
小 tips: 有时候我们排版的时候,先看我们的图片、表格或者条目和内容边距的距离等。可以使用 showframe 参数,在生成的 pdf 中显示版式框架。当然终稿的时候记得去掉这个参数。
附录: 完整代码
\documentclass{ctexart}
\usepackage[left=2.25cm,right=1.97cm,top=2.25cm,bottom=2.25cm]{geometry}
%定义页边距:左 右 上 下的边距
\ctexset{
section={name={\heiti 第,章},%标号内容,逗号是为序号预留的位置
number={\heiti \chinese{section}},%序号形式,采用中文序号
format={\zihao{3} \songti \bfseries},%标题内容字体格式
beforeskip={5pt plus 3pt minus3pt},%段前,+3pt,-3pt
afterskip={2pt}%段后2pt
},
subsection={
format={\zihao{4} \kaishu \bfseries},
aftername={.},%序号与标题间内容,使用句点
beforeskip={\baselineskip},%行距:baselineskip
afterskip={.5\baselineskip}
}
}
\begin{document}
\title{这是标题 \footnotetext{\small \hskip -6pt 投稿日期:xxxx年xx月xx日\\
\hspace*{1em} 项目名称:\begin{minipage}[t]{0.85\linewidth}
项目一二三四五六七八,项目二三四五六七八九,项目二三四五六七八九十,项目一二三四五六七八,项目二三四五六七八九,项目二三四五六七八九十
\end{minipage}}
}
\author{宋作者,宋~~荍}
\date{\today}
\maketitle
\noindent \textbf{摘要:}摘要内容\\
中图分类号:xxx \hspace{3cm} 文献表示: X
\end{document}