Skip to content

使用XJTU thesis编写论文

obster-y edited this page Jun 6, 2023 · 1 revision

使用 XJTU-thesis 编写论文

这一节替代版本v1.4之前的使用手册.pdfREADME.mdmain.tex中的内容。其中使用手册.pdf中的部分代码将被移至main.tex

编译并生成结果

默认工程在不修改任何内容的情况下即可编译并生成一份兼具示例和部分使用手册功能的 ./Build/main.pdf。模板必须被 XeTeX 引擎编译,编译器可用 XeLaTeX,参考文献后端使用 Biber,如需生成主要符号表还需使用 makeglossaries 编译。常见的四种不同实现方式包括

使用 VS Code

  • 确保安装最新的 LaTeX Workshop
  • 可以自行设置语法高亮、编辑器字体、Git集成等
  • 模板提供的 .vscode/settings.json 中预先配置了编译选项,因此可以不用调整
  • 模板提供的编译选项不包括绝对路径,如果提示找不到 xelatex,请检查发行版的路径是否在环境变量中

考虑到大多数人的需求,VS Code 是一个轻便快捷的工具,同时 LaTeX Workshop 提供了强大的功能。因此本项目提供了 .vscode/settings.json 作为默认配置,使得本项目在 VS Code 下基本实现开箱即用(环境变量配置正确的情况下)。

想要编译本项目,首先选中 main.tex 或任一相关联的 .tex 文件,再选择侧边栏中的 TEX图标,在 COMMANDS/Build LaTeX Project 下有两个默认的编译选项。

其中,每点击选项 fast(xe) 一次,会执行一次 xelatex main.tex,这个选项不能完整地编译整个工程(参考文献、主要符号表),但两次这个选项可以编译交叉引用。优点是速度快,对于大部分问题可以避免等待,在短时间内看到编译结果。

选项 full(ltxmk) 会调用项目根目录下的 latexmkrc 编译 main.tex,此时至少要执行三次 xelatex 和一次 biber,但是编译结果完整,适用于检查整体效果、提交前最后一次编译等。

编译成功或失败都可以在信息栏看到提示或日志。

编译成功后目标文件生成在 Build 目录下,文件名为 main.pdf,可以配置 LaTeX Workshop 在 VSCode 内或调用外部程序阅览 pdf 文件。同时也可以配置正文和 pdf 之间的双向跳转。如何配置 VS Code 和相关插件的细节请自行查询。

LaTeX Workshop 贴心的提供了 COMMANDS/Clean up auxiliary files 以提供临时文件清理,以防错误的临时文件导致编译失败,在不知道原因的编译失败时可以尝试清理它。

使用 TeXStudio

  • 安装最新的 TeXStudio
  • 如果之前对 TeXStudio 作过调整,请先在菜单栏点击「选项」-「保存配置」保存自己的配置,不保存产生的配置丢失后果自负
  • 点击「选项」-「加载配置文件」,选择 .vscode/XJTU-thesis.txsprofile 导入项目提供的配置
  • 重启TeXStudio
  • 可以看到,在工具栏中「显示日志」按钮旁边多出了三个按钮,图标从左至右为「latexmk」、「xelatex」、「清理临时文件」。这三个按钮是本项目新添加的工具,目的是为了保持不同编辑器的使用体验一致
  • 注意,编译本模板请使用新增的编译工具,而不是默认的 F5F6,模板提供的两个工具的快捷键分别为Alt+Shift+F1/F2,但也可以修改,修改方法自行查询
  • 同 VS Code 一样,latexmk 提供了完整编译但时间较长,xelatex 提供了快速编译但不能编译出参考文献,清理临时文件则针对多产生的临时文件做了优化
  • 编译得到的 pdf 可以通过工具栏的「查看」选项查看,具体路径也是在 ./Build/
  • 如果模板使用完毕,可以点击「选项」-「恢复默认设置」(新用户)或者「选项」-「加载配置文件」导入之前的配置,再重启 TeXStudio 即可

使用 Overleaf

「施工中」

使用 Latexmk

如果是 CLI 用户可以考虑直接调用 latexmk,这类用户我也不必具体的说明 latexmk 的使用方法,请自行解决。

编译方法:

latexmk main
或 latexmk main -r latexmkrc

使用 latexmk 清理临时文件:

latexmk -c

真·手动编译

这种情况的需求常见于确定错误位置,完整编译需要六步(可按需增减)。

xelatex main.tex
xelatex main.tex
biber main 
makeglossaries main
xelatex main.tex
xelatex main.tex

基本信息设置

生成选项

\documentclass[
    doctor/master,
    english,
    blind,
    plgck,
]{XJTU-thesis}

用于选择论文基本类型,包括学位等级、是否英文正文、是否按照盲审要求生成、是否按照查重要求生成等。具体填写说明见main.tex

论文和作者信息

\title{#1}{#2}
\degree[#1]{#2}{#3}
\author{#1}{#2}
\advisor{#1}{#2}{#3}{#4}
\advisorassociate{#1}{#2}{#3}{#4}
\advisorteam{#1}{#2}
\subject{#1}{#2}
\submitdate[#1][#2]

用于生成题名页所有信息、答辩委员会页部份信息。具体填写说明见main.tex

撰写正文部分

各个正文章节通过以下命令引入:

\thesisbodybegin
\include{Main_Spine/X}
\thesisbodyend

此外,可以通过注释不编译章节。或通过导言区的 \includeonly 命令实现编译部分章节,同时保持章节编号的效果。

具体地说,首先请自己学习 \includeonly 命令的具体使用方法。\includeonly 的实质是跳过编译 .tex 文件,直接读取 .aux 文件调整计数器等设置。因此如果想要使用此命令,首先要确保一次全部内容的编译,以生成 .aux 文件;还要确保编译成功后此文件不被清理(VS Code);还要确保编译开始前此文件不被清理(latexmkrc $cleanup_mode=0)

但是请注意,使用 \includeonly 导入部分章节的命令后,目录可能不能正确的生成(包含所有章节而非导入的章节),但不影响最后的提交

章节标题结构

按照要求,正文最多应具有七个层级。其中,为了方便中英目录的生成,模板重新定义了前三级标题的命令,并新增了第六级的命令。

注意,不论正文主体语言是否为英文,标题顺序均为先中后英(前三级)。

层级 命令
0 \xchapter{Chs}{Eng}
1 \xsection{Chs}{Eng}
2 \xsubsection{Chs}{Eng}
3 \subsubsection{Chs/Eng}
4 \paragraph{Chs/Eng}
5 \subparagraph{Chs/Eng}
6 \subsubparagraph{Chs/Eng}

请查看 [Main_Spine/c1.tex]

字体格式

在中文学位论文的写作中,不推荐使用加粗,斜体等方式突出重点。如果非要使用,\textbf{text} 进行可以对字加粗;同时,请注意到在英文中,正确的强调方式不是使用加粗,而是使用斜体,即使用\emph{text}进行强调。\textit{text}\underline{text} 可以分别实现斜体和下划线格式。

请查看 [Main_Spine/c1.tex]

插入数字、符号、公式和定理

为了正确的输入数字(和单位),siunitx 宏包提供了解决方法,可以自行阅读手册。最常用的使用方法为 \SI{#1}{#2},其中 #1 为数值,#2 为单位,如 共有\SI{100}{kg}

数学环境下的符号字体调整请使用 unicode-math 提供的 \symup, \symbfup, \symit, \symbfit 等命令使用斜体粗体型的符号。\boldmath..\unboldmath 可以整体调整被其包裹内容的粗细。 \boldsymbol{} 可以单独加粗某符号。

注意,本模板已经定义了 \diff 命令产生标准的微分符号,请不要再自行使用其他符号(微分号是正体的 d,与后面内容间距稍小),还定义了三个用于可能简化输入的命令 \seq{x}{n}\iprod{i}{j}\mbs{B}

模板提供了许多种类的定理环境,每种环境单独编号,具体环境名称包括:

环境 英文名称 中文名称 环境 英文名称 中文名称
proof Proof 证明 theorem Theorem 定理
axiom Axiom 公理 corollary Corollary 推论
lemma Lemma 引理 definition Definition 定义
example Example 例子 proposition Proposition 命题
assumption Assumption 假设 remark Remark
problem Problem 问题 conjecture Conjecture 猜想

请查看 [Main_Spine/c1.tex]

插入图片

插入图片使用 figure 环境,自动调整图片前后的间距。

添加子图则使用 \subcaption 包内的命令。如:

\begin{figure}[H]
    \begin{subfigure}[b]{0.49\linewidth}
        \centering
        \includegraphics[height=6cm]{IMAGE}
        \subcaption{cap1}
    \end{subfigure}
    \begin{subfigure}[b]{0.49\linewidth}
        \centering
        \includegraphics[height=6cm]{IMAGE}
        \subcaption{cap2}
        \label{subfig:lb1}
    \end{subfigure}
    \caption{title}
\end{figure}

若子图过多需要跨页则在间断处插入 \floatcontinue{tb} 命令,参数可自行设置,实现细节可查阅 XJTU-thesis.cls。

图片文件可以统一放在 ./Figure/ 目录下,容易整理,工程也看起不杂乱。

请查看 [Main_Spine/c2.tex]

插入表格

考虑到使用成本、内容与样式分离。模板默认调用现代化的表格绘制宏包 tabularray。详细使用方法请自行查看手册,网上也有此手册的中文翻译。

非跨页表格应使用 tblr 环境,使用 table 作为浮动体环境;使用 \toprule\midrule\bottomrule 指定三线表的三条线;

tblr 环境各列的对齐方式可以以键值对的方式在必选参数中设置,或者直接作为唯一必选参数(参考 tabularray 手册第 24 页)。tblr 提供的列类型包括 c/l/r, t/b/m, X 等。其中,c/l/r 为默认的三种对齐方式,t/b/m 指定单元格内容超过列宽时垂直方向的对齐方式, X 类型会自动调整列宽使全表宽度与页宽一致。X 类型列的水平、垂直对齐方式以类似 X[c] 的方式在 X 后的方括号内指定。X 类型后的方括号可以指定此列宽度与其他X类列宽度的相对大小,也可使用 wd=A直接指定列宽。推荐使用 X 作为列类型。

tabularray 的优点在于格式和内容分离,使用更贴合人类习惯。单元格的合并,文字、背景、边框的样式都可以放在参数中设置。如 cell{R}{C}={merge}{style} 用于设置单元格合并,其中 R,C 指定合并单元格左上角的位置,merge参数指定合并多少行多少列,style 调整合并后的单元格样式。此外 R,C 除了使用行号进行索引,可以使用 X,Y,Z 索引倒数第三、二、一行/列,可以使用 odd/even 选择 奇/偶列,还可以使用连字符(dash)选择区间,非常方便。

当表格过长时,使用longtblr环境,此时不需要浮动体环境。在可选参数中需要设置theme=xjtu_std,以调用预先设置好的续表样式,同时设置表格标题、label、脚注等。

请查看 [Main_Spine/c2.tex]

插入伪代码(Algorithm)和代码(Code)

这两部份内容均不受学校要求限制,因此可以自定义。

考虑到实际使用需求,即长算法分段和注释功能,模板不再使用 algorithm2e 作为默认算法排版工具,改为调用 algpseudocode。注意,这两个宏包相互冲突。算法的具体编写方式请自行查阅手册。

插入代码则可以自定义样式,参考 lstlisting 宏包。模板预先定义了一基本格式 sty_basic 可以使用,也可以自己选择新的。

请查看 [Main_Spine/c3.tex]

脚注、交叉引用和参考文献

脚注使用 \footnote 自动编号生成,也可使用\footnotetex{text}手动添加脚注文字而不出现编号,如摘要中关于项目资助的标识,是使用 \footnotetext{*本研究得到某某基金(编号:)的资助} 生成的。

请查看 [Main_Spine/c1.tex]

基于 \label{} 编号的引用,项目通过 cleveref 提供的 \cref{} 命令实现,它可以通过识别 label 的类型,自动为引用添加前缀,具体使用方法请查看宏包文档。简单地说,定义一个标签时,应当如 \label{TYPE:NAME} 定义,其中 TYPE 指此标签的类型,应当使用模板提供的或自行指定;NAME 为此标签的名称,可以自行定义,不应当重复。

模板预设的 TYPE 包括:

TYPE 显示
equation
figure
subfigure 子图
table
algorithm 算法
listing 源码
ENV ENVNAME

其中 ENV 是之前提到的数学环境名称。此外,对于数学公式 equation,\crefrange{#1}{#2} 输出 式 #1 ~ 式 #2\cref{#1,#2,#3} 输出 式 #1,式 #2 和式 #3

模板使用 biblatex 编译参考文献,默认采用顺序编码制,有多种引用参考文献的方式,请自行查阅 biblatex-gbt-7715-2015 宏包。

在导言区使用\addbibresource{path/to/.bib file}添加参考文献数据库,默认参考文献数据库位于 ./References/ 下。

这里主要举例三种引用方式,使用 \cite{ref} 的引用结果作为上标出现在正文中,使用 \parencite{ref} 的引用结果作为正文内容(一个名词)出现在正文中,使用 \footfullcite{ref} 的引用结果作为脚注内容在脚注部分出现。

请查看 [Main_Spine/c4.tex]

撰写非正文部分

请查看 [Main_Spine/c5.tex]

封面和题名页

论文真正的封面应在打印店获取纸质版时取得,不应由此项目生成。

本项目通过 \thesistitles 产生中英题名页。

中英摘要

中英文摘要应分别包含在 chineseabstractenglishabstract 环境中,在环境中使用对应的关键字和文档类型 \chinesekeywordstype\englishkeywordstype 添加相关信息。

主要符号表

主要符号表通过修改添加 Main_Miscellaneous/glossary.tex 中的内容,使用 \thesisglossarylist 生成。

定义专有词汇或符号使用 \newglossaryentry{<label>}{<description>} 命令,例如:

\newglossaryentry{Linux}
{
  name=Linux,
  description={is a generic term referring to the family of Unix-like
    computer operating systems that use the Linux kernel},
  plural=Linuces
}

\newglossaryentry{current}
{
  name=$I$,
  description={An electric current is a stream of charged particles, such as electrons or ions, moving through an electrical conductor or space},
}

缩略词使用 \newacronym[description=<chinese>]{<label>}{<abbrv>}{<full>} 命令,例如:

\newacronym[description=逻辑卷管理器]{lvm}{LVM}{Logical Volume Manager}

模板会导入所有添加到 glossary.tex 中的词汇。正文中引用缩略词时,使用 glossaries 宏包提供的 \gls\Gls(首字母大写)或 \glspl(复数形式)等命令引用缩略词的 <label>

具体使用方法参考glossaries宏包文档

致谢

致谢部分由命令 \thesisacknowledegment 开始,具体内容应在 Main_Miscellaneous/acknowledegment.tex 中编辑。

附录

附录部分由命令 \thesisappendix{} 命令引入,此处引入的文件内的每一个章,都会被当作是一个附录,使用大写拉丁字母顺序编号。能够自动根据要求使得所有附录在目录中合并显示为一个 附录Appendi{x/ces}

参考文献

项目使用 Biber 作为后端,基于 BibLaTeX 录入参考文献,由 \thesisbibliography 命令生成参考文献列表。

默认使用 References/reference.bib 文件数据库,也可在导言区通过 \addreferenceresource{References/reference} 手动添加参数指定文件数据库。参考文献风格依照国标设置为「顺序编码制」。

参考文献的在文中的引用分多种,可自行查阅 biblatex-gbt7714-2015 宏包,主要使用两种:在原文中作句法成分的为直接引用,使用 \parencite 命令;若使用 \cite 命令,在文中文献编号显示为上标;若使用 \footfullcite 命令,参考文献著录将以脚注形式显示在本页。

如果不能正常显示参考文献编号,可先查看此 issue

攻读学位期间取得的研究成果

攻读学位期间取得的研究成果,可以通过在导言区使用 \addachivementresource{References/achievement} 添加成果数据库,并使用 \thesisachivements[auto] 自动生成成果列表。其中,在成果数据库的各条记录中,如果含有 AUTHOR+an = {X=highlight} 字段,则此条目的第 X 位作者将会被加粗标注。

不添加 [auto] 参数则导入 Main_Miscellaneous/achievement.tex 此文件的内容,可以在其中手动添加条目。

注意:如果不使用 [auto] 参数,文档生成选项 blind 不会对本页内容进行修改,即需要自行删除内容或隐去相关信息。

答辩委员会、决议和常规评阅人

答辩委员会页

答辩委员会页由 \thesiscommittes 生成,并且在导言区需要设置:

\addcommitteemember{单位,姓名,职称}
\defensedate{Y}{M}{D}
\defenseloc{}

其中答辩委员会成员可由多次使用 \addcommitteemember{} 依次序添加,答辩时间由 \defensedate{Y}{M}{D} 手动指定,答辩地点由 \defenseloc{} 指定。具体填写说明见 main.tex

答辩委员会决议页

答辩委员会决议页由 \thesisdecision 生成,具体内容由 Main_Miscellaneous/decision.tex 确定,撰写要求由各学院或答辩委员会指定,无统一要求。

常规评阅人页

常规评阅人页由 \thesisreviewers{A}{B} 生成,并且在导言区需要设置:

\addgeneralreviewer{单位,姓名,职称}

其中评阅人名单可由多次使用 \thesisreviewers{} 依次序添加,评阅人数量由 \thesisreviewers 的参数确定。具体填写说明见 main.tex

其他功能

字数统计功能

考虑到填写系统需要进行字数统计,常见的字数统计方法有三种:

LaTeX Workshop 的字数统计

VS Code 的这个插件提供了 COMMANDS/Miscellaneous/Count words in latex project 这一统计字数的功能,具体实现方法暂且没有研究,但应该不能解决部分命令引入的文件中的字数(比如附录)

调用项目提供的脚本

项目提供了 Materials/Tools/count.sh,这一项目调用 TeXLive 带有的 texcount 统计 Main_Spine/Main_Miscellaneous 下的所有文件,准确度较高,但问题在于不能过滤文件,会统计目录下的所有 .tex 文件,不论是否被调用,但可以通过整理目录和改进脚本优化

直接统计 pdf 文件字数

使用其他工具可以实现,但准确度不高

输出参考文献文字功能

考虑到图书馆的论文提交系统需要填写参考文献,特别制作了这一功能。

由于模板使用 biblatex 作为参考文献前端,此时 biber 生成的 .bbl 文件更易于 tex 引擎而非人类阅读,因此想要从 bbl 文件中提取格式化后的参考文献列表较为困难。

模板的解决方法在于添加 \thesisbibliography[onepage] 这一参数后,参考文献后会生成一个足够大的页面在一页中显示所有参考文献条目。

在上述页面中复制内容,而后粘贴到文字编辑器中即可。上传至图书馆系统不需要手动添加编号,也不需要另外空行。如果非要添加编号,可以考虑使用表格处理工具,非要另外空行,可以用任意方法替换换行符。