diff --git a/.github/tl_packages b/.github/tl_packages index 3bcdc3d0..4c979c3a 100644 --- a/.github/tl_packages +++ b/.github/tl_packages @@ -69,6 +69,7 @@ float adjustbox # indirect alphalph # indirect awesomebox +cleveref csquotes # indirect csvsimple # indirect framed diff --git a/bithesis.dtx b/bithesis.dtx index 5bfcf31d..f3e5bb65 100644 --- a/bithesis.dtx +++ b/bithesis.dtx @@ -1749,9 +1749,8 @@ \setlength{\abovecaptionskip}{11pt} % 调整表格 caption 和表格本体间的距离。 - \@@_if_thesis_english:TF { - % 英文模板缺乏规定,只调整中文模板 - } { + % 英文模板缺乏规定,只调整中文模板 + \@@_if_thesis_english:F { % 本来默认有一定空隙,现改为紧贴,这样更接近Word模板实作。 \captionsetup[table]{skip=5pt} } @@ -1894,12 +1893,50 @@ % equation \cs_set:Npn \theequation {\thechapter\g_@@_label_divide_char_tl\arabic{equation}} +% 适配 cleveref 宏包 +% 在 AtBeginDocument 之外,保证最终作者可以覆写 +\ctex_at_end_package:nn {cleveref} { + % cleveref 支持同一处引用多个标签,英文涉及单复数两个值; + % 而 BITSetup 主要为中文设计,接口只允许一个值,无法简单套用到英文。 + % 再考虑到我校缺乏英文规范,我们干脆只给中文适配,英文沿用 cleveref 默认,最终作者有需要可以覆写。 + \@@_if_thesis_english:F { + % “第……”格式在编号后有字,autoref 无法可靠设置,BITSetup 也难以预留接口 + \crefformat{chapter}{第~#2#1#3~章} + \crefformat{section}{第~#2#1#3~节} + \crefformat{subsection}{第~#2#1#3~小节} + \crefformat{subsubsection}{第~#2#1#3~小节} + % 普通格式沿用 autoref 设置 + \crefname{figure}{\figureautorefname}{\figureautorefname} + \crefname{table}{\tableautorefname}{\tableautorefname} + \crefname{listing}{\c_@@_label_code_tl}{\c_@@_label_code_tl} + \crefname{algorithm}{\l_@@_misc_autoref_algo_tl}{\l_@@_misc_autoref_algo_tl} + \crefname{algo}{\l_@@_misc_autoref_algo_tl}{\l_@@_misc_autoref_algo_tl} + \crefname{them}{\themautorefname}{\themautorefname} + \crefname{lem}{\lemautorefname}{\lemautorefname} + \crefname{prop}{\propautorefname}{\propautorefname} + \crefname{cor}{\corautorefname}{\corautorefname} + \crefname{axi}{\axiautorefname}{\axiautorefname} + \crefname{defn}{\defnautorefname}{\defnautorefname} + \crefname{conj}{\conjautorefname}{\conjautorefname} + \crefname{exmp}{\exmpautorefname}{\exmpautorefname} + \crefname{case}{\caseautorefname}{\caseautorefname} + \crefname{rem}{\remautorefname}{\remautorefname} + % 同一处引用多个公式较为常见,专门适配 + % #2、#3 标识的链接范围不可包含括号,否则影响标点挤压。 + \crefformat{equation}{\equationautorefname(#2#1#3)} + \crefrangeformat{equation}{\equationautorefname(#3#1#4)至(#5#2#6)} + \crefmultiformat{equation}{\equationautorefname(#2#1#3)}{和(#2#1#3)}{、(#2#1#3)}{和(#2#1#3)} + } +} + % code snippet \AtBeginDocument{ \cs_gset:Npn \thelstlisting {\thechapter\g_@@_label_divide_char_tl\arabic{lstlisting}} \cs_gset:Npn \lstlistingname {\c_@@_label_code_tl} % 定义算法标题 + % 针对模板的 algo 环境 + \tl_set:Nn \algoautorefname {\l_@@_misc_autoref_algo_tl} % 针对 algorithm 宏包 \tl_set:Nn \ALG@name {\l_@@_misc_autoref_algo_tl} % 针对 algorithm2e 宏包 diff --git a/handbook/chapters/ch0-quick-start.tex b/handbook/chapters/ch0-quick-start.tex index 59388ab5..dc424268 100644 --- a/handbook/chapters/ch0-quick-start.tex +++ b/handbook/chapters/ch0-quick-start.tex @@ -4,8 +4,8 @@ \chapter{快速使用指南} \textbf{本章将通过多个小节,介绍如何快速 成功编译出一份符合学校要求的毕业论文。} -其中,\autoref{sec:local-compile}介绍在本地电脑上编译生成 PDF; -\autoref{sec:overleaf-compile}介绍在 Overleaf(浏览器)上编译生成 PDF。这两种方法相互独立,你可以根据喜好自行选择其中一种。 +其中,\cref{sec:local-compile}介绍在本地电脑上编译生成 PDF; +\cref{sec:overleaf-compile}介绍在 Overleaf(浏览器)上编译生成 PDF。这两种方法相互独立,你可以根据喜好自行选择其中一种。 \section{方法一:在本地电脑上编译生成 PDF} \label{sec:local-compile} @@ -94,7 +94,7 @@ \section{方法二:在 Overleaf(浏览器)上编译生成 PDF} \vspace{\fill} \subsection{注册 Overleaf 账号} -访问 \href{https://cn.overleaf.com}{overleaf.com}(如\autoref{fig:overleaf-register}所示),点击右上角的 ``Register'' 按钮,注册账号并登录。 +访问 \href{https://cn.overleaf.com}{overleaf.com}(如\cref{fig:overleaf-register}所示),点击右上角的 ``Register'' 按钮,注册账号并登录。 \begin{figure}[H] \begin{center} diff --git a/handbook/chapters/ch1-intro.tex b/handbook/chapters/ch1-intro.tex index 36326009..46575abe 100644 --- a/handbook/chapters/ch1-intro.tex +++ b/handbook/chapters/ch1-intro.tex @@ -39,8 +39,8 @@ \section{为何需要这么多步骤,我该如何开始?} \section{在自己的电脑上编写论文} \textit{ -\autoref{sec:local-compile}介绍了如何安装 TeX Live(一些工具)和 TeXstudio(文本文件编辑器)。 -若您已正常得到PDF,可直接跳到\autoref{sec:using-bithesis}编写论文。 +\cref{sec:local-compile}介绍了如何安装 TeX Live(一些工具)和 TeXstudio(文本文件编辑器)。 +若您已正常得到PDF,可直接跳到\cref{sec:using-bithesis}编写论文。 } 在这里,我们将在自己的电脑上配置安装撰写 \LaTeX{} 的相关工具。首先,我们搞定 @@ -67,8 +67,8 @@ \section{在自己的电脑上编写论文} \textit{ 到此,我们其实就可以直接使用本模板,在自己的电脑上进行论文的编写了。如果想再了解 -有关在线编辑平台 Overleaf 的相关内容,请继续阅读\autoref{sec:online-overleaf}; -否则,大家可以直接跳转到\autoref{sec:using-bithesis},了解模板的使用方法。 +有关在线编辑平台 Overleaf 的相关内容,请继续阅读\cref{sec:online-overleaf}; +否则,大家可以直接跳转到\cref{sec:using-bithesis},了解模板的使用方法。 } \section{本地编译与在线平台,我该使用哪一个?} @@ -96,7 +96,7 @@ \section{本地编译与在线平台,我该使用哪一个?} \section{如何将自己电脑上的论文转到 Overleaf} \textit{ -\autoref{sec:overleaf-compile}介绍了如何从 \href{https://bithesis.bitnp.net}{BIThesis.bitnp.net} 新建项目,那样通常更简单;不过若您已在本地用了模板,想转到 Overleaf,请参考此节。 +\cref{sec:overleaf-compile}介绍了如何从 \href{https://bithesis.bitnp.net}{BIThesis.bitnp.net} 新建项目,那样通常更简单;不过若您已在本地用了模板,想转到 Overleaf,请参考此节。 } \begin{enumerate} @@ -104,7 +104,7 @@ \section{如何将自己电脑上的论文转到 Overleaf} (原因:嵌套文件夹可能导致无法统计字数;不过不影响编译。) - 参考\autoref{fig:overleaf-recompile},文件 \texttt{main.tex}、文件夹 \texttt{chapters/} 等在根目录,而没有嵌套在 \isGraduateTF{\texttt{graduate-thesis/}}{\texttt{undergraduate-thesis/}} 文件夹中。若您已嵌套,可到左侧文件列表单击再拖动来移动文件。 + 参考\cref{fig:overleaf-recompile},文件 \texttt{main.tex}、文件夹 \texttt{chapters/} 等在根目录,而没有嵌套在 \isGraduateTF{\texttt{graduate-thesis/}}{\texttt{undergraduate-thesis/}} 文件夹中。若您已嵌套,可到左侧文件列表单击再拖动来移动文件。 详细操作如下。访问 \href{https://cn.overleaf.com/project}{overleaf.com/project},单击左上角\texttt{New Project},然后有下面两种方法。 diff --git a/handbook/chapters/ch2-template-usage.tex b/handbook/chapters/ch2-template-usage.tex index 42d3cdf6..543c4307 100644 --- a/handbook/chapters/ch2-template-usage.tex +++ b/handbook/chapters/ch2-template-usage.tex @@ -189,7 +189,7 @@ \subsubsection{公式和图表引用} 交叉引用的前提是需要在定义章节、公式和图表的时候都对其进行命名标签 (即\label{sec:labelName} 命令),在实际使用过程中通过标签进行引用。根据引用 -的特点可以将应用分成\autoref{tab:setSection}中所示三类。 +的特点可以将应用分成\cref{tab:setSection} 中所示三类。 \begin{table}[htb] \centering diff --git a/handbook/chapters/ch3-latex-syntax.tex b/handbook/chapters/ch3-latex-syntax.tex index 7345493c..0db44fa9 100644 --- a/handbook/chapters/ch3-latex-syntax.tex +++ b/handbook/chapters/ch3-latex-syntax.tex @@ -16,7 +16,7 @@ \subsection{公式及术语表} 为方便,可用 \href{https://www.latexlive.com/}{latexlive.com} 等网站\textbf{在线编辑}公式,或用 \href{https://mathpix.com/snipping-tool}{Mathpix Snipping Tool} 等\textbf{从图片转换}。一般的\LaTeX{}编辑器如 TeXstudio 也都会提供语法补全。 -{\bf{实例1:}} 以下是L-B非稳态流动升力模型,公式引用为\autoref{eqn:LBmodel}。该公式的术语列表见\autoref{tab:LB-parameters}。 +{\bf{实例1:}} 以下是L-B非稳态流动升力模型,公式引用为\cref{eqn:LBmodel}。该公式的术语列表见\cref{tab:LB-parameters}。 \begin{equation} \label{eqn:LBmodel} C_{L} = C_{L0} + C_{L \alpha} \left( \frac{1+\sqrt{X}}{2} \right) \alpha @@ -81,7 +81,7 @@ \subsection{定理环境} 卷绕数是一个整数,它描述了曲线$\gamma$绕过点$a_k$的次数。如果$\gamma$依逆时针方向绕着$a_k$移动,卷绕数就是一个正数, 如果$\gamma$根本不绕过$a_k$,卷绕数就是零。 - \autoref{thm:res}的证明。 + \cref{thm:res} 的证明。 \begin{proof} 首先,由…… @@ -124,7 +124,7 @@ \subsection{支持的图片格式} 在学位论文中,插图地使用简单地分为两类:单列图片和多列图片。图片的格式包含*.jpg、*.eps、*.pdf,既可以是位图也可以是矢量图,在插入图片时可以定义其高度和宽度。 -最基本的图片插入示例可见\autoref{fig:diagram},其代码如\autoref{demo-figure1}所示。 +最基本的图片插入示例可见\cref{fig:diagram},其代码如\cref{raw:demo-figure1} 所示。 其中\verb+\centering+表示图片居中,\verb+\includegraphics[…]{…}+导入图片并指定图片大小,\verb+\caption{}+指定图片标题,而\verb+\label{…}+为图片加上引用标签。 @@ -134,7 +134,7 @@ \subsection{支持的图片格式} \caption{单张图片插入的基本示例}\label{fig:diagram} \end{figure} -\begin{lstlisting}[language={[LaTeX]TeX}, caption={示例插图代码}, label=demo-figure1] +\begin{lstlisting}[language={[LaTeX]TeX}, caption={示例插图代码}, label=raw:demo-figure1] \begin{figure} \centering \includegraphics[width=0.75\textwidth]{example-image} @@ -142,7 +142,7 @@ \subsection{支持的图片格式} \end{figure} \end{lstlisting} -插入两幅图片的例子如\autoref{fig:png-jpg}所示。 +插入两幅图片的例子如\cref{fig:png-jpg} 所示。 这两个水平并列放置的图共享一个“图标题”(table caption),没有各自的小标题。 \begin{figure} @@ -170,7 +170,7 @@ \subsection{支持的图片格式} \subsection{长标题的换行} \label{sec:longcaption} -\autoref{fig:longcaptionbad}和\autoref{fig:longcaptiongood}的标题都比较长。对比可发现\autoref{fig:longcaptiongood}的标题换行效果更好一些, +\cref{fig:longcaptionbad} 和\cref{fig:longcaptiongood} 的标题都比较长。对比可发现\cref{fig:longcaptiongood} 的标题换行效果更好一些, 它使用了minipage环境来限制整个浮动体的宽度。 不过在实际使用中,你可以根据排版的整体效果来自行决定。 @@ -216,11 +216,11 @@ \section{表格的例子} 表格的定义和引用就不多做介绍,表格内容包含在 \verb+\begin{table}+ 和 \verb+\end{table}+ 之间。这里给出一些表格的例子。 -\textbf{\href{https://www.tablesgenerator.com/}{Tables Generator}可以用于在线生成表格} +\textbf{\href{https://www.tablesgenerator.com/}{Tables Generator} 可以用于在线生成表格} -先以模板示例中第一章的\autoref{tab:category}为例,插入代码为\autoref{demo-table1}所示。 +先以模板示例中第一章的\cref{tab:category} 为例,插入代码为\cref{raw:demo-table1} 所示。 -\begin{lstlisting}[language={[LaTeX]TeX}, caption={示例插表代码}, label=demo-table1] +\begin{lstlisting}[language={[LaTeX]TeX}, caption={示例插表代码}, label=raw:demo-table1] \begin{table} \centering \caption{水系聚氨酯分类} \label{tab:category} @@ -252,7 +252,7 @@ \section{表格的例子} \end{tabular*} \end{table} -另举一个两列的表格例子(\autoref{tab:LB-parameters}以及\autoref{demo-table2})。 +另举一个两列的表格例子(\cref{tab:LB-parameters} 以及\cref{raw:demo-table2})。 \begin{table} % no placement specified: defaults to here, top, bottom, page \centering @@ -273,7 +273,7 @@ \section{表格的例子} \end{center} \end{table} -\begin{lstlisting}[language={[LaTeX]TeX}, caption={插入\autoref{tab:LB-parameters}}, label=demo-table2] +\begin{lstlisting}[language={[LaTeX]TeX}, caption={插入\cref{tab:LB-parameters}}, label=raw:demo-table2] \begin{table} \centering \begin{center} @@ -293,7 +293,7 @@ \section{表格的例子} \end{table} \end{lstlisting} -再给出一些表格的例子,如\autoref{tab:firstone}、\autoref{demo-table3}所示。 +再给出一些表格的例子,如\cref{tab:firstone}、\cref{raw:demo-table3} 所示。 \begin{table} \centering @@ -310,7 +310,7 @@ \section{表格的例子} \end{tabular} \end{table} -\begin{lstlisting}[language={[LaTeX]TeX}, caption={三线表格}, label=demo-table3] +\begin{lstlisting}[language={[LaTeX]TeX}, caption={三线表格}, label=raw:demo-table3] \begin{table} \centering \caption{一个标准的三线表格} @@ -345,9 +345,9 @@ \subsection{将参考文献的内容与表现分离} .bib数据库中的参考文献条目可以手动编写,也可以在Google的学术搜索中找到。 各大数据库也支持将参考文献信息导出为.bib,省时省力。 以Google学术搜索为例:在搜索结果中,单击“引用 → BibTeX”链接, -浏览器会打开新的标签页,出现类似\autoref{googlescholar}所示的内容。 +浏览器会打开新的标签页,出现类似\cref{raw:googlescholar} 所示的内容。 -\begin{lstlisting}[caption={从Google Scholar找到的,但并不规范的.bib条目}, label=googlescholar, float, escapeinside="", numbers=none] +\begin{lstlisting}[caption={从Google Scholar找到的,但并不规范的.bib条目}, label=raw:googlescholar, float, escapeinside="", numbers=none] @article{张玲2000信用风险评估方法发展趋势, title={信用风险评估方法发展趋势}, author={张玲 and 张佳林}, diff --git a/handbook/main.tex b/handbook/main.tex index cc8062d4..29bc588d 100644 --- a/handbook/main.tex +++ b/handbook/main.tex @@ -61,13 +61,11 @@ \addbibresource{reference/main.bib} -\usepackage{hyperref} -% https://bithesis.bitnp.net/faq/autoref-name.html -\def\figureautorefname~#1\null{图~#1~\null} -\def\chapterautorefname~#1\null{第~#1~章\null} -\def\sectionautorefname~#1\null{第~#1~节\null} -\def\subsectionautorefname~#1\null{第~#1~节\null} -\def\equationautorefname~#1\null{式~(#1)~\null} +\usepackage{cleveref} +% https://bithesis.bitnp.net/faq/cleveref.html#customize +\crefformat{equation}{式~#2(#1)#3} +\crefrangeformat{equation}{式~#3(#1)#4 至~#5(#2)#6} +\crefmultiformat{equation}{式~#2(#1)#3}{和~#2(#1)#3}{、#2(#1)#3}{和~#2(#1)#3} \ExplSyntaxOn