ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

LaTeX入门与论文排版实战:环境配置、中文、公式、图表与参考文献

LaTeX入门与论文排版实战:环境配置、中文、公式、图表与参考文献 第一次被LaTeX劝退是我在读研一的时候一篇三十页的课程报告导师要求公式编号必须连续、参考文献必须自动生成、图表必须能自动交叉引用。我抱着Word折腾了整整两天图一挪编号就乱公式从Mathtype复制过来行距全炸参考文献改到第十版已经不知道哪条对应哪条了。后来同门甩给我一个.tex模板说你今晚照着填内容就行。我半信半疑装了个环境结果第二天早上七点改了两个章节的文字、删了两张图、补了三条文献重新编译目录、编号、引用页码全部自动更新一个字没手动改。这就是LaTeX存在的意义。它不是一个更好看的Word而是一套把内容和格式彻底分开的排版系统。你只管写内容格式交给宏包和模板编号、目录、引用、参考文献、字体、行距这些琐事全部自动化。这篇文章是一份实打实的LaTeX入门笔记覆盖环境安装、编辑器配置、中文支持、数学公式、图片表格、参考文献、模板改造和报错排查。不管你是完全没碰过命令行的小白还是装过但一直卡在中文乱码和编译报错上的半新手都能照着复现出一篇能投稿的论文骨架。1. 从Word转到LaTeX前先把这笔账算清楚1.1 Word排版长文档到底卡在哪儿Word的问题不在于能力弱而在于它的交互模型是所见即所得WYSIWYG。你在屏幕上移动一个图片框Word必须立即重算整篇文档的分页、编号、目录页码。文档短的时候这个重算很轻一旦超过二三十页、公式上百个、图表几十张每次改动都会触发一次全局重排于是你会遇到这些经典症状图片明明拖到了目标位置切换一次视图又跳到下一页公式的行高被撑开段落间距忽大忽小手动插入的编号图3-2在删掉前面一张图之后全部错位参考文献靠手写数字改到后期完全无法维护。更深一层的问题是一致性靠人力维持。Word里三线表的线宽、字号、题注位置,都需要你一张张手动对齐。写十页时你能记住写八十页时你记不住。而学位论文和期刊投稿恰恰对格式有一堆硬性要求三级标题用几号字、行距1.5还是固定值20磅、图表题注居中还是左对齐、参考文献用哪种著录格式。这些要求一旦超过十几条人工维护的成本就指数级上升。1.2 LaTeX真正解决的是什么问题LaTeX的做法是把文档拆成两层。内容层是你写的文本、公式、图表环境格式层是文档类和宏包定义的规则。编译的时候排版引擎读一遍你的内容套上格式规则输出一份PDF。你永远不直接去调这个标题和上一个标题距离几毫米而是告诉它这是一个二级标题。这样带来几个直接好处。第一交叉引用是语义化的。你写\label{fig:arch}在正文任何位置写\ref{fig:arch}无论后面插入还是删除多少内容编号永远正确。第二参考文献自动生成。你把文献信息丢进.bib文件用一条\cite{key}引用文末按你指定的样式GB/T 7714、APA、IEEE自动排好并排序。第三公式排版质量极高。LaTeX的数学排版引擎对上下标位置、积分号大小、分式线粗细的处理是专业出版级的这是Word自带的公式编辑器至今比不了的。我个人的判断标准很简单如果你这篇文档的生命周期超过两周或者长度超过二十页或者要反复修改十几版LaTeX的投入回报就是正的。1.3 什么人不适合用LaTeX也得说句公道话。如果你的文档只有两页、没有公式、图表不超过三张、只改一遍就交那Word五分钟搞定的事你没必要花两小时配环境。另外需要大量手动调整版面位置比如做海报、做非规则排版的宣传单、或者团队协作里同事全都用Word并且要修订模式批注这种场景LaTeX会很别扭——它的修订和批注生态远不如Word成熟。还有一种情况是盲目套用别人的模板。我见过不少人从群里下载一个.tex模板直接往里塞内容结果编译报一堆错自己完全不知道错在哪因为他连文档类和宏包是干什么的都不知道。所以这篇笔记的顺序是先讲环境和最小可运行文档把能编译出PDF这件事做扎实再谈公式、图表和模板。2. 环境搭建三套方案与VSCode的配置细节2.1 TeX发行版选型TeX Live、MiKTeX还是MacTeXLaTeX本身只是一套宏真正干活的是底层的排版引擎pdfTeX、XeTeX、LuaTeX和一大堆宏包。发行版就是把这些东西打包分发。主流有三个发行版主要平台特点适合谁TeX LiveWindows / Linux / macOS宏包最全跨平台一致年度版本绝大多数人、需要中文和复杂宏包MiKTeXWindows 为主按需下载宏包安装体积小磁盘紧张、网络稳定、想快速上手MacTeXmacOS本质是TeX Live的macOS打包Mac用户装完即用我的建议是直接上TeX LiveMac用户装MacTeX。理由很实在它的宏包集合最全你后面遇到的奇葩宏包期刊模板里那些冷门依赖基本都在里面不会出现缺包编译失败还得联网装的尴尬。MiKTeX的按需下载在离线答辩、断网开会这种场景会给你添堵。TeX Live完整版下载约几个GB装完占盘六到七GB现在的硬盘完全扛得住。2.2 Windows下TeX Live的安装与镜像加速去TeX Live官网下载install-tl-windows.exe网络安装器。国内下载慢是常态这里有个关键技巧用国内的CTAN镜像。在安装器启动时点Advanced把TeX Live repository改成镜像站地址比如清华、中科大、阿里云的CTAN镜像速度能从几十KB/s跳到几MB/s。安装过程中有一个选项值得注意Install for all users还是Install for me only。家用电脑选后者就行路径不会带空格。如果你要选前者务必保证安装路径不含中文和空格——这是后面无数诡异报错的根源之一。装完之后打开命令行验证tex --version xelatex --version tlmgr --version三条命令都能正常输出说明环境OK。tlmgr是TeX Live的包管理器以后要装额外的宏包就用它tlmgr install booktabs注意tlmgr默认可能连国外源慢的话先tlmgr option repository 镜像地址换源。这个操作和上面安装时换源是同一个逻辑。2.3 macOS与Linux的安装路径macOS用户下载MacTeX.pkg直接双击安装装完在应用程序/TeX下会有一个TeX Live Utility图形界面管理宏包很省心。macOS上还要注意一点系统自带的字体和LaTeX字体是两套体系中文文档要用系统字体比如思源宋体时得用fontspec宏包按字体名调用这个后面讲中文排版时会说。Linux用户最省事直接用发行版包管理器sudo apt install texlive-fulltexlive-full体积大但一劳永逸。如果嫌大可以装texlive-latex-extra、texlive-lang-chinese、texlive-xetex这几个基本够用。2.4 VSCode LaTeX Workshop配置全流程现在最流行的组合是VSCode LaTeX Workshop插件。它的优势是编辑器体验好多光标、正则搜索、Git集成、插件能自动编译、能点击PDF跳回源码。安装步骤VSCode扩展商店搜索LaTeX Workshop安装。打开一个.tex文件插件会自动识别。默认按CtrlAltB编译CtrlAltV预览PDF。但默认配置有两个坑必须手动改。第一中文文档要用XeLaTeX编译默认可能是pdflatex中文会报错。第二默认用内置PDF预览器功能不如外部阅读器而且反向搜索从PDF跳回源码需要配置。打开VSCode的settings.jsonCtrlShiftP输入Open User Settings (JSON)加入这些配置{ latex-workshop.latex.recipes: [ { name: xelatex x2, tools: [xelatex, xelatex] }, { name: xelatex - bibtex - xelatex x2, tools: [xelatex, bibtex, xelatex, xelatex] } ], latex-workshop.latex.tools: [ { name: xelatex, command: xelatex, args: [ -synctex1, -interactionnonstopmode, -file-line-error, %DOC% ] }, { name: bibtex, command: bibtex, args: [%DOCFILE%] } ], latex-workshop.view.pdf.viewer: tab, latex-workshop.latex.autoBuild.run: onSave, latex-workshop.latex.clean.fileTypes: [ *.aux, *.bbl, *.blg, *.idx, *.ind, *.lof, *.lot, *.out, *.toc, *.fls, *.log, *.fdb_latexmk, *.synctex.gz ] }这几条配置的含义分别是定义两套编译流程纯中文文档用第一套带参考文献用第二套把-synctex1打开以支持PDF和源码双向跳转-interactionnonstopmode让编译遇到小错误继续跑避免卡在交互提问上保存时自动编译清理时删掉一堆中间文件保持目录干净。2.5 TeXStudio作为备选什么时候它会更好用TeXStudio是一个专门的LaTeX IDE内置了符号面板、命令自动补全、实时的错误定位。它比VSCode强的地方在于你不用配JSON装完就能用它有个侧边栏可以直接点符号插入对记不住\alpha、\mathbb{R}这类命令的人非常友好它的日志解析界面会直接告诉你第一处错误在哪一行。我自己的用法是两个都装。平时写正文用VSCode因为搜索和多文件导航舒服遇到编译报错反复查不出来的时候用TeXStudio打开同一个文件看一眼它的错误面板往往一眼就定位到问题。这不是替代关系是互补。2.6 在线方案与本地方案的取舍在线方案比如一些网页版LaTeX编辑器的好处是零安装、能协作、跨设备。适合临时改一段公式、和外地同学合写。但它的问题也明显编译时间受限、宏包版本受限、隐私文档不敢往上放、断网就歇菜。我的建议是本地环境必须装在线方案当备胎用。尤其是学位论文和投稿论文本地环境能保证你随时能编译、能对比历史版本、能完全掌控宏包版本。把在线方案当作出门在外应急改两行的工具就好。3. 第一个能跑的文档骨架、导言区和中文支持3.1 文档类选择与最小可编译示例LaTeX文档的第一行永远是\documentclass。它决定了整篇文档的基本版式。最常用的几个article期刊论文、短报告没有章chapter这一级。report学位论文、长篇报告有\chapter。book书籍有\part和\chapter双面排版。ctexart/ctexrep/ctexbook中文文档专用已经内置了中文支持。先看一个最小的中文文档能跑通它你就跨过了最大的那道坎\documentclass[12pt,a4paper]{ctexart} \usepackage{amsmath} \usepackage{graphicx} \usepackage{geometry} \geometry{left2.5cm,right2.5cm,top2.5cm,bottom2.5cm} \title{我的第一篇LaTeX文档} \author{张三} \date{\today} \begin{document} \maketitle \section{引言} 这是一段中文正文。行内公式写在美元符号之间比如 $E mc^2$。 \section{结论} 中文排版在 \texttt{ctexart} 文档类下可以直接使用。 \end{document}这里有几个细节值得说。[12pt,a4paper]是可选参数指定字号和纸张。geometry宏包负责页面边距学位论文里通常有硬性规定比如上下2.5cm、左3cm右2cm这个宏包能精确控制。\maketitle生成标题区内容来自导言区的\title、\author、\date。3.2 导言区到底该放什么\documentclass和\begin{document}之间的部分叫导言区preamble。它是你声明全局配置的地方通常包含这几类内容宏包加载。每个宏包解决一类问题比如graphicx管图片、booktabs管三线表、hyperref管超链接和PDF书签、amsmath管数学公式。加载顺序有讲究hyperref通常放最后加载因为它会改写很多命令。全局参数设置。比如\geometry{}设边距、\setlength{\parindent}{2em}设首行缩进、\linespread{1.5}设行距。注意\linespread{1.5}并不完全等于Word里的1.5倍行距中文论文一般用\linespread{1.5}配合\selectfont或者直接用ctex提供的\zihao、\setlength{\baselineskip}来精确控制。自定义命令。这是个提效重灾区后面单独讲。一个常见的坑是导言区塞太多东西导致宏包冲突。比如有些宏包都定义了同一个命令后加载的会覆盖前面的然后编译就报command already defined。解决办法是用\usepackage[options]{pkg}里的选项规避或者查宏包文档。遇到冲突别硬扛先把可疑宏包注释掉二分法定位。3.3 中文排版ctex宏包与XeLaTeX编译链中文支持是新手翻车最多的地方。历史上用CJK宏包、用pdflatex编译中文的年代已经过去了现在的标准做法是方案一用ctexart/ctexrep/ctexbook文档类配XeLaTeX编译。这是最推荐的方式一条命令都不用手动配。方案二用article文档类加\usepackage{ctex}宏包。适合你要用某个只支持article的期刊模板但又需要中文的情况。关键点在于编译引擎必须是XeLaTeX或者LuaLaTeX不能用pdfLaTeX。原因是XeLaTeX原生支持Unicode和系统字体处理中文最省心。在VSCode里就是前面配置的recipe在命令行里就是xelatex main.tex如果你一定要用pdfLaTeX中文会报Missing character或者干脆乱码这时候要么换引擎要么用CJKutf8不推荐麻烦且字体难看。想把中文字体换成特定的比如学位论文要求正文宋体、标题黑体可以在导言区这样写\usepackage[UTF8]{ctex} \setCJKmainfont{SimSun} \setCJKsansfont{SimHei} \setCJKmonofont{FangSong}这里的字体名必须是你系统里真实存在的字体名不是文件名。查字体名的方法Windows在字体设置里看macOS用字体册Linux用fc-list :langzh。3.4 编译流程与辅助文件.aux/.log/.toc的关系很多人第一次编译后会发现目录是空的、引用显示成??然后以为出错了。其实不是是LaTeX需要编译多次。原理是这样第一次编译时LaTeX把第3页有一个section叫引言图2在第5页这类信息写进.aux文件。第二次编译读.aux才知道目录该填什么页码、\ref该填什么数字。所以标准流程是xelatex main.tex # 第一遍生成 .aux .toc xelatex main.tex # 第二遍读入 .aux填好目录和引用带参考文献的完整流程是xelatex main.tex # 生成 .aux bibtex main # 读 .aux 里的引用从 .bib 生成 .bbl xelatex main.tex # 读 .bbl插入文献列表 xelatex main.tex # 再跑一遍修正引用编号和页码几个关键文件的作用文件作用能不能删.aux存储交叉引用、页码等信息能删但删了要重新编译两遍.log编译日志报错排查全靠它能删.toc目录内容能删.bblBibTeX生成的文献列表能删但要重跑bibtex.synctex.gz支持PDF和源码互跳能删但跳转就失效了经验不要手动去改.aux或.toc。有人为了快速修复目录直接编辑这些文件结果下一次编译又被覆盖白忙一场。目录不对就老老实实多编译一遍。4. 数学公式LaTeX最值回票价的部分4.1 行内与行间公式的切换公式分两种。行内公式嵌在文字里用$...$包起来比如设变量 $x$ 服从正态分布。它会被压缩高度避免撑开行距。行间公式单独占一行、居中显示用\[...\]或者equation环境行内写法设 $a^2 b^2 c^2$ 为一组勾股数。 行间写法 \[ a^2 b^2 c^2 \]有个新手常见的错误是用$$...$$。这是TeX的原始语法在LaTeX里虽然能用但会和amsmath的一些机制冲突比如行距调整、fleqn选项官方文档明确建议改用\[...\]。这个习惯最好一开始就养成。还有一个坑是中文和公式混排时的空格处理。$x$是变量和$x$ 是变量在源码里看着差不多但中文环境下公式后面紧跟汉字通常没问题公式后面紧跟英文单词则必须加空格否则会连成一个整体。稳妥做法是公式前后都留一个空格。4.2 amsmath带来的对齐、多行、分段函数amsmath是数学排版的必装宏包它提供了一堆环境。最常用的几个align环境用来多行公式对齐用标记对齐点用\\换行\begin{align} (ab)^2 a^2 2ab b^2 \\ a^2 b^2 2ab \end{align}align默认每行都编号。如果某一行不想编号在行末\\前加\notag如果想让某个公式不编号用align*星号版本全线不编号。cases环境做分段函数\[ f(x) \begin{cases} x^2, x \geq 0 \\ -x, x 0 \end{cases} \]split环境处理单个超长公式换行它必须嵌在equation里用这样整个公式只占一个编号\begin{equation} \begin{split} S \sum_{i1}^{n} x_i^2 \sum_{i1}^{n} y_i^2 \\ \quad 2\sum_{i1}^{n} x_i y_i \end{split} \end{equation}矩阵用pmatrix圆括号、bmatrix方括号、vmatrix竖线行列式\[ A \begin{bmatrix} a_{11} a_{12} \\ a_{21} a_{22} \end{bmatrix} \]4.3 符号速查与自定义命令数学符号是记不住的重灾区。我列几个高频的剩下的建议用符号面板或者速查表别硬背符号命令符号命令$\alpha$\alpha$\sum$\sum$\beta$\beta$\int$\int$\infty$\infty$\partial$\partial$\leq$\leq$\nabla$\nabla$\approx$\approx$\mathbb{R}$\mathbb{R}$\rightarrow$\rightarrow$\mathcal{L}$\mathcal{L}\mathbb需要amssymb宏包\mathcal需要amsfontsamssymb里包含了。真正提效的是自定义命令。比如你的论文里期望值反复出现全写成\mathbb{E}[X]很啰嗦可以在导言区定义\newcommand{\E}{\mathbb{E}} \newcommand{\Var}{\mathrm{Var}} \newcommand{\dd}{\mathrm{d}}之后正文里写\E[X]、\Var(X)、\dd x就行。这样一来公式源码短了很多二来如果哪天要改符号风格比如把\mathbb{E}改成\mathbf{E}只改导言区一行全文生效。这是LaTeX相比Word的一大优势——格式的全局一致性靠一个定义控制。还推荐一个宏包siunitx用来排版物理量和单位。\SI{9.8}{m/s^2}会自动处理数字和单位之间的间距、量纲的字体比手写9.8 m/s^2专业得多。4.4 公式编号、交叉引用与引用上一步带编号的公式必须用equation环境或者align不能用\[...\]那个不编号。给公式加标签用\label引用用\eqref或\ref\begin{equation} \label{eq:main} y \beta_0 \beta_1 x \varepsilon \end{equation} 由式 \eqref{eq:main} 可知参数 $\beta_1$ 表示斜率。注意\label必须写在\begin{equation}内部写在环境外面会引用到错误的编号。这是极高频的错误。\eqref{eq:main}输出带括号的编号(1)\ref{eq:main}输出裸数字1。论文里一般用前者。还有一个很实用但我发现很多人不知道的技巧\tag可以给公式自定义编号。比如你想在推导过程里标一个(*)\begin{equation} E mc^2 \tag{*} \end{equation}另外\numberwithin{equation}{section}可以把公式编号改成章节号.序号的形式比如2.3表示第2章第3个公式学位论文一般要求这种。这一条写在导言区\numberwithin{equation}{section}同理可以用于图表\numberwithin{figure}{section}、\numberwithin{table}{section}。5. 图表与浮动体插入图片的正确姿势5.1 graphicx与图片路径管理插图片靠graphicx宏包基本命令是\includegraphics\usepackage{graphicx} \graphicspath{{figures/}{images/}} \begin{figure}[htbp] \centering \includegraphics[width0.8\textwidth]{architecture.pdf} \caption{系统总体架构} \label{fig:arch} \end{figure}\graphicspath指定图片搜索路径省得每条\includegraphics都写全路径。width0.8\textwidth表示宽度是正文宽度的80%这个相对单位比写绝对厘米数好因为版面改了也不用重算。图片格式的选择很关键矢量图PDF、EPS线条清晰放大不糊适合流程图、架构图、数据线图。推荐优先用。位图PNG、JPG适合照片、截图。分辨率建议至少300dpi否则打印出来糊。JPG会有压缩伪影截图建议存PNG。一个常见的坑不要直接把Word或PPT里画好的图截图插进来放大就糊。正确做法是把PPT里的图形另存为PDF或者在Visio、draw.io、TikZ里画矢量图。TikZ是LaTeX内置的绘图宏包直接在文档里用代码画图字体和正文统一出版级质量但学习曲线陡建议先会用现成模板再慢慢学。经验文件名不要用中文和空格。图1.png这种文件名在某些编译链下会报错改成fig1.png。这个坑不显眼但很致命。5.2 浮动体机制为什么图片总跑到别处新手最崩溃的问题就是我明明把图写在这段文字后面编译出来图跑到下一页去了。 原因是figure是一个浮动体float。LaTeX的浮动体设计思想是图的位置要让排版引擎决定以保证页面不留大块空白。你可以用位置参数给它建议但引擎可以拒绝hhere放在当前位置。ttop放在页顶。bbottom放在页底。ppage单独放一页浮动页。!忽略引擎的美观约束。H绝对放在这里需要float宏包。[htbp]是最常用的组合意思是优先放这儿不行就页顶再不行页底还不行就单独一页。如果想要严格位置用\usepackage{float}然后\begin{figure}[H]但我不推荐滥用H因为它会造成页面大量留白排版很难看。理解浮动体的正确姿势是图片靠\label和\ref建立语义联系位置交给引擎。你写如图 \ref{fig:arch} 所示系统分为三层结构。正文里说的是如图X所示无论图最终排在哪编号和引用永远对得上。这才是LaTeX的设计意图。新手要跨过图必须在我写的那一行这个心理障碍。如果确实要控制图的位置可以调参数\renewcommand{\topfraction}{0.9} \renewcommand{\bottomfraction}{0.8} \renewcommand{\textfraction}{0.1} \renewcommand{\floatpagefraction}{0.7}这几个参数控制一页里浮动体最多占多少比例改大一点可以让图更容易排在同一页。5.3 多图并排与子图论文里经常要放并排的两张图用subcaption宏包新推荐替代老的subfig\usepackage{subcaption} \begin{figure}[htbp] \centering \begin{subfigure}[b]{0.48\textwidth} \centering \includegraphics[width\textwidth]{fig1.pdf} \caption{训练集结果} \label{fig:train} \end{subfigure} \hfill \begin{subfigure}[b]{0.48\textwidth} \centering \includegraphics[width\textwidth]{fig2.pdf} \caption{测试集结果} \label{fig:test} \end{subfigure} \caption{不同数据集上的实验结果对比} \label{fig:compare} \end{figure}两个子图各占48%宽度中间的\hfill负责撑开间距。引用的时候\ref{fig:compare}引用整组图的编号图3\ref{fig:train}引用子图编号图3a。这套机制在写对比实验的章节时非常省心。5.4 表格booktabs三线表与自动换行表格是LaTeX里最容易出问题的部分我分三块说。第一三线表。学术论文的标准表格是只有顶线、表头线、底线三条横线booktabs宏包专门做这个\usepackage{booktabs} \begin{table}[htbp] \centering \caption{不同方法的性能对比} \label{tab:perf} \begin{tabular}{lcc} \toprule 方法 准确率(\%) 耗时(s) \\ \midrule 基线方法 85.2 12.3 \\ 本文方法 91.7 9.8 \\ \bottomrule \end{tabular} \end{table}注意\toprule、\midrule、\bottomrule替代了\hline线宽有粗细层次比\hline好看得多。还有一点用booktabs时不要用竖线|三线表的规范就是没有竖线。列格式{lcc}表示第一列左对齐、后两列居中。第二列宽和自动换行。当某一列的文字很长时普通tabular不会自动换行会撑破页面。解决办法有两个。一是用p{宽度}指定列宽\begin{tabular}{p{3cm}p{5cm}}p{}列会自动换行但默认左对齐。想让它居中配合array宏包用{\centering\arraybackslash}p{5cm}。二是更推荐的tabularx宏包它能让表格总宽度自动撑满正文宽度并自动分配列宽\usepackage{tabularx} \begin{tabularx}{\textwidth}{lX} \toprule 项目 说明 \\ \midrule 方法A 这是一段很长的说明文字会自动换行而不会撑破表格边界 \\ \bottomrule \end{tabularx}X列会自动计算剩余宽度并换行\textwidth保证表格和正文同宽。这个组合基本能解决90%的表格换行问题。第三表格内的数学符号和特殊字符。、%、_、#这些在LaTeX里有特殊含义想输出原字符要加反斜杠\、\%、\_、\#。表格里出现_忘了转义是编译报错的高频原因。5.5 图表标题、编号与交叉引用\caption生成题注并自动编号\label紧跟在\caption后面这是关键反了就引用错。中文论文的题注格式要求一般是图3-1 xxx或表2-2 xxx可以在导言区定制\usepackage{caption} \captionsetup[figure]{labelsepquad, name图} \captionsetup[table]{labelsepquad, name表}labelsepquad让图3-1和标题之间空一个字宽name图把英文的Figure改成中文。如果要用图3-1这种章节-序号格式配合\numberwithin{figure}{chapter}。还有一个细节表格的题注通常放表格上方图的题注放下方这是学术出版的惯例。写的时候注意\caption的位置——table环境里\caption写在tabular之前figure环境里写在之后。6. 参考文献与论文模板的落地使用6.1 BibTeX、BibLaTeX与biber的差别参考文献有两条技术路线很多人卡在这里搞不清。路线一BibTeX。老牌方案.bib文件存文献\bibliographystyle{样式}指定样式\bibliography{文件名}引入。编译要走xelatex - bibtex - xelatex - xelatex四步。缺点是样式文件.bst用逆波兰式写想改格式非常痛苦。路线二BibLaTeX biber。新一代方案宏包叫biblatex后端程序叫biber注意不是bibtex。样式用\usepackage[stylegb7714-2015]{biblatex}指定改格式直接用LaTeX语法友好得多。编译走xelatex - biber - xelatex - xelatex。我的建议新项目优先用BibLaTeX biber尤其是中文论文需要GB/T 7714格式的时候biblatex-gb7714-2015宏包开箱即用。但如果期刊或学校给的模板已经内置了BibTeX配置就老老实实跟着模板走别自己换换了一堆兼容性问题。\usepackage[backendbiber, stylegb7714-2015]{biblatex} \addbibresource{refs.bib} % 正文中 \cite{zhang2023deep} % 文末 \printbibliography6.2 .bib文件维护与从数据库导出.bib文件的条目长这样article{zhang2023deep, author {Zhang, San and Li, Si}, title {A Deep Learning Approach for Something}, journal {IEEE Transactions on Neural Networks}, year {2023}, volume {34}, number {5}, pages {1234--1245}, doi {10.1109/TNNLS.2023.1234567} }zhang2023deep是你自己起的引用键正文里\cite{zhang2023deep}用它。引用键要唯一、有意义建议用第一作者姓年份关键词的格式方便日后查找。维护.bib的几个实操经验第一从数据库直接导出。Google Scholar、IEEE Xplore、知网、DOI官网都支持导出BibTeX格式直接复制粘贴进来省得手敲。但导出后必须检查数据库导出的条目经常有错误比如作者名被写成Zhang, S.还是Zhang, San、期刊名缩写不一致、页码用了--还是-。这些错误在编译时不会报错但会反映在最终文献列表里投稿时被审稿人发现就很尴尬。第二中文文献的author字段。BibTeX默认把张三当成一个词输出时可能变成张三或者按英文规则处理成Z. 三。用biblatex-gb7714-2015时中文条目要加language{chinese}或者在.bib里做好编码具体看宏包文档。我踩过这个坑中文文献作者显示成拼音整篇文献列表中英混杂改了半天。第三.bib文件用统一编码。建议UTF-8。有些老.bib是GBK编码混合之后中文变乱码。第四条目顺序无所谓。BibTeX会按样式自动排序按作者字母序或按引用先后你在.bib里怎么排都行。6.3 期刊/学位论文模板的获取与改造获取渠道期刊官网的Author Guidelines页面通常提供LaTeX模板学校研究生院网站提供学位论文模板CTAN上有大量通用模板开源平台上有社区维护的模板注意看更新时间太老的模板可能不兼容新版TeX Live。改造模板的几条铁律第一先原样编译一遍。拿到模板别急着改内容先原样xelatex跑一遍确认它能编译出PDF。这一步能筛掉80%的模板本身有问题的情况。如果原样都编译不过要么是缺少宏包tlmgr install补上要么是引擎用错了换成XeLaTeX试试。第二只改导言区别动文档类。模板的.cls或.sty文件定义了所有格式规则不要随便改。要改字号、边距、字体优先在导言区用宏包命令覆盖。第三搞清楚模板的编译流程。有些模板要求特定的编译顺序比如必须先跑bibtex再跑xelatex两遍有些模板自带Makefile或者latexmk配置。看模板附带的README一般会写清楚。第四内容填空时用\input拆文件。学位论文几十上百页全写在一个.tex里会卡。标准做法是主文件只放导言区和章节引用\begin{document} \include{chapters/ch1_intro} \include{chapters/ch2_related} \include{chapters/ch3_method} \include{chapters/ch4_experiment} \include{chapters/ch5_conclusion} \end{document}\include会自动在每章开头分页\input不会。写学位论文用\include更合适。6.4 数学建模模板的注意点数学建模竞赛的论文模板比较特殊几点经验排版规则极严。一般规定了页码位置、页边距、摘要页格式、正文字体字号。拿到模板后逐条核对格式要求别想当然。摘要页通常单独处理可能是独立的abstract环境或者自定义命令要看模板怎么定义。公式多、表格多、图多这是建模论文的特点。建议提前把常用符号命令定义好把图统一放figures/目录把数据表用tabularx统一宽度避免临到交稿前一天还在调表格。时间紧优先保证能编译。竞赛时间就几天别用太冷门的宏包。用模板自带的功能就行别自己加一堆花哨的宏包一旦编译不过排查要命。保留一个干净可编译版本。每完成一个阶段就备份一份能编译的状态防止后面改崩了回不去。用Git或者直接复制文件夹都可以。7. 报错排查与效率技巧7.1 从.log文件里找第一处错误LaTeX的报错机制有个特点第一处错误往往才是真错误后面的错误大多是连锁反应。比如你忘了一个\end{figure}编译器会一直读到文件末尾才发现不对然后报出一堆环境未闭合文件意外结束的错误全是假的。所以排查第一步是找第一处错误。VSCode的LaTeX Workshop会在Problems面板列出错误但更可靠的是直接看.log文件。搜索关键词!感叹号加空格是LaTeX的错误标记。! Undefined control sequence未定义命令。! Missing $ inserted数学模式问题。! LaTeX Error: File xxx.sty not found缺宏包。命令行编译时看输出的最后几十行错误提示里会给出行号。7.2 常见报错对照表我把新手最常撞的十几个错误整理成表遇到先对照查报错信息常见原因解决办法Undefined control sequence命令拼错或宏包没加载检查拼写检查\usepackageMissing $ inserted数学符号写在了文本模式用$...$包起来File xxx.sty not found缺宏包tlmgr install xxxMissing number, treated as zero参数写错或\\用在了不该用的地方检查tabular/array的\\Runaway argument?括号或环境不匹配检查{}和\begin/\end配对Package inputenc Error编码问题换XeLaTeX编译源码存UTF-8Emergency stop严重错误导致中止往上找第一条真错误Overfull \hbox内容超出页宽警告非错误检查长公式、长URL可忽略小的Underfull \hbox行内间距过大警告非错误一般可忽略Citation xxx undefined引用键在.bib里不存在或没跑bibtex检查.bib重跑完整编译链Reference xxx undefined需要再编译一遍多编译一次There were undefined references同上再编译一次这里要强调一个心态问题Overfull \hbox和Underfull \hbox是警告不是错误。编译照样出PDF只是某一行稍微超宽或间距不美。千万别为了消掉这几百条警告折腾一整天它们不影响论文录用。真正要处理的是那些带!的错误。7.3 版本管理与GitLaTeX源码是纯文本天生适合版本管理。几万字的长文档改到第十版想回到第五版的某个公式Git一行命令搞定。.gitignore里排除编译产物# LaTeX 编译产物 *.aux *.log *.toc *.out *.bbl *.blg *.synctex.gz *.fls *.fdb_latexmk只提交.tex、.bib、.cls、.sty、图片和PDF。这样仓库干净改动的diff也清晰。如果不想用命令行Git图形化客户端或者编辑器内置的Git面板都行。关键是养成习惯每天写完commit一次写崩之前先commit。我在写毕设的时候有一天重构了一整个章节的公式结果越改越乱靠git checkout一键回到前一天晚上的状态省了一整天的返工。7.4 效率工具与编辑器技巧编辑器快捷键。VSCode里Ctrl/注释CtrlD多选同一个词批量改CtrlAlt下箭头多光标列编辑——改一堆同构的表格行时特别快。LaTeX Workshop的CtrlAltB编译、CtrlAltV预览、CtrlAltJ跳转到PDF对应位置。代码片段Snippet。把常用的环境定义成片段输入fig加Tab自动展开成完整的figure环境骨架。VSCode可以在设置里自定义snippetLaTeX Workshop也内置了一批常用片段。符号速查工具。浏览器里有个叫Detexify的工具你手绘一个符号它告诉你对应的LaTeX命令。记不住\vartriangleright这种冷门符号的时候非常管用。从Word公式转LaTeX。如果你已经用Word写了一部分公式想搬过来有两个路径一是用Mathpix之类的公式识别工具截图转LaTeX二是Word里选中公式按Alt编辑再复制成纯文本。转完之后必须逐个检查尤其是上下标和分式识别错误很常见。拆分文件\includeonly。写长文档时只想编译其中一章看效果可以在导言区写\includeonly{chapters/ch3_method}这样只编译第三章速度飞快。定稿时把这行注释掉再整体编译一遍。清缓存重编译。有时候改了宏包配置但效果没生效或者报了一些莫名其妙的错先清理中间文件latexmk -C然后重新完整编译。九成诡异问题都是旧中间文件在捣乱。一个我用了很多年的小技巧在文档开头放一个\listfiles编译后.log文件末尾会列出所有加载的宏包及版本。投稿被要求说明宏包版本或者排查宏包冲突时这个清单非常有用。最后说一个心态上的经验。LaTeX的学习曲线是前陡后平前两天你会觉得处处是坑一个小错误要查半小时一周之后你会形成肌肉记忆遇到报错先看.log第一处遇到格式问题先查宏包文档遇到中文问题先确认引擎。真正让我从抗拒变成离不开的时刻是第一次写完论文要改格式的那个晚上——别人在Word里手动调了几小时的行距和编号我改了导言区三行重新编译等二十秒全部搞定。那之后就回不去了。
返回列表