1. 从一份实验报告说起:为什么科技论文排版值得单独练
如果你正在读理工科,大概率逃不过一门叫“Linux实验”的课。很多人以为这门课就是敲敲命令行、装装软件,结果实验二突然甩过来一个任务:用LaTeX排版一篇科技论文。第一次听到“LaTeX”这个词的时候,我脑子里全是问号——Word用得好好的,为什么要折腾一个像写代码一样的东西?
后来真正上手才发现,这玩意儿在科技论文排版领域基本是“降维打击”。你想想,一篇正经的学术论文里有什么:数学公式、参考文献、交叉引用、图表编号、目录、页眉页脚、多级标题。这些东西在Word里手动维护,改一个章节标题,后面所有编号全乱;插一篇新参考文献,全文引用序号得从头对一遍。而LaTeX的思路完全不同——你只管写内容,格式和编号它自动帮你算。
这个实验的核心价值不在于“学会一个软件”,而在于理解一种内容与格式分离的排版哲学。你写的是一个纯文本源文件,里面用命令标记“这是标题”“这是公式”“这里引用文献”,编译之后自动生成排版精美的PDF。改内容不影响格式,改格式不影响内容,这在写长篇论文的时候简直是救命稻草。
这篇文章适合两类人看:一类是正在做这个实验、被LaTeX搞得头大的同学,我会把整个流程拆开揉碎讲清楚;另一类是想系统入门LaTeX排版、以后写毕业论文或投稿用的朋友,这里面的思路和踩坑经验同样适用。不管你现在基础如何,跟着走一遍,至少能做到“知道每一步在干什么、为什么这么干”。
2. 实验整体设计与思路拆解
2.1 为什么科技论文排版偏偏选中了LaTeX
先聊一个根本问题:科技论文排版的需求到底是什么?跟普通文章不一样,科技论文有几个硬性特征。第一,公式多且复杂,矩阵、积分、分段函数、多行对齐,Word的公式编辑器虽然能用,但一多就卡,而且行距和编号经常对不齐。第二,参考文献密集,一篇论文几十篇引用是常态,手动编号几乎不可能维护。第三,格式规范严格,期刊或学校对页边距、字体、行距、标题层级都有明确要求,差一点都不行。
LaTeX恰好在这三件事上都是强项。公式方面,它本身就是为排版数学内容而生的,amsmath宏包提供的对齐、编号、多行公式环境,用起来非常顺手。参考文献方面,配合BibTeX或BibLaTeX,你只需要维护一个.bib数据库文件,引用格式自动生成,换一种期刊格式只需要改一行样式命令。格式规范方面,模板文件把格式全部封装好了,你只管往里填内容。
注意:很多人一开始会纠结“学LaTeX值不值”,我的建议是——如果你只是写一篇两页的课程报告,Word确实更快。但只要篇幅超过十页、公式超过二十个、参考文献超过十篇,LaTeX的效率优势就会指数级放大。
2.2 实验任务的拆解逻辑
这个实验通常不会让你从零搭一个模板,而是给你一个基本的框架,让你完成一篇模拟科技论文的排版。拆解下来大概是这么几个模块:
- 文档基础结构:文档类选择、宏包引入、中文支持配置
- 标题与摘要:标题、作者、摘要、关键词的排版
- 正文多级标题:section、subsection、subsubsection的层级管理
- 数学公式:行内公式、行间公式、多行对齐公式、定理环境
- 图表排版:图片插入、表格制作、浮动体位置控制、题注格式
- 参考文献:BibTeX数据库编写与引用
- 交叉引用:公式、图、表、章节的自动编号与引用
- 编译与调试:理解编译流程,处理常见报错
每个模块单独看都不难,难的是把它们串起来、让整篇文档协调一致。这也是为什么我建议按顺序做,不要跳步。
2.3 工具链的选择与考量
在Linux环境下做LaTeX排版,工具链的选择其实挺多的。最核心的是TeX发行版,常见的有TeX Live和MiKTeX。在Linux上基本都用TeX Live,因为它跨平台、宏包全、更新方便。安装方式上,可以用系统包管理器装,也可以下载官方安装脚本。系统包管理器装的版本可能偏旧,但对课程实验来说完全够用。
编辑器方面,选择就更多了。命令行的有vim、emacs配合插件,图形界面的有TeXstudio、Kile、GNOME LaTeX等。如果你刚开始学,我建议用TeXstudio,它有语法高亮、自动补全、一键编译、错误定位,对新手非常友好。如果你已经习惯了vim或VS Code,装个LaTeX Workshop插件也能获得很好的体验。
编译引擎方面,中文排版推荐用XeLaTeX,因为它对系统字体的支持最好,配置中文最省心。传统的pdfLaTeX处理中文需要额外配置,容易出问题。LuaLaTeX也可以,但编译速度稍慢。课程实验里用XeLaTeX基本能覆盖所有需求。
提示:不管你选哪个编辑器,最终编译命令都是调用的TeX引擎。理解这一点很重要——编辑器只是帮你写代码的工具,真正干活的是背后的编译引擎。
3. 核心细节解析与实操要点
3.1 文档类与中文环境配置
文档类是LaTeX文档的“骨架”,它决定了文档的基本版式和可用命令。科技论文最常用的是article类,如果是学位论文可能会用report或book类。对于中文科技论文,我推荐用ctexart文档类,它是ctex宏包提供的,专门为中文排版优化过。
\documentclass[12pt, a4paper]{ctexart}这行代码的意思是:使用ctexart文档类,正文字号12磅,纸张A4。ctexart会自动处理中文断行、标点压缩、字体配置等问题,省去了手动配置的麻烦。如果你用的是标准article类,就需要额外引入ctex宏包:
\documentclass[12pt, a4paper]{article} \usepackage[UTF8]{ctex}两种方式效果差不多,但ctexart更省事。需要注意的是,使用ctex系列一定要用XeLaTeX或LuaLaTeX编译,用pdfLaTeX会报错。
宏包引入是另一个关键环节。科技论文排版常用的宏包包括:
| 宏包名 | 用途 | 是否必须 |
|---|---|---|
amsmath | 数学公式增强 | 必须 |
amssymb | 数学符号补充 | 必须 |
graphicx | 图片插入 | 必须 |
booktabs | 三线表 | 推荐 |
geometry | 页边距设置 | 推荐 |
hyperref | 超链接与书签 | 推荐 |
caption | 题注格式定制 | 可选 |
listings | 代码高亮 | 可选 |
宏包不是越多越好,每个宏包都可能引入冲突。我的经验是:先引入必须的,遇到需求再逐个添加,每加一个就编译一次,确认没问题再加下一个。
3.2 标题、摘要与关键词的排版
科技论文的开头部分有固定套路:标题、作者、摘要、关键词。在LaTeX里,这些都有对应的命令:
\title{基于深度学习的图像超分辨率重建方法研究} \author{张三 \\ 某大学计算机学院} \date{\today} \maketitle \begin{abstract} 本文提出了一种基于深度学习的图像超分辨率重建方法…… \end{abstract} \keywords{深度学习,图像超分辨率,卷积神经网络}\maketitle命令会根据文档类自动排版标题区域。abstract环境生成摘要,\keywords命令生成关键词。需要注意的是,不同文档类对摘要的处理方式不同,ctexart默认会把摘要居中排版,如果你想要两端对齐,可能需要用abstract宏包调整。
作者信息里,\\表示换行,可以用来分隔作者和单位。如果有多位作者,可以用\and命令分隔。日期用\today自动生成当天日期,也可以手动写死。
实操心得:摘要部分不要写太长,一般200-300字足够。关键词3-5个,用逗号分隔。这些细节虽然小,但审稿人第一眼看的就是标题和摘要,排版整齐与否直接影响印象分。
3.3 多级标题与交叉引用的配合
LaTeX的标题层级非常清晰:\section、\subsection、\subsubsection,分别对应一级、二级、三级标题。编号自动生成,不需要手动维护。
\section{引言} \label{sec:intro} \subsection{研究背景} \label{sec:background} \subsubsection{国内研究现状} \label{sec:domestic}\label命令给标题打上标签,方便后面用\ref引用。比如“如\ref{sec:intro}所述”,编译后会变成“如第1节所述”,编号自动更新。这个机制在写长篇文档时特别有用——你调整章节顺序,所有引用自动跟着变。
交叉引用的完整体系包括:
\label{key}:定义标签\ref{key}:引用编号\pageref{key}:引用页码\eqref{key}:引用公式编号(需要amsmath宏包)
标签命名建议用“类型:描述”的格式,比如sec:intro、fig:result、tab:data、eq:loss。这样一看就知道是什么类型的标签,避免混乱。
注意:
\label必须放在\caption或\section之后,否则引用会出错。这是新手最常踩的坑之一。
3.4 数学公式的排版要点
数学公式是科技论文的灵魂,也是LaTeX最强大的地方。公式分两种:行内公式和行间公式。
行内公式用$...$包裹,比如$E=mc^2$,会嵌在文字中间。行间公式用equation环境:
\begin{equation} \label{eq:loss} L = \frac{1}{N}\sum_{i=1}^{N}(y_i - \hat{y}_i)^2 \end{equation}多行公式用align环境,可以对齐等号:
\begin{align} \label{eq:multi} f(x) &= x^2 + 2x + 1 \\ &= (x+1)^2 \end{align}&是对齐点,\\是换行。如果不想让某一行编号,在行末加\notag。
矩阵用pmatrix、bmatrix等环境:
\begin{equation} \mathbf{A} = \begin{bmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{bmatrix} \end{equation}分段函数用cases环境:
\begin{equation} f(x) = \begin{cases} x^2, & x \geq 0 \\ -x^2, & x < 0 \end{cases} \end{equation}实操心得:公式里的文本要用
\text{}包裹,否则会变成斜体。比如\text{其中}。另外,公式中的空格在LaTeX里会被忽略,需要手动加\,、\quad等间距命令。
3.5 图表排版与浮动体控制
图片插入用graphicx宏包的\includegraphics命令,通常放在figure环境里:
\begin{figure}[htbp] \centering \includegraphics[width=0.8\textwidth]{result.png} \caption{实验结果对比图} \label{fig:result} \end{figure}[htbp]是位置参数,告诉LaTeX把图放在这里(h)、顶部(t)、底部(b)或单独一页(p)。LaTeX会自动选择最合适的位置,这就是“浮动体”的概念。
表格用tabular环境,配合booktabs宏包做三线表:
\begin{table}[htbp] \centering \caption{实验参数设置} \label{tab:params} \begin{tabular}{lcc} \toprule 参数 & 取值 & 说明 \\ \midrule 学习率 & 0.001 & 初始学习率 \\ 批次大小 & 32 & 训练批次 \\ 迭代次数 & 100 & 总迭代轮数 \\ \bottomrule \end{tabular} \end{table}lcc表示三列分别是左对齐、居中、居中。\toprule、\midrule、\bottomrule是三线表的三条线,比默认的\hline好看得多。
注意:浮动体的位置有时候不听使唤,图会跑到很奇怪的地方。这时候可以调整位置参数,或者用
\usepackage{float}宏包配合[H]参数强制固定位置。但强制固定可能导致页面留白过多,需要权衡。
4. 实操过程与核心环节实现
4.1 环境搭建与第一个文档
在Linux上搭建LaTeX环境,第一步是安装TeX Live。以Ubuntu/Debian为例:
sudo apt update sudo apt install texlive-fulltexlive-full包含了几乎所有宏包,体积比较大(几个GB),但省去了后续缺宏包的麻烦。如果磁盘空间紧张,可以装texlive-latex-extra和texlive-lang-chinese等基础包,缺什么再补。
安装完成后,验证一下:
xelatex --version能看到版本信息就说明装好了。然后创建第一个测试文档test.tex:
\documentclass[12pt, a4paper]{ctexart} \usepackage{amsmath, amssymb, graphicx} \title{测试文档} \author{某同学} \date{\today} \begin{document} \maketitle \section{引言} 这是一个测试文档。行内公式:$E = mc^2$。 \begin{equation} \label{eq:test} \int_{0}^{1} x^2 \, dx = \frac{1}{3} \end{equation} 如公式\eqref{eq:test}所示…… \end{document}编译命令:
xelatex test.tex如果一切正常,会生成test.pdf。用PDF阅读器打开看看效果。
实操心得:第一次编译可能会提示缺少字体或宏包。缺宏包用
tlmgr install 宏包名安装。缺字体的话,检查系统是否装了中文字体,或者用ctex的fontset选项指定字体集。
4.2 完整论文框架的搭建
有了第一个文档的基础,接下来搭建完整的论文框架。我通常按这个顺序来:
- 先写文档类和宏包引入
- 写标题、作者、摘要
- 搭章节骨架,每个章节先写标题和一句话概要
- 逐个章节填充内容
- 最后处理图表和参考文献
这样做的好处是,你随时都能编译出一个结构完整的PDF,不会写到一半发现结构有问题。
一个典型的论文框架:
\documentclass[12pt, a4paper]{ctexart} \usepackage{amsmath, amssymb} \usepackage{graphicx} \usepackage{booktabs} \usepackage{geometry} \usepackage{hyperref} \geometry{left=2.5cm, right=2.5cm, top=2.5cm, bottom=2.5cm} \title{基于卷积神经网络的图像分类方法研究} \author{某同学 \\ 某大学某学院} \date{\today} \begin{document} \maketitle \begin{abstract} 本文研究了基于卷积神经网络的图像分类方法…… \end{abstract} \keywords{卷积神经网络,图像分类,深度学习} \section{引言} \label{sec:intro} …… \section{相关工作} \label{sec:related} …… \section{方法} \label{sec:method} …… \section{实验} \label{sec:experiment} …… \section{结论} \label{sec:conclusion} …… \bibliographystyle{plain} \bibliography{refs} \end{document}\geometry命令设置页边距,上下左右各2.5厘米。\bibliographystyle指定参考文献样式,\bibliography指定.bib数据库文件名。
4.3 参考文献的BibTeX管理
参考文献是科技论文排版的重头戏。手动写参考文献列表不仅累,而且容易出错。BibTeX的思路是:你维护一个.bib文件,里面每条文献有唯一的key,正文里用\cite{key}引用,编译时自动生成参考文献列表。
.bib文件的格式:
@article{zhang2023cnn, author = {张三 and 李四}, title = {基于卷积神经网络的图像分类}, journal = {计算机学报}, year = {2023}, volume = {46}, number = {3}, pages = {123--135} } @inproceedings{wang2022deep, author = {王五 and 赵六}, title = {深度学习在图像处理中的应用}, booktitle = {全国图像处理学术会议}, year = {2022}, pages = {45--52} }正文里引用:
近年来,卷积神经网络在图像分类领域取得了显著进展\cite{zhang2023cnn}。编译流程需要四步:
xelatex main.tex bibtex main xelatex main.tex xelatex main.tex第一次xelatex生成.aux文件,bibtex读取.aux和.bib生成.bbl文件,第二次xelatex把参考文献列表插进去,第三次xelatex确保所有引用编号正确。少一步都可能导致引用显示为[?]。
注意:如果用了
hyperref宏包,编译顺序可能需要调整。另外,中文参考文献的排序和格式可能需要用gbt7714宏包来符合国内标准。
4.4 编译流程与错误排查
LaTeX的编译流程是新手最容易懵的地方。简单说,一次完整的编译可能需要跑多次引擎,因为交叉引用和参考文献需要多轮才能稳定。
标准流程:
xelatex main.tex— 生成.aux等辅助文件bibtex main— 处理参考文献(如果有)xelatex main.tex— 插入参考文献和交叉引用xelatex main.tex— 确保所有编号稳定
如果不用BibTeX,只需要跑两次xelatex。判断是否需要再跑一次的方法:看编译日志里有没有“Rerun to get cross-references right”的提示。
常见错误和解决方法:
| 错误信息 | 原因 | 解决方法 |
|---|---|---|
Undefined control sequence | 用了未定义的命令 | 检查宏包是否引入,命令拼写是否正确 |
Missing $ inserted | 数学符号没放在公式环境里 | 检查是否漏了$或公式环境 |
File not found | 图片或bib文件路径不对 | 检查文件名和路径,注意大小写 |
Citation undefined | 引用key在bib里找不到 | 检查key拼写,确认bib文件被正确引用 |
Too many unprocessed floats | 浮动体太多 | 调整位置参数,或手动清理 |
实操心得:编译报错不要慌,从第一个错误开始看。后面的错误往往是第一个错误引发的连锁反应。另外,
.log文件里有详细信息,善用搜索。
5. 常见问题与排查技巧实录
5.1 中文排版的那些坑
中文LaTeX排版有几个经典问题。第一个是字体问题,ctex默认会根据系统自动选择字体,但不同Linux发行版的字体配置不一样,可能导致编译出来的PDF字体不对。解决办法是在文档类选项里显式指定字体集:
\documentclass[12pt, a4paper, fontset=fandol]{ctexart}fandol是TeX Live自带的中文字体集,不依赖系统字体,比较稳妥。其他选项还有windows、mac、ubuntu等,根据你的系统选。
第二个问题是中文断行。LaTeX默认的断行算法对中文支持一般,可能出现标点出现在行首的情况。ctex宏包已经做了优化,但如果你用的是标准article类加ctex宏包,可能需要额外配置。一般来说,用ctexart文档类就能避免大部分问题。
第三个问题是中英文混排的间距。LaTeX会自动在中英文之间加一点间距,但有时候加得太多或太少。可以用\xeCJKsetup命令微调,但课程实验里一般不需要这么细。
5.2 公式编号与引用的常见故障
公式编号最常遇到的问题是想引用但引用不到。原因通常是\label放的位置不对。正确的做法是把\label放在公式环境内部,紧跟在\begin{equation}之后:
\begin{equation} \label{eq:correct} E = mc^2 \end{equation}如果放在\end{equation}之后,引用会出错。另外,如果公式不想编号,用equation*环境(需要amsmath),或者用\[...\]。
多行公式的编号也有讲究。align环境默认每行都编号,如果只想给整体一个编号,用aligned环境嵌套在equation里:
\begin{equation} \label{eq:aligned} \begin{aligned} f(x) &= x^2 + 2x + 1 \\ &= (x+1)^2 \end{aligned} \end{equation}这样整个公式块只有一个编号,引用起来更方便。
5.3 图片插入的路径与格式问题
图片插入最常见的错误是“File not found”。LaTeX找图片的路径是相对于主.tex文件的,或者你在\graphicspath里指定的路径。建议把图片放在单独的子目录里,然后:
\graphicspath{{figures/}}这样\includegraphics{result.png}就会去figures/目录下找。
图片格式方面,XeLaTeX支持PNG、JPG、PDF等格式。EPS格式需要额外处理,不建议在XeLaTeX里用。如果图片是矢量图,推荐用PDF格式,放大不失真。
图片大小控制用width和height参数:
\includegraphics[width=0.8\textwidth]{result.png}0.8\textwidth表示图片宽度是正文宽度的80%。也可以指定绝对尺寸,比如width=10cm。建议用相对尺寸,这样换纸张大小时图片会自动缩放。
实操心得:图片分辨率要足够,一般300dpi以上。如果图片太大导致PDF文件过大,可以用
\includegraphics[width=0.8\textwidth, interpolate]{...}让LaTeX在缩放时插值,改善显示效果。
5.4 表格排版的美化技巧
默认的tabular环境出来的表格线条太多,不好看。用booktabs宏包的三线表是学术论文的标准做法。除了\toprule、\midrule、\bottomrule,还有\cmidrule可以画部分横线。
表格列宽不够导致文字换行很难看,可以用p{宽度}指定列宽:
\begin{tabular}{l p{6cm} c}p{6cm}表示该列宽度固定为6厘米,文字会自动换行。如果表格太宽超出页面,可以用\resizebox缩放:
\resizebox{\textwidth}{!}{ \begin{tabular}{...} ... \end{tabular} }但缩放会导致字体大小不一致,慎用。更好的办法是调整列宽或减少列数。
5.5 编译速度优化与调试技巧
LaTeX编译大文档时可能比较慢。几个优化技巧:
- 用
\includeonly{chapter1}只编译需要的章节 - 把不常改的部分做成单独的
.tex文件,用\input引入 - 用
draft选项让图片显示为方框,加快编译 - 用
latexmk工具自动处理编译次数
调试方面,\typeout{}命令可以在编译日志里输出信息,方便追踪问题。\show命令可以显示命令的定义。如果遇到莫名其妙的错误,可以注释掉最近添加的内容,逐步定位。
提示:
latexmk -xelatex main.tex可以自动跑够编译次数,省去手动跑多次的麻烦。推荐在Makefile里配置好,一键编译。
6. 从实验到实战:排版能力的延伸
6.1 模板定制与格式规范
课程实验通常给一个基本模板,但实际写论文时,每个期刊或学校都有自己的格式要求。学会定制模板是一项重要能力。核心是理解文档类选项和宏包配置。
比如,学校要求页边距上下2.5cm、左右3cm,用geometry宏包:
\usepackage[left=3cm, right=3cm, top=2.5cm, bottom=2.5cm]{geometry}要求标题字体为黑体三号,可以用ctexset命令:
\ctexset{ section/format = \Large\bfseries, subsection/format = \large\bfseries }要求参考文献格式为GB/T 7714,用gbt7714宏包:
\usepackage{gbt7714} \bibliographystyle{gbt7714-numerical}这些配置看起来琐碎,但一旦配好,以后写论文直接套用,省时省力。
6.2 版本管理与协作
LaTeX源文件是纯文本,天然适合用Git做版本管理。每次修改提交一次,可以清楚看到改了什么。多人协作时,Git也能很好地处理合并冲突。
协作时需要注意的是,不同人可能用不同的编译引擎或宏包版本。建议在项目根目录放一个README,说明编译命令和依赖。用latexmk的话,可以写一个.latexmkrc配置文件,统一编译流程。
另外,.gitignore里要排除编译生成的中间文件:
*.aux *.log *.out *.bbl *.blg *.pdf只提交.tex、.bib和图片文件,保持仓库干净。
6.3 从LaTeX到学术写作习惯
用LaTeX写论文,最大的收获其实不是排版技能,而是写作习惯的改变。因为格式自动处理,你可以专注于内容本身。章节结构清晰,引用规范,公式整齐,这些都会反过来促进你的写作逻辑。
我个人的体会是,用LaTeX写东西,你会更愿意去调整结构、补充引用、完善公式,因为修改的成本很低。而在Word里,改一次格式可能就要花半小时,久而久之就不愿意动了。
实操心得:建议从课程论文开始就用LaTeX写,哪怕老师要求交Word,你也可以用LaTeX排好再导出PDF。积累自己的模板库和bib数据库,以后写什么都能快速上手。
6.4 常见问题速查表
最后整理一份速查表,方便遇到问题时快速定位:
| 问题现象 | 可能原因 | 快速排查 |
|---|---|---|
| 中文显示为方框 | 字体配置问题 | 换fontset选项,或用ctexart |
| 引用显示为[?] | 编译次数不够 | 再跑一次xelatex |
| 图片找不到 | 路径或文件名错误 | 检查\graphicspath和文件名大小写 |
| 公式编号不对 | \label位置错误 | 把\label放在环境内部 |
| 表格超出页面 | 列宽总和过大 | 调整列宽或用\resizebox |
| 编译卡住 | 宏包冲突或死循环 | 注释最近改动,逐步排查 |
| PDF文件过大 | 图片分辨率过高 | 压缩图片或降低分辨率 |
| 参考文献格式不对 | 样式文件不匹配 | 换\bibliographystyle |
这份速查表覆盖了大部分常见问题,但实际遇到的情况可能更复杂。关键是要学会看.log文件,里面记录了详细的编译过程,大部分错误都能从中找到线索。
我在实际使用中最大的体会是:LaTeX的学习曲线确实陡,但一旦跨过那个坎,效率提升是巨大的。刚开始可能花两小时排一篇短文,熟练之后半小时就能搞定一篇结构完整的论文。这个投入产出比,对于经常写学术内容的人来说,非常划算。