Skip to content

Commit d982975

Browse files
feat: 适配汉化 cleveref 宏包
Resolves #593
1 parent 8c81eb5 commit d982975

File tree

6 files changed

+72
-35
lines changed

6 files changed

+72
-35
lines changed

bithesis.dtx

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -219,11 +219,12 @@
219219
% \end{macrocode}
220220
% \end{macro}
221221

222-
% \begin{macro}{\@@_if_thesis_english:T,\@@_if_thesis_english:TF}
222+
% \begin{macro}{\@@_if_thesis_english:T,\@@_if_thesis_english:F,\@@_if_thesis_english:TF}
223223
% 是否为英文模板,这里包括全英文专业和研究生模板的英文模式。
224224
% \begin{macrocode}
225225
\cs_new:Npn \@@_if_thesis_english:TF #1#2 {\bool_if:nTF {\g_@@_thesis_type_english_bool} {#1} {#2}}
226226
\cs_new:Npn \@@_if_thesis_english:T #1 {\@@_if_thesis_english:TF {#1}{}}
227+
\cs_new:Npn \@@_if_thesis_english:F #1 {\@@_if_thesis_english:TF {}{#1}}
227228
% \end{macrocode}
228229
% \end{macro}
229230
%
@@ -1624,9 +1625,8 @@
16241625
\setlength{\abovecaptionskip}{11pt}
16251626

16261627
% 调整表格 caption 和表格本体间的距离。
1627-
\@@_if_thesis_english:TF {
1628-
% 英文模板缺乏规定,只调整中文模板
1629-
} {
1628+
% 英文模板缺乏规定,只调整中文模板
1629+
\@@_if_thesis_english:F {
16301630
% 本来默认有一定空隙,现改为紧贴,这样更接近Word模板实作。
16311631
\captionsetup[table]{skip=5pt}
16321632
}
@@ -1731,12 +1731,50 @@
17311731
% equation
17321732
\cs_set:Npn \theequation {\thechapter\g_@@_label_divide_char_tl\arabic{equation}}
17331733

1734+
% 适配 cleveref 宏包
1735+
% 在 AtBeginDocument 之外,保证最终作者可以覆写
1736+
\ctex_at_end_package:nn {cleveref} {
1737+
% cleveref 支持同一处引用多个标签,英文涉及单复数两个值;
1738+
% 而 BITSetup 主要为中文设计,接口只允许一个值,无法简单套用到英文。
1739+
% 再考虑到我校缺乏英文规范,我们干脆只给中文适配,英文沿用 cleveref 默认,最终作者有需要可以覆写。
1740+
\@@_if_thesis_english:F {
1741+
% “第……”格式在编号后有字,autoref 无法可靠设置,BITSetup 也难以预留接口
1742+
\crefformat{chapter}{第~#2#1#3~章}
1743+
\crefformat{section}{第~#2#1#3~节}
1744+
\crefformat{subsection}{第~#2#1#3~小节}
1745+
\crefformat{subsubsection}{第~#2#1#3~小节}
1746+
% 普通格式沿用 autoref 设置
1747+
\crefname{figure}{\figureautorefname}{\figureautorefname}
1748+
\crefname{table}{\tableautorefname}{\tableautorefname}
1749+
\crefname{listing}{\c_@@_label_code_tl}{\c_@@_label_code_tl}
1750+
\crefname{algorithm}{\l_@@_misc_autoref_algo_tl}{\l_@@_misc_autoref_algo_tl}
1751+
\crefname{algo}{\l_@@_misc_autoref_algo_tl}{\l_@@_misc_autoref_algo_tl}
1752+
\crefname{them}{\themautorefname}{\themautorefname}
1753+
\crefname{lem}{\lemautorefname}{\lemautorefname}
1754+
\crefname{prop}{\propautorefname}{\propautorefname}
1755+
\crefname{cor}{\corautorefname}{\corautorefname}
1756+
\crefname{axi}{\axiautorefname}{\axiautorefname}
1757+
\crefname{defn}{\defnautorefname}{\defnautorefname}
1758+
\crefname{conj}{\conjautorefname}{\conjautorefname}
1759+
\crefname{exmp}{\exmpautorefname}{\exmpautorefname}
1760+
\crefname{case}{\caseautorefname}{\caseautorefname}
1761+
\crefname{rem}{\remautorefname}{\remautorefname}
1762+
% 同一处引用多个公式较为常见,专门适配
1763+
% #2、#3 标识的链接范围不可包含括号,否则影响标点挤压。
1764+
\crefformat{equation}{\equationautorefname(#2#1#3)}
1765+
\crefrangeformat{equation}{\equationautorefname(#3#1#4)至(#5#2#6)}
1766+
\crefmultiformat{equation}{\equationautorefname(#2#1#3)}{和(#2#1#3)}{、(#2#1#3)}{和(#2#1#3)}
1767+
}
1768+
}
1769+
17341770
% code snippet
17351771
\AtBeginDocument{
17361772
\cs_gset:Npn \thelstlisting {\thechapter\g_@@_label_divide_char_tl\arabic{lstlisting}}
17371773
\cs_gset:Npn \lstlistingname {\c_@@_label_code_tl}
17381774

17391775
% 定义算法标题
1776+
% 针对模板的 algo 环境
1777+
\tl_set:Nn \algoautorefname {\l_@@_misc_autoref_algo_tl}
17401778
% 针对 algorithm 宏包
17411779
\tl_set:Nn \ALG@name {\l_@@_misc_autoref_algo_tl}
17421780
% 针对 algorithm2e 宏包

handbook/chapters/ch0-quick-start.tex

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ \chapter{快速使用指南}
44
\textbf{本章将通过多个小节,介绍如何快速
55
成功编译出一份符合学校要求的毕业论文。}
66

7-
其中,\autoref{sec:local-compile}介绍在本地电脑上编译生成 PDF;
8-
\autoref{sec:overleaf-compile}介绍在 Overleaf(浏览器)上编译生成 PDF。这两种方法相互独立,你可以根据喜好自行选择其中一种。
7+
其中,\cref{sec:local-compile}介绍在本地电脑上编译生成 PDF;
8+
\cref{sec:overleaf-compile}介绍在 Overleaf(浏览器)上编译生成 PDF。这两种方法相互独立,你可以根据喜好自行选择其中一种。
99

1010
\section{方法一:在本地电脑上编译生成 PDF}
1111
\label{sec:local-compile}
@@ -76,7 +76,7 @@ \section{方法二:在 Overleaf(浏览器)上编译生成 PDF}
7676

7777
\subsection{注册 Overleaf 账号}
7878

79-
访问 \url{https://overleaf.com}(如\autoref{fig:overleaf-register}所示),点击右上角的 ``Register'' 按钮,注册账号并登录。
79+
访问 \url{https://overleaf.com}(如\cref{fig:overleaf-register} 所示),点击右上角的 ``Register'' 按钮,注册账号并登录。
8080

8181
\begin{figure}[H]
8282
\begin{center}

handbook/chapters/ch1-intro.tex

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ \section{为何需要这么多步骤,我该如何开始?}
3838
\section{在自己的电脑上编写论文}
3939

4040
\textit{
41-
\autoref{sec:local-compile}介绍了如何安装 TeX Live(一些工具)和 TeXstudio(文本文件编辑器)。
42-
若您已正常得到PDF,可直接跳到\autoref{sec:using-bithesis}编写论文。
41+
\cref{sec:local-compile}介绍了如何安装 TeX Live(一些工具)和 TeXstudio(文本文件编辑器)。
42+
若您已正常得到PDF,可直接跳到\cref{sec:using-bithesis}编写论文。
4343
}
4444

4545
在这里,我们将在自己的电脑上配置安装撰写 \LaTeX{} 的相关工具。首先,我们搞定
@@ -75,8 +75,8 @@ \section{在自己的电脑上编写论文}
7575

7676
\textit{
7777
到此,我们其实就可以直接使用本模板,在自己的电脑上进行论文的编写了。如果想再了解
78-
有关在线编辑平台 Overleaf 的相关内容,请继续阅读\autoref{sec:online-overleaf};
79-
否则,大家可以直接跳转到\autoref{sec:using-bithesis},了解模板的使用方法。
78+
有关在线编辑平台 Overleaf 的相关内容,请继续阅读\cref{sec:online-overleaf};
79+
否则,大家可以直接跳转到\cref{sec:using-bithesis},了解模板的使用方法。
8080
}
8181

8282
\section{本地编辑或是 Overleaf 在线平台,我改使用哪一个?}
@@ -109,15 +109,15 @@ \section{本地编辑或是 Overleaf 在线平台,我改使用哪一个?}
109109
\section{如何将自己电脑上的论文转到 Overleaf}
110110

111111
\textit{
112-
\autoref{sec:overleaf-compile}介绍了如何从 \url{https://bithesis.bitnp.net} 新建项目,那样通常更简单;不过若您已在本地用了模板,想转到 Overleaf(例如为了调试),请参考此节。
112+
\cref{sec:overleaf-compile}介绍了如何从 \url{https://bithesis.bitnp.net} 新建项目,那样通常更简单;不过若您已在本地用了模板,想转到 Overleaf(例如为了调试),请参考此节。
113113
}
114114

115115
\begin{enumerate}
116116
\item 按网页提示上传文件到 Overleaf,注意\textbf{避免嵌套文件夹}。
117117

118118
(原因:嵌套文件夹可能导致无法统计字数;不过不影响编译。)
119119

120-
参考\autoref{fig:overleaf-recompile},文件 \texttt{main.tex}、文件夹 \texttt{chapters/} 等在根目录,而没有嵌套在 \isGraduateTF{\texttt{graduate-thesis/}}{\texttt{undergraduate-thesis/}} 文件夹中。若您已嵌套,可到左侧文件列表单击再拖动来移动文件。
120+
参考\cref{fig:overleaf-recompile},文件 \texttt{main.tex}、文件夹 \texttt{chapters/} 等在根目录,而没有嵌套在 \isGraduateTF{\texttt{graduate-thesis/}}{\texttt{undergraduate-thesis/}} 文件夹中。若您已嵌套,可到左侧文件列表单击再拖动来移动文件。
121121

122122
详细操作如下。访问 \url{https://www.overleaf.com/project},单击左上角\texttt{New Project},然后有下面两种方法。
123123

handbook/chapters/ch2-template-usage.tex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ \subsubsection{公式和图表引用}
189189

190190
交叉引用的前提是需要在定义章节、公式和图表的时候都对其进行命名标签
191191
(即\label{sec:labelName} 命令),在实际使用过程中通过标签进行引用。根据引用
192-
的特点可以将应用分成\autoref{tab:setSection}中所示三类。
192+
的特点可以将应用分成\cref{tab:setSection} 中所示三类。
193193

194194
\begin{table}[htb]
195195
\centering

handbook/chapters/ch3-latex-syntax.tex

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ \subsection{公式及术语表}
1616

1717
为方便,可用 \href{https://www.latexlive.com/}{latexlive.com} 等网站\textbf{在线编辑}公式,或用 \href{https://mathpix.com/snipping-tool}{Mathpix Snipping Tool} 等\textbf{从图片转换}。一般的\LaTeX{}编辑器如 TeXstudio 也都会提供语法补全。
1818

19-
{\bf{实例1:}} 以下是L-B非稳态流动升力模型,公式引用为\autoref{eqn:LBmodel}。该公式的术语列表见\autoref{tab:LB-parameters}。
19+
{\bf{实例1:}} 以下是L-B非稳态流动升力模型,公式引用为\cref{eqn:LBmodel}。该公式的术语列表见\cref{tab:LB-parameters}。
2020
\begin{equation}
2121
\label{eqn:LBmodel}
2222
C_{L} = C_{L0} + C_{L \alpha} \left( \frac{1+\sqrt{X}}{2} \right) \alpha
@@ -81,7 +81,7 @@ \subsection{定理环境}
8181
卷绕数是一个整数,它描述了曲线$\gamma$绕过点$a_k$的次数。如果$\gamma$依逆时针方向绕着$a_k$移动,卷绕数就是一个正数,
8282
如果$\gamma$根本不绕过$a_k$,卷绕数就是零。
8383

84-
\autoref{thm:res}的证明。
84+
\cref{thm:res} 的证明。
8585

8686
\begin{proof}
8787
首先,由……
@@ -124,7 +124,7 @@ \subsection{支持的图片格式}
124124

125125
在学位论文中,插图地使用简单地分为两类:单列图片和多列图片。图片的格式包含*.jpg、*.eps、*.pdf,既可以是位图也可以是矢量图,在插入图片时可以定义其高度和宽度。
126126

127-
最基本的图片插入示例可见\autoref{fig:diagram},其代码如\autoref{demo-figure1}所示。
127+
最基本的图片插入示例可见\cref{fig:diagram},其代码如\cref{raw:demo-figure1} 所示。
128128

129129
其中\verb+\centering+表示图片居中,\verb+\includegraphics[…]{…}+导入图片并指定图片大小,\verb+\caption{}+指定图片标题,而\verb+\label{…}+为图片加上引用标签。
130130

@@ -134,15 +134,15 @@ \subsection{支持的图片格式}
134134
\caption{单张图片插入的基本示例}\label{fig:diagram}
135135
\end{figure}
136136

137-
\begin{lstlisting}[language={[LaTeX]TeX}, caption={示例插图代码}, label=demo-figure1]
137+
\begin{lstlisting}[language={[LaTeX]TeX}, caption={示例插图代码}, label=raw:demo-figure1]
138138
\begin{figure}
139139
\centering
140140
\includegraphics[width=0.75\textwidth]{example-image}
141141
\caption{单张图片插入的基本示例}\label{fig:diagram}
142142
\end{figure}
143143
\end{lstlisting}
144144

145-
插入两幅图片的例子如\autoref{fig:png-jpg}所示。
145+
插入两幅图片的例子如\cref{fig:png-jpg} 所示。
146146
这两个水平并列放置的图共享一个“图标题”(table caption),没有各自的小标题。
147147

148148
\begin{figure}
@@ -170,7 +170,7 @@ \subsection{支持的图片格式}
170170
\subsection{长标题的换行}
171171
\label{sec:longcaption}
172172

173-
\autoref{fig:longcaptionbad}\autoref{fig:longcaptiongood}的标题都比较长。对比可发现\autoref{fig:longcaptiongood}的标题换行效果更好一些,
173+
\cref{fig:longcaptionbad}\cref{fig:longcaptiongood} 的标题都比较长。对比可发现\cref{fig:longcaptiongood} 的标题换行效果更好一些,
174174
它使用了minipage环境来限制整个浮动体的宽度。
175175

176176
不过在实际使用中,你可以根据排版的整体效果来自行决定。
@@ -216,11 +216,11 @@ \section{表格的例子}
216216

217217
表格的定义和引用就不多做介绍,表格内容包含在 \verb+\begin{table}+ 和 \verb+\end{table}+ 之间。这里给出一些表格的例子。
218218

219-
\textbf{\href{https://www.tablesgenerator.com/}{Tables Generator}可以用于在线生成表格}
219+
\textbf{\href{https://www.tablesgenerator.com/}{Tables Generator} 可以用于在线生成表格}
220220

221-
先以模板示例中第一章的\autoref{tab:category}为例,插入代码为\autoref{demo-table1}所示。
221+
先以模板示例中第一章的\cref{tab:category} 为例,插入代码为\cref{raw:demo-table1} 所示。
222222

223-
\begin{lstlisting}[language={[LaTeX]TeX}, caption={示例插表代码}, label=demo-table1]
223+
\begin{lstlisting}[language={[LaTeX]TeX}, caption={示例插表代码}, label=raw:demo-table1]
224224
\begin{table}
225225
\centering
226226
\caption{水系聚氨酯分类} \label{tab:category}
@@ -252,7 +252,7 @@ \section{表格的例子}
252252
\end{tabular*}
253253
\end{table}
254254

255-
另举一个两列的表格例子(\autoref{tab:LB-parameters}以及\autoref{demo-table2})。
255+
另举一个两列的表格例子(\cref{tab:LB-parameters} 以及\cref{raw:demo-table2})。
256256

257257
\begin{table} % no placement specified: defaults to here, top, bottom, page
258258
\centering
@@ -273,7 +273,7 @@ \section{表格的例子}
273273
\end{center}
274274
\end{table}
275275

276-
\begin{lstlisting}[language={[LaTeX]TeX}, caption={插入\autoref{tab:LB-parameters}}, label=demo-table2]
276+
\begin{lstlisting}[language={[LaTeX]TeX}, caption={插入\cref{tab:LB-parameters}}, label=raw:demo-table2]
277277
\begin{table}
278278
\centering
279279
\begin{center}
@@ -293,7 +293,7 @@ \section{表格的例子}
293293
\end{table}
294294
\end{lstlisting}
295295

296-
再给出一些表格的例子,如\autoref{tab:firstone}、\autoref{demo-table3}所示。
296+
再给出一些表格的例子,如\cref{tab:firstone}、\cref{raw:demo-table3} 所示。
297297

298298
\begin{table}
299299
\centering
@@ -310,7 +310,7 @@ \section{表格的例子}
310310
\end{tabular}
311311
\end{table}
312312

313-
\begin{lstlisting}[language={[LaTeX]TeX}, caption={三线表格}, label=demo-table3]
313+
\begin{lstlisting}[language={[LaTeX]TeX}, caption={三线表格}, label=raw:demo-table3]
314314
\begin{table}
315315
\centering
316316
\caption{一个标准的三线表格}
@@ -345,9 +345,9 @@ \subsection{将参考文献的内容与表现分离}
345345
.bib数据库中的参考文献条目可以手动编写,也可以在Google的学术搜索中找到。
346346
各大数据库也支持将参考文献信息导出为.bib,省时省力。
347347
以Google学术搜索为例:在搜索结果中,单击“引用 → BibTeX”链接,
348-
浏览器会打开新的标签页,出现类似\autoref{googlescholar}所示的内容。
348+
浏览器会打开新的标签页,出现类似\cref{raw:googlescholar} 所示的内容。
349349

350-
\begin{lstlisting}[caption={从Google Scholar找到的,但并不规范的.bib条目}, label=googlescholar, float, escapeinside="", numbers=none]
350+
\begin{lstlisting}[caption={从Google Scholar找到的,但并不规范的.bib条目}, label=raw:googlescholar, float, escapeinside="", numbers=none]
351351
@article{张玲2000信用风险评估方法发展趋势,
352352
title={信用风险评估方法发展趋势},
353353
author={张玲 and 张佳林},

handbook/main.tex

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,11 @@
6262

6363
\addbibresource{reference/main.bib}
6464

65-
\usepackage{hyperref}
66-
% https://bithesis.bitnp.net/faq/autoref-name.html
67-
\def\figureautorefname~#1\null{图~#1~\null}
68-
\def\chapterautorefname~#1\null{第~#1~章\null}
69-
\def\sectionautorefname~#1\null{第~#1~节\null}
70-
\def\equationautorefname~#1\null{式~(#1)~\null}
65+
\usepackage{cleveref}
66+
% https://bithesis.bitnp.net/faq/cleveref.html#customize
67+
\crefformat{equation}{式~#2(#1)#3}
68+
\crefrangeformat{equation}{式~#3(#1)#4 至~#5(#2)#6}
69+
\crefmultiformat{equation}{式~#2(#1)#3}{和~#2(#1)#3}{、#2(#1)#3}{和~#2(#1)#3}
7170

7271
\ExplSyntaxOn
7372

0 commit comments

Comments
 (0)