第八节 从零开始使用 排版论文
- 如何使用
排版论文EB/OL. 2021. 链接 - 现代
入门讲座EB/OL. 2022. 链接. - SJTUThesis 用户文档EB/OL. 2022. 链接.
- learnlatex.orgEB/OL. 2022. 链接.
- 一份(不太)简短的
介绍:或 111 分钟了解EB/OL, 2021. 链接.
8.1 学习
这一部分主要参考了 Learn主要可能是本人一些部分的翻译还是欠点火候的,如果大家在阅读这个翻译版本的过程中看到任何的笔误,或者想对翻译做出任何改进,欢迎向该存储库提 PR,合并完成后,这个网站拥有中文翻译的同时,示例也将能在线运行以查看结果。
8.1.0 是什么
当然
tex --version就可以看到这个程序的版本信息。可以看到这个软件是 D.E.K.(也就是高德纳)于 1982 年发布的。
tex 版本输出
MiKTeX-TeX 4.4 (MiKTeX 22.3) © 1982 D. E. Knuth; all rights are reserved. TeX is a trademark of the American Mathematical Society using bzip2 version 1.0.8, 13-Jul-2019 compiled with curl version 7.72.0; using libcurl/7.72.0 Schannel compiled with expat version 2.2.10; using expat_2.2.10 compiled with liblzma version 50020052; using 50020052 compiled with libressl version LibreSSL 3.1.4; using LibreSSL 3.1.4 compiled with MiKTeX Application Framework version 4.4; using 4.4 compiled with MiKTeX Core version 4.12; using 4.12 compiled with MiKTeX Archive Extractor version 4.0; using 4.0 compiled with MiKTeX Package Manager version 4.7; using 4.7 compiled with uriparser version 0.9.4 compiled with zlib version 1.2.11; using 1.2.11
关于这个程序,高德纳写了一本著名的 《
**\relax *Hello, world! *\end它会提示你输出了一个 texput.dvi 文件(DVI,DeVice Independent file,设备依赖无关文件),打开它,你就会发现一个简单的文档,上面写着 Hello, world!
当然本次讲座并不是关于
实际上底层在运行一个叫
为了区别这两者的概念,我们可以在终端运行
pdftex终端输出为
This is pdfTeX, Version 3.141592653-2.6-1.40.24 (MiKTeX 22.3) (preloaded format=pdftex.fmt) restricted \write18 enabled. **
而输入
pdflatex得到
This is pdfTeX, Version 3.141592653-2.6-1.40.24 (MiKTeX 22.3) (preloaded format=pdflatex.fmt) restricted \write18 enabled. **你可以看到其仍然在调用
**\relax entering extended mode LaTeX2e <2021-11-15> patch level 1 L3 programming layer <2022-02-24> *你会看到
你可能会好奇使用 latex 会发生什么,它也将触发 pdftex,只是输出格式为 DVI 而不是 PDF。
如果上面这些东西你听得云里雾里的话,也没有关系,毕竟这些都是老古董了,现在的话很常见的方法还是直接从编辑器集成地编译。下一节会提到。
当然为了排版中文,已经不再推荐使用
引擎 | |||
程序 | |||
特点 | 直接生成 PDF,支持 micro-typography | 支持 Unicode、OpenType 与复杂文字编排 (CTL) | 支持 Unicode,内联 Lua,支持 OpenType |
以及
8.1.1 是什么
要让
发行版 | |||
特点 | 只安装必要文件,依赖用时更新 | 所有平台均可使用,每年发布一次 | Mac 系统专用,对 |
事实上,我认为这几个发行版各有操作系统偏好,虽然前两者是跨平台的。
说到镜像,像后两者的安装包都很大(4GB 左右),由于一些原因,不采用镜像的话不知道要下到什么时候,对下载速度的要求高;而
tlmgr option repository https://mirrors.sjtug.sjtu.edu.cn/CTAN/systems/texlive/tlnet
https://mirrors.sjtug.sjtu.edu.cn可以在 SJTUG 镜像站通知频道获得镜像状态的更多信息,加入关联群组参与讨论。
相信很多人的发行版都已经装完了,那我们来谈谈编辑器吧。编辑器的种类很多,我无法一一列举,但是对编写
编辑器 | Visual Studio Code + | ||
特点 | 搭配 VS Code 使用非常方便,易扩展 | 可以使用大量的菜单选项输入代码块,用户友好 | 只提供基础的高亮与运行方法,发行版自带 |
使用专为
当然使用在线平台省去了安装发行版的麻烦,这里列出两种在线写作平台。当然国内还有 TeX Page,Slagger 等。一般来讲,这种平台使用的都是 Linux 操作系统,所以在排版中文的时候考虑将编译引擎更改为
8.1.2 基本结构
我们可以开始正题了。
\documentclass 命令加载了文档类,基本上每一个
article | 不包含章的短文档 |
report | 含有章的单面印刷文档 |
book | 含有章的双面印刷文档 |
beamer | 幻灯片 |
\documentclass{article} % <-- 文档类 \begin{document} % <-- 主体环境 Together for a Shared Future % <-- 正文 \end{document} % <-- 环境
而 document 环境用于指示文档主体的范围。
8.1.3 扩展
\usepackage 用于使用宏包以向
\documentclass{article} \usepackage{ctex} % <-- 导言区调用宏包 \begin{document} 一起向未来 % <-- 空行产生段落分隔 Together for a Shared Future \end{document}
这里使用了ctex宏集以获得中文支持。其调用底层因不同的引擎而不同。
引擎 | |||
程序 | |||
宏包 | CJK | xeCJK | luatexja |
封装 | ctex |
大部分情况下,你都不应当在
8.1.4 设定格式
可以使用显式样式设定命令对小段做加粗、斜体、等宽等等的处理。
\documentclass{ctexart} \begin{document} \textbf{一起向未来} % <-- 加粗 \emph{Together for a Shared Future} % <-- 强调 \end{document}
与 Word 不同的是,
同样地,你也可以显式地设定字体大小,但是这种命令会更改行文设置,所以需要使用一个组来限定作用范围。请注意最后显式地使用 \par 在改回大小前结束该段,否则会导致下一行的行间距异常!当然,应当避免手动设定大小,以影响格式统一。
\documentclass{ctexart} \begin{document} {\bfseries\Large 一起向未来\par} % <-- 加粗 {\itshape Together for a Shared Future} % <-- 斜体 \end{document}
8.1.5 逻辑结构
接下来我们概览一下三种列表:无序列表、有序列表、描述列表。这些列表可以相互嵌套,但最多嵌套四层。
\documentclass{ctexart} \begin{document} \begin{itemize} \item 第一项 \item 第二项 \item 第三项 \end{itemize} \end{document}
\documentclass{ctexart} \begin{document} \begin{enumerate} \item 第一项 \item 第二项 \item 第三项 \end{enumerate} \end{document}
\documentclass{ctexart} \begin{document} \begin{description} \item[第一] 文本 \item[第二] 文本 \item[第三] 文本 \end{description} \end{document}
\documentclass{ctexart} \begin{document} \section{概念} % <-- 节 \subsection{\LaTeX{}} % <-- 小节 \LaTeX{} 是一个用以排版高质量作品的文档准备系统。 \end{document}
命令 | 含义 | 层次 |
\chapter | 章 | |
\section | 节 | 1 |
\subsection | 小节 | 2 |
\subsubsection | 小小节 | 3 |
章这一级只在 report 和 book 文档类(包括对应的中文文档类)有定义。还有不常用的 \part (0@article/-1@report&book&beamer) 以及更低层次的 \paragraph (4) 与 \subparagraph (5)。
而知道层次,对我们下面生成目录有帮助。
\tableofcontents 用来生成对于目次命令的目录。如果你想设定显示到哪个层级,在这个命令前使用 \setcounter{tocdepth}{层次} 如果你想在目录中使用更短的标题,使用方括号标识这一点: \section[短标题]{长标题}。 如果你想让本目次的标题不显示在目录中,在命令后加上星号: \section*{目录没这个标题}。
\documentclass{ctexrep} \includeonly{learnlatex,sjtuthesis} % <-- 此处指定要排印哪些内容 \begin{document} \tableofcontents % <-- 目录 \include{learnlatex} % <-- 插入文档 \include{sjtuthesis} % <-- 插入文档 \end{document}
对于大型文档而言,使用多个文件管理源文件通常是更方便的。而 \include 和 \input 都以相对路径的方式插入其他
但是 \include 插入的文档可以使用 \includeonly 管理当前要排印哪一部分的内容,利用所有章节辅助文件的同时,减少编译时间并专注于该部分的内容。
请注意子文件中就不需要添加 document 环境了。之前提到的编辑器大部分具有识别魔术命令的能力,可以在文档开头使用 % ! TeX root = main.tex。
8.1.6 图
\documentclass{ctexart} \usepackage{graphicx} \graphicspath{{figs/}{pics/}} \begin{document} \begin{figure}[ht] \centering \includegraphics[width=\textwidth]{sjtug} \caption{SJTUG 徽标}\label{fig:sjtug} \end{figure} \end{document}
为了插入外部图片,需要使用 graphicx 宏包。之后在文档主体便可以使用 \includegraphics 插入图片。导言区也可以加入 \graphicspath 指定图片文件夹。
\includegraphics 命令便以相对路径的方式插入图片,如果无同名图片,那么后缀名可以省略。可以使用可选参数指定插入的图片尺寸,最佳实践是使用 \textwidth 或 \linewidth 的相对值指定尺寸大小,以在未来可能的布局更改中保留一定的灵活性,比如我未来想变更为幻灯片的时候。
关于\includegraphics,你也可以通过键值对的方法设置图片的其他属性。更多的信息参见宏包对应的文档。事实上,
width | 宽度 |
height | 高度 |
scale | 缩放 |
angle | 角度 |
我们可以看到,figure 为一个浮动体环境(table 也是),可以将其移动到其他位置上以减少行文中的空白。可以添加可选参数以指定如何放置浮动体,最多可以使用四种位置描述符:
h | Here | 尽可能在这里 |
t | Top | 页面顶部 |
b | Bottom | 页面底部 |
p | Page | 浮动体专页 |
H | Here | 强制在此处* |
采用 \centering 命令而不是 center 环境来水平居中图片。这将避免多余的纵向间距。使用 \caption 命令输入题注,如果这个命令写在插入图片前面,题注将会在上方(中文中一般对 table 环境这么做)。后面将会看到如何对留有标记(\label)的图片进行引用。
\documentclass{ctexart} \usepackage{graphicx} \graphicspath{{figs/}{pics/}} \begin{document} \begin{figure}[ht] \begin{minipage}{0.48\textwidth} \centering \includegraphics[height=2cm]{sjtug} \caption{SJTUG 徽标}\label{fig:sjtug} \end{minipage}\hfill \begin{minipage}{0.48\textwidth} \centering \includegraphics[height=2cm]{sjtugt} \caption{SJTUG 文字}\label{fig:sjtugt} \end{minipage} \end{figure} \end{document}
并排排版两张图片的最简单方法就是在figure环境里添加两个minipage,这样两张图片的编号就会在同一个层级。
subcaption 宏包提供了 subfigure 环境(以及 subtable),可以用于以子图的形式插入,编号会向下增加一级。也可以为子图添加子级引用编号。
\documentclass{ctexart} \usepackage{graphicx} \usepackage{subcaption} \graphicspath{{figs/}{pics/}} \begin{document} \begin{figure}[ht] \begin{subfigure}{0.48\textwidth} \centering \includegraphics[height=2cm]{sjtug} \caption{徽标} \end{subfigure}\hfill \begin{subfigure}{0.48\textwidth} \centering \includegraphics[height=2cm]{sjtugt} \caption{文字} \end{subfigure} \caption{SJTUG}\label{fig:sjtug} \end{figure} \end{document}
8.1.7 表
使用 tabular 环境绘制表格。需要添加参数(称为表格导言)以确定每一列的对齐方式。一般都需要引入 array 宏包来使用更多的引导符。
\documentclass{ctexart} \usepackage{array} \usepackage{booktabs} \begin{document} \begin{table}[ht] \centering \caption{北京冬奥会吉祥物}\label{tab:mascot} \begin{tabular}{lp{3cm}} \toprule \multicolumn{1}{c}{吉祥物} & \multicolumn{1}{c}{描述} \\ \midrule 冰墩墩 & 2022 年北京冬季奥运会吉祥物 \\ 雪容融 & 2022 年北京冬季残奥会吉祥物 \\ \bottomrule \end{tabular} \end{table} \end{document}
l | 向左对齐 |
c | 居中对齐 |
r | 向右对齐 |
p{3cm} | 固定列宽,两端对齐 |
m{3cm} | p + 垂直居中对齐 |
>{\bfseries} | 后一列单元格前加命令 |
*{3}{l} | 三个左对齐列 |
booktabs 宏包提供了标准三线表格所需要的行分割线:\toprule,\midrule,\bottomrule。也可以使用\cmidrule{1-2}来部分地绘制行分割线。一般不推荐在专业表格中使用纵向分割线。这里每行内容就要使用双斜线分隔开,每行中的单元格使用&分隔开。
\multicolumn命令不仅可以用于合并同行的单元格,还可以用于临时地屏蔽表格导言对该列的对齐方式定义。这里用于居中表头。
\multicolumn{格数}{对齐方式}{内容}跨页表格考虑使用longtable宏包。带标注的表格可以考虑使用threeparttable宏包。考虑使用在线工具生成表格代码。复杂的使用方法在 SJTUThesis 使用文档中都有提及。
8.1.8 数学公式
输入数学公式是
为了更好的获得数学公式输入支持,请使用 amsmath 宏包。数学模式分为两种:
- 行内模式,一般通过一对美元符号($...$)标记,可以使用编辑器内建的符号表输入数学符号,也可以使用在线工具手写识别。
- 行间模式,一般通过 equation 环境输入,加星号用于无编号的公式环境。如果需要使用多行公式,请使用 align 环境,并按照类似表格输入的方式,使用 & 对齐符号,双斜线换行。如果不想手动居中,可以考虑多行自动居中的gather和单个大型公式首尾两端对齐multline。
关于表格和数学公式,如果不太熟悉如何输入,或者符号表记不住,推荐从比较容易上手的编辑器起步,比如
关于如果
8.1.9 引用
正如之前所提到的,
Word 实现这种功能需要借助其他功能,感兴趣的可以接着听该专题讲座的后续内容。
而让
- bibtex 是标准的工作流程,一般期刊提交这种方法。中文引用可以使用 gbt7714宏包,但是角模式与正文模式不可混用。
- biblatex 是更容易定制化的一种方案。中文引用可以使用gb7714-2015biblatex样式,但需要使用
编译。
8.2 SJTUThesis
SJTUThesis 最早是由一位物理系同学制作,采用了当时流行的 CJK 方案。韦建文学长于 2009 年 11 月发布 0.1a 版,移植到
让我们来讨论 the elephant in the room:为什么用
Markdown 很好啊,方便的语法,一般技术文档也常用。但就是因为它太简单了,没有内置样式控制,一般需要借助 HTML,CSS 那一套东西。也会有一些人尝试通过 R Markdown(Bookdown)改·进,以及可以通过 MathJax 渲染
Word 很好啊,官方钦定的论文写作方法,可见即可得,但是进阶排版仍然可以困难。就拿排版公式来说,大家以前初高中学的、或者是计算机二级考的 Word 2003 要排版公式,一种是装 MathType 插件,版本间不兼容、一种是搞个域代码+替换字体。Word 2007 之后添加了插入正经的 Unicode 公式功能,但默认的 Calibri Math 字体以及符号布局仍然赶不上
设计相关专业的同学可能更喜欢 Adobe Indesign,对图文混排更为擅长。但是它也足够复杂,虽然提供了几乎所有的排版用具,但是我还没见过用它排版几十页充满公式的论文的(或许有人会开先河?)。以及传说它用了
学习 SJTUThesis 的相关接口,请参见开发文档。
问:与 Word 的参考实现略有不同
答:毕设论文的格式只要不违背《上海交通大学关于本科生毕业设计(论文)工作的指导意见》、《上海交通大学博士、硕士学位论文撰写指南》 即可,其他细节上的修改可以先搜索解决方案,再反馈给我们。
问:我需要转为 Word 文档
答:你需要在写论文前仔细查看每个学院的要求,如果需要 Word 提交,你应该果断转向使用 Word 写,否则:当你考虑直接将 PDF 转为 Word 时,这是个逆向工程,失去了 Word 的相关辅助编码,转换失败概率大幅上升。如果是为了查重目的,不支持 PDF 的话,也可以考虑 TXT 纯文本格式。从
8.3 更进一步
插图指南EB/OL. 第三版. 2017. 链接.这本书主要讲了一些插图的排版技巧,但是有些资料优点陈旧,但仍不妨碍其成为一本很好的图文混排教材。 NotesEB/OL. 第二版. 2021. 链接.这本书很像后面的 and Friends 很像。 入门M. 北京:电子工业出版社, 2013.这本书老经典了,就是还会讲 套装,但仍然是中国很好的百科全书。该书作者谈到 套装退役的时候,说到它已经完成了它的使命。- Learn
in 30 minutesEB/OL. 链接.官方教程,经典。 and FriendsM/OL. New York: Springer, 2012. 链接
.
- The
CompanionM. 2nd ed. [S. I.]: Addison-Wesley Professional. 2004. 该书 1k 多页,8 月会有第三版。( 报错的时候会提到这本书。)
以上内容一般可以通过链接(借助图书馆的文献库)获得全文,或者在图书馆可以借到,实际上,当你真正拿到一本使用
我相信你都看到这儿了,或许会对如何使用