summaryrefslogtreecommitdiff
path: root/macros
diff options
context:
space:
mode:
Diffstat (limited to 'macros')
-rw-r--r--macros/latex/contrib/thuthesis/CHANGELOG.md22
-rw-r--r--macros/latex/contrib/thuthesis/Makefile11
-rw-r--r--macros/latex/contrib/thuthesis/data/abstract.tex1
-rw-r--r--macros/latex/contrib/thuthesis/data/appendix-survey.tex4
-rw-r--r--macros/latex/contrib/thuthesis/data/appendix-translation.tex4
-rw-r--r--macros/latex/contrib/thuthesis/data/appendix.tex1
-rw-r--r--macros/latex/contrib/thuthesis/data/chap01.tex146
-rw-r--r--macros/latex/contrib/thuthesis/data/comments.tex5
-rw-r--r--macros/latex/contrib/thuthesis/data/committee.tex49
-rw-r--r--macros/latex/contrib/thuthesis/data/resolution.tex17
-rw-r--r--macros/latex/contrib/thuthesis/figures/committee.pdfbin0 -> 35129 bytes
-rw-r--r--macros/latex/contrib/thuthesis/latexmkrc2
-rw-r--r--macros/latex/contrib/thuthesis/spine.pdfbin17319 -> 17118 bytes
-rw-r--r--macros/latex/contrib/thuthesis/thusetup.tex28
-rw-r--r--macros/latex/contrib/thuthesis/thuthesis-author-year.bbx20
-rw-r--r--macros/latex/contrib/thuthesis/thuthesis-author-year.bst530
-rw-r--r--macros/latex/contrib/thuthesis/thuthesis-author-year.cbx4
-rw-r--r--macros/latex/contrib/thuthesis/thuthesis-bachelor.bbx26
-rw-r--r--macros/latex/contrib/thuthesis/thuthesis-bachelor.bst488
-rw-r--r--macros/latex/contrib/thuthesis/thuthesis-bachelor.cbx4
-rw-r--r--macros/latex/contrib/thuthesis/thuthesis-example.pdfbin875812 -> 891653 bytes
-rw-r--r--macros/latex/contrib/thuthesis/thuthesis-example.tex54
-rw-r--r--macros/latex/contrib/thuthesis/thuthesis-inline.cbx18
-rw-r--r--macros/latex/contrib/thuthesis/thuthesis-numeric.bbx27
-rw-r--r--macros/latex/contrib/thuthesis/thuthesis-numeric.bst516
-rw-r--r--macros/latex/contrib/thuthesis/thuthesis-numeric.cbx4
-rw-r--r--macros/latex/contrib/thuthesis/thuthesis.dtx1518
-rw-r--r--macros/latex/contrib/thuthesis/thuthesis.ins23
-rw-r--r--macros/latex/contrib/thuthesis/thuthesis.pdfbin1080107 -> 1156739 bytes
-rw-r--r--macros/luatex/latex/lua-physical/README.md4
-rw-r--r--macros/luatex/latex/lua-physical/lua-physical.bib57
-rw-r--r--macros/luatex/latex/lua-physical/lua-physical.pdfbin304061 -> 303528 bytes
-rw-r--r--macros/luatex/latex/lua-physical/lua-physical.tex191
-rw-r--r--macros/luatex/latex/lua-physical/src/physical-astronomical.lua (renamed from macros/luatex/latex/lua-physical/physical/physical-astronomical.lua)0
-rw-r--r--macros/luatex/latex/lua-physical/src/physical-data.lua (renamed from macros/luatex/latex/lua-physical/physical/physical-data.lua)0
-rw-r--r--macros/luatex/latex/lua-physical/src/physical-definition.lua (renamed from macros/luatex/latex/lua-physical/physical/physical-definition.lua)0
-rw-r--r--macros/luatex/latex/lua-physical/src/physical-dimension.lua (renamed from macros/luatex/latex/lua-physical/physical/physical-dimension.lua)0
-rw-r--r--macros/luatex/latex/lua-physical/src/physical-isotope.lua (renamed from macros/luatex/latex/lua-physical/physical/physical-isotope.lua)0
-rw-r--r--macros/luatex/latex/lua-physical/src/physical-number.lua (renamed from macros/luatex/latex/lua-physical/physical/physical-number.lua)0
-rw-r--r--macros/luatex/latex/lua-physical/src/physical-quantity.lua (renamed from macros/luatex/latex/lua-physical/physical/physical-quantity.lua)14
-rw-r--r--macros/luatex/latex/lua-physical/src/physical-unit.lua (renamed from macros/luatex/latex/lua-physical/physical/physical-unit.lua)0
-rw-r--r--[-rwxr-xr-x]macros/luatex/latex/lua-physical/src/physical.lua (renamed from macros/luatex/latex/lua-physical/physical.lua)4
-rw-r--r--macros/luatex/latex/lua-physical/test/testData.lua2
-rw-r--r--macros/luatex/latex/lua-physical/test/testDefinition.lua2
-rw-r--r--macros/luatex/latex/lua-physical/test/testDimension.lua2
-rw-r--r--macros/luatex/latex/lua-physical/test/testNumber.lua2
-rw-r--r--macros/luatex/latex/lua-physical/test/testQuantity.lua2
-rw-r--r--macros/luatex/latex/lua-physical/test/testUnit.lua2
48 files changed, 2797 insertions, 1007 deletions
diff --git a/macros/latex/contrib/thuthesis/CHANGELOG.md b/macros/latex/contrib/thuthesis/CHANGELOG.md
index 336c697e0a..015689074a 100644
--- a/macros/latex/contrib/thuthesis/CHANGELOG.md
+++ b/macros/latex/contrib/thuthesis/CHANGELOG.md
@@ -6,6 +6,25 @@
## [Unreleased]
+## [v7.0.0] - 2020-09-09
+### Changed
+- 更新 2020 年版目录、插图和附表清单的格式。
+- 更新 2020 年版使用授权说明的内容。
+- 更新 2020 年版参考文献表的格式。
+
+### Added
+- 新增 2020 年版“答辩委员会名单”页。
+- 新增 biblatex 支持。
+- 新增本科生外文系格式的支持。
+
+### Fixed
+- 修正本科生密级的字体。
+- 修正表格的默认字号。
+- 修正参考文献表的行距和段前段后间距。
+- 修正 `\citep` 数字式引用的页码位置。
+- 修改摘要中关键词的格式。
+- 修正封面的语言切换。
+
## [v6.1.3] - 2020-07-09
### Added
- 新增选项 `statement-page-style = empty / plain` 同时控制声明的页眉和页脚。
@@ -605,7 +624,8 @@
-[Unreleased]: https://github.com/tuna/thuthesis/compare/v6.1.3...HEAD
+[Unreleased]: https://github.com/tuna/thuthesis/compare/v7.0.0...HEAD
+[v7.0.0]: https://github.com/tuna/thuthesis/compare/v6.1.3...v7.0.0
[v6.1.3]: https://github.com/tuna/thuthesis/compare/v6.1.2...v6.1.3
[v6.1.2]: https://github.com/tuna/thuthesis/compare/v6.1.1...v6.1.2
[v6.1.1]: https://github.com/tuna/thuthesis/compare/v6.1.0...v6.1.1
diff --git a/macros/latex/contrib/thuthesis/Makefile b/macros/latex/contrib/thuthesis/Makefile
index 1b75fed140..3ab76d06e3 100644
--- a/macros/latex/contrib/thuthesis/Makefile
+++ b/macros/latex/contrib/thuthesis/Makefile
@@ -54,13 +54,18 @@ viewspine: spine
$(LATEXMK) -pv $(SPINE)
save:
+ifeq ($(target),)
bash testfiles/save.sh
-
-savepdf:
- bash testfiles/save-pdf.sh
+else
+ bash testfiles/save.sh $(target)
+endif
test:
+ifeq ($(target),)
l3build check
+else
+ bash testfiles/test.sh $(target)
+endif
clean:
$(LATEXMK) -c $(PACKAGE).dtx $(THESIS) $(SPINE)
diff --git a/macros/latex/contrib/thuthesis/data/abstract.tex b/macros/latex/contrib/thuthesis/data/abstract.tex
index 600ce3c815..5567a1ed95 100644
--- a/macros/latex/contrib/thuthesis/data/abstract.tex
+++ b/macros/latex/contrib/thuthesis/data/abstract.tex
@@ -49,6 +49,7 @@
Key words are terms used in a dissertation for indexing, reflecting core
information of the dissertation. An abstract may contain a maximum of 5 key
words, with semi-colons used in between to separate one another.
+
\thusetup{
keywords* = {TeX, LaTeX, CJK, template, thesis},
}
diff --git a/macros/latex/contrib/thuthesis/data/appendix-survey.tex b/macros/latex/contrib/thuthesis/data/appendix-survey.tex
index a3c5ef6205..5c09088a38 100644
--- a/macros/latex/contrib/thuthesis/data/appendix-survey.tex
+++ b/macros/latex/contrib/thuthesis/data/appendix-survey.tex
@@ -119,7 +119,7 @@ extreme point is the optimal solution.
\subsection{Nonlinear Programming}
-If at least one of the functions $f(x),g_j(x),j=1,2,\cdots,p$ is nonlinear, then
+If at least one of the functions $f(x),g_j(x),j=1,2,\dots,p$ is nonlinear, then
SOP is called a \emph{nonlinear programming}.
A large number of classical optimization methods have been developed to treat
@@ -167,7 +167,7 @@ the \emph{branch-and-bound enumeration} developed by Balas (1965) and Dakin
\hfill\textit{Uncertain Programming\/}\quad(\textsl{BaoDing Liu, 2006.2})
-\bibliographystyle{plainnat}
+\bibliographystyle{unsrtnat}
\bibliography{ref/refs,ref/appendix}
\end{survey}
diff --git a/macros/latex/contrib/thuthesis/data/appendix-translation.tex b/macros/latex/contrib/thuthesis/data/appendix-translation.tex
index 9ed13da9b5..84719cc824 100644
--- a/macros/latex/contrib/thuthesis/data/appendix-translation.tex
+++ b/macros/latex/contrib/thuthesis/data/appendix-translation.tex
@@ -81,7 +81,7 @@
% 书面翻译的参考文献
-\bibliographystyle{plainnat}
+\bibliographystyle{unsrtnat}
\bibliography{ref/appendix}
% 也可以使用 thebiliography 环境手写
@@ -98,7 +98,7 @@
% 书面翻译对应的原文索引
\begin{translation-index}
\nocite{salomon1995advanced}
- \bibliographystyle{plainnat}
+ \bibliographystyle{unsrtnat}
\bibliography{ref/appendix}
\end{translation-index}
diff --git a/macros/latex/contrib/thuthesis/data/appendix.tex b/macros/latex/contrib/thuthesis/data/appendix.tex
index 38e7548ba7..179bc376a9 100644
--- a/macros/latex/contrib/thuthesis/data/appendix.tex
+++ b/macros/latex/contrib/thuthesis/data/appendix.tex
@@ -15,7 +15,6 @@
庖丁为文惠君解牛,手之所触,肩之所倚,足之所履,膝之所倚,砉然响然,奏刀騞然,莫
不中音,合于桑林之舞,乃中经首之会。
\begin{table}[ht]
-\centering
\centering
\caption{这是一个表格例子}
\label{tab:badtabular3}
diff --git a/macros/latex/contrib/thuthesis/data/chap01.tex b/macros/latex/contrib/thuthesis/data/chap01.tex
index 2dfbcf4ec0..2433747296 100644
--- a/macros/latex/contrib/thuthesis/data/chap01.tex
+++ b/macros/latex/contrib/thuthesis/data/chap01.tex
@@ -331,6 +331,85 @@ EP.B.8 & 126.74 & 0.003 & 0.017 & 0.005 & 0.083 & 1656 \\
运动的中坚人物。他们革除弊政,打击权奸,触犯了宦官和官僚贵族利益,在他们的联合反
扑下,改革失败了,柳宗元被贬为永州司马。
+\section{数学符号和公式}
+
+\subsection{数学符号}
+数学符号应遵循 GB/T 3102.11-1993《物理科学和技术中使用的数学符号》
+(原 GB 3102.11-1993),
+模板中使用 \pkg{unicode-math} 宏包来配置数学符号,
+与 \LaTeX{} 默认的英美国家的符号习惯有所差异:
+\begin{enumerate}
+ \item 大写希腊字母默认为斜体,如 \cs{Delta}:$\Delta$。
+ \item 有限增量符号 $\increment$(U+2206)应使用 \pkg{unicode-math} 宏包提供的
+ \cs{increment} 命令。
+ \item 向量、矩阵和张量要求粗斜体,应使用 \cs{symbf} 命令,
+ 如 \verb|\symbf{A}|、\verb|\symbf{\alpha}|。
+ \item 数学常数和特殊函数要求用正体,应使用 \cs{symup} 命令,
+ 如 $\symup{\pi} = 3.14\dots$; $\symup{e} = 2.718\dots$,
+ \item 微分号和积分号使用使用正体,比如 $\int f(x) \dif x$。
+\end{enumerate}
+
+关于数学符号更多的用法,参考
+\href{http://mirrors.ctan.org/macros/latex/contrib/unicode-math/unicode-math.pdf}{\pkg{unicode-math}}
+宏包的使用说明,
+全部数学符号命的令参考
+\href{http://mirrors.ctan.org/macros/latex/contrib/unicode-math/unimath-symbols.pdf}{\pkg{unimath-symbols}}。
+
+关于量和单位推荐使用
+\href{http://mirrors.ctan.org/macros/latex/contrib/siunitx/siunitx.pdf}{\pkg{siunitx}}
+宏包,比如:
+\SI{6.4e6}{m},
+\SI{9}{\micro\meter},
+\si{kg.m.s^{-1}},
+\SIrange{10}{20}{\degreeCelsius}。
+
+\subsection{数学公式}
+\label{sec:equation}
+
+贝叶斯公式如式~(\ref{equ:chap1:bayes}),其中 $p(y|\vx)$ 为后验;
+$p(\vx)$ 为先验;分母 $p(\vx)$ 为归一化因子。
+\begin{equation}
+\label{equ:chap1:bayes}
+p(y|\vx) = \frac{p(\vx,y)}{p(\vx)}=
+\frac{p(\vx|y)p(y)}{p(\vx)}
+\end{equation}
+
+论文里面公式越多,\TeX{} 就越 happy。再看一个 \pkg{amsmath} 的例子:
+\newcommand{\envert}[1]{\left\lvert#1\right\rvert}
+\begin{equation}\label{detK2}
+\det\mK(t=1,t_1,\dots,t_n)=\sum_{I\in\vn}(-1)^{\envert{I}}
+\prod_{i\in I}t_i\prod_{j\in I}(D_j+\lambda_jt_j)\det\mA
+^{(\lambda)}(\overline{I}|\overline{I})=0.
+\end{equation}
+
+前面定理示例部分列举了很多公式环境,可以说把常见的情况都覆盖了,大家在写公式的时
+候一定要好好看 \pkg{amsmath} 的文档,并参考模板中的用法:
+\begin{multline*}%\tag{[b]} % 这个出现在索引中的
+\int_a^b\biggl\{\int_a^b[f(x)^2g(y)^2+f(y)^2g(x)^2]
+ -2f(x)g(x)f(y)g(y)\dif x\biggr\}\dif y \\
+ =\int_a^b\biggl\{g(y)^2\int_a^bf^2+f(y)^2
+ \int_a^b g^2-2f(y)g(y)\int_a^b fg\biggr\}\dif y
+\end{multline*}
+
+其实还可以看看这个多级规划:
+\begin{equation}
+ \label{bilevel}
+ \begin{cases}
+ \max_{\bm{x}} F(\bm{x}, y_1^*, y_2^*, \dots, y_m^*) \\
+ \text{subject to:} \\
+ \qquad G(\bm{x}) \le 0 \\
+ \qquad (y_1^*, y_2^*, \dots, y_m^*) \text{ solves problems }
+ (i = 1, 2, \dots, m) \\
+ \qquad
+ \begin{cases}
+ \max_{\bm{x}} f_i(\bm{x}, y_1, y_2, \dots, y_m) \\
+ \text{subject to:} \\
+ \qquad g_i(\bm{x}, y_1, y_2, \dots, y_m) \le 0.
+ \end{cases}
+ \end{cases}
+\end{equation}
+这些跟规划相关的公式都来自于刘宝碇老师《不确定规划》的课件。
+
\section{定理环境}
\label{sec:theorem}
@@ -497,13 +576,11 @@ V_j & = v_j, & \qquad X_j & = x_j,
\section{参考文献}
\label{sec:bib}
-当然参考文献可以直接写 \cs{bibitem},虽然费点功夫,但是好控制,各种格式可以自己随意改
-写。
本模板推荐使用 BibTeX,分别提供数字引用(\texttt{thuthesis-numeric.bst})和作
-者年份引用(\texttt{thuthesis-author-year.bst})样式,基本符合学校的参考文献格式
-(如专利等引用未加详细测试)。看看这个例子,关于书的~\cite{tex, companion,
- ColdSources},还有这些~\cite{Krasnogor2004e, clzs, zjsw},关于杂志
+者年份引用(\texttt{thuthesis-author-year.bst})样式。
+看看这个例子,关于书的~\cite{tex, companion,
+ ColdSources},还有这些~\cite{Krasnogor2004e, clzs, zjsw},关于期刊
的~\cite{ELIDRISSI94, MELLINGER96, SHELL02},硕士论文~\cite{zhubajie,
metamori2004},博士论文~\cite{shaheshang, FistSystem01},标准文
件~\cite{IEEE-1363},会议论文~\cite{DPMG,kocher99},技术报告~\cite{NPB2},电子文
@@ -512,61 +589,6 @@ V_j & = v_j, & \qquad X_j & = x_j,
\texttt{key=\{pinyin\}} 字段,以便正确进行排序~\cite{cnproceed}。
另外,如果对参考文献有不如意的地方,请手动修改 \texttt{bbl} 文件。
-有时候不想要上标,那么可以这样~\inlinecite{shaheshang},这个非常重要。
-
-% 有时候一些参考文献没有纸质出处,需要标注 URL。缺省情况下,URL 不会在连字符处断行,
-% 这可能使得用连字符代替空格的网址分行很难看。如果需要,可以将模板类文件中
-% \begin{verbatim}
-% \RequirePackage{hyperref}
-% \end{verbatim}
-% 一行改为:
-% \begin{verbatim}
-% \PassOptionsToPackage{hyphens}{url}
-% \RequirePackage{hyperref}
-% \end{verbatim}
-% 使得连字符处可以断行。更多设置可以参考 \texttt{url} 宏包文档。
-
-\section{公式}
-\label{sec:equation}
-贝叶斯公式如式~(\ref{equ:chap1:bayes}),其中 $p(y|\vx)$ 为后验;
-$p(\vx)$ 为先验;分母 $p(\vx)$ 为归一化因子。
-\begin{equation}
-\label{equ:chap1:bayes}
-p(y|\vx) = \frac{p(\vx,y)}{p(\vx)}=
-\frac{p(\vx|y)p(y)}{p(\vx)}
-\end{equation}
-
-论文里面公式越多,\TeX{} 就越 happy。再看一个 \pkg{amsmath} 的例子:
-\begin{equation}\label{detK2}
-\det\mK(t=1,t_1,\dots,t_n)=\sum_{I\in\vn}(-1)^{\abs{I}}
-\prod_{i\in I}t_i\prod_{j\in I}(D_j+\lambda_jt_j)\det\mA
-^{(\lambda)}(\overline{I}|\overline{I})=0.
-\end{equation}
-
-前面定理示例部分列举了很多公式环境,可以说把常见的情况都覆盖了,大家在写公式的时
-候一定要好好看 \pkg{amsmath} 的文档,并参考模板中的用法:
-\begin{multline*}%\tag{[b]} % 这个出现在索引中的
-\int_a^b\biggl\{\int_a^b[f(x)^2g(y)^2+f(y)^2g(x)^2]
- -2f(x)g(x)f(y)g(y)\dif x\biggr\}\dif y \\
- =\int_a^b\biggl\{g(y)^2\int_a^bf^2+f(y)^2
- \int_a^b g^2-2f(y)g(y)\int_a^b fg\biggr\}\dif y
-\end{multline*}
+如果需要标出引文页码\cite[42]{tex},引文页码放在方括号外\cite[73]{tex}。
-其实还可以看看这个多级规划:
-\begin{equation}
- \label{bilevel}
- \begin{cases}
- \max_{\bm{x}} F(\bm{x}, y_1^*, y_2^*, \dots, y_m^*) \\
- \text{subject to:} \\
- \qquad G(\bm{x}) \le 0 \\
- \qquad (y_1^*, y_2^*, \dots, y_m^*) \text{ solves problems }
- (i = 1, 2, \dots, m) \\
- \qquad
- \begin{cases}
- \max_{\bm{x}} f_i(\bm{x}, y_1, y_2, \dots, y_m) \\
- \text{subject to:} \\
- \qquad g_i(\bm{x}, y_1, y_2, \dots, y_m) \le 0.
- \end{cases}
- \end{cases}
-\end{equation}
-这些跟规划相关的公式都来自于刘宝碇老师《不确定规划》的课件。
+有时候不想要上标,那么可以这样~\inlinecite{shaheshang}。
diff --git a/macros/latex/contrib/thuthesis/data/comments.tex b/macros/latex/contrib/thuthesis/data/comments.tex
new file mode 100644
index 0000000000..a5e172a91b
--- /dev/null
+++ b/macros/latex/contrib/thuthesis/data/comments.tex
@@ -0,0 +1,5 @@
+% !TeX root = ../thuthesis-example.tex
+
+\chapter{指导小组学术评语}
+
+论文提出了……
diff --git a/macros/latex/contrib/thuthesis/data/committee.tex b/macros/latex/contrib/thuthesis/data/committee.tex
new file mode 100644
index 0000000000..0ab96b60b1
--- /dev/null
+++ b/macros/latex/contrib/thuthesis/data/committee.tex
@@ -0,0 +1,49 @@
+% !TeX root = ../thuthesis-example.tex
+
+\begin{committee}[name={学位论文指导小组、公开评阅人和答辩委员会名单}]
+
+ \newcolumntype{C}[1]{@{}>{\centering\arraybackslash}p{#1}}
+
+ \section*{指导小组名单}
+
+ \begin{center}
+ \begin{tabular}{C{3cm}C{3cm}C{9cm}@{}}
+ 李XX & 教授 & 清华大学 \\
+ 王XX & 副教授 & 清华大学 \\
+ 张XX & 助理教授 & 清华大学 \\
+ \end{tabular}
+ \end{center}
+
+
+ \section*{公开评阅人名单}
+
+ \begin{center}
+ \begin{tabular}{C{3cm}C{3cm}C{9cm}@{}}
+ 刘XX & 教授 & 清华大学 \\
+ 陈XX & 副教授 & XXXX大学 \\
+ 杨XX & 研究员 & 中国XXXX科学院XXXXXXX研究所 \\
+ \end{tabular}
+ \end{center}
+
+
+ \section*{答辩委员会名单}
+
+ \begin{center}
+ \begin{tabular}{C{2.75cm}C{2.98cm}C{4.63cm}C{4.63cm}@{}}
+ 主席 & 赵XX & 教授 & 清华大学 \\
+ 委员 & 刘XX & 教授 & 清华大学 \\
+ & \multirow{2}{*}{杨XX} & \multirow{2}{*}{研究员} & 中国XXXX科学院 \\
+ & & & XXXXXXX研究所 \\
+ & 黄XX & 教授 & XXXX大学 \\
+ & 周XX & 副教授 & XXXX大学 \\
+ 秘书 & 吴XX & 助理研究员 & 清华大学 \\
+ \end{tabular}
+ \end{center}
+
+\end{committee}
+
+
+
+% 也可以导入 Word 版转的 PDF 文件
+% \begin{committee}[file=figures/committee.pdf]
+% \end{committee}
diff --git a/macros/latex/contrib/thuthesis/data/resolution.tex b/macros/latex/contrib/thuthesis/data/resolution.tex
new file mode 100644
index 0000000000..e3d7c3dab6
--- /dev/null
+++ b/macros/latex/contrib/thuthesis/data/resolution.tex
@@ -0,0 +1,17 @@
+% !TeX root = ../thuthesis-example.tex
+
+\chapter{答辩委员会决议书}
+
+论文提出了……
+
+论文取得的主要创新性成果包括:
+
+1. ……
+
+2. ……
+
+3. ……
+
+论文工作表明作者在×××××具有×××××知识,具有×××××能力,论文××××××××××,答辩×××××××××××××××。
+
+答辩委员会表决,(×票/一致)同意通过论文答辩,并建议授予×××(姓名)×××(门类)学博士/硕士学位。
diff --git a/macros/latex/contrib/thuthesis/figures/committee.pdf b/macros/latex/contrib/thuthesis/figures/committee.pdf
new file mode 100644
index 0000000000..37f210a115
--- /dev/null
+++ b/macros/latex/contrib/thuthesis/figures/committee.pdf
Binary files differ
diff --git a/macros/latex/contrib/thuthesis/latexmkrc b/macros/latex/contrib/thuthesis/latexmkrc
index b924b9d8b6..17e9557a5e 100644
--- a/macros/latex/contrib/thuthesis/latexmkrc
+++ b/macros/latex/contrib/thuthesis/latexmkrc
@@ -7,7 +7,7 @@ $xdvipdfmx = "xdvipdfmx -q -E -o %D %O %S";
$bibtex_use = 1.5;
-$clean_ext = "hd loe ptc synctex.gz thm xdv";
+$clean_ext = "hd loe ptc run.xml synctex.gz thm xdv";
$makeindex = "makeindex -s gind.ist %O -o %D %S";
diff --git a/macros/latex/contrib/thuthesis/spine.pdf b/macros/latex/contrib/thuthesis/spine.pdf
index f4e9ef526e..2e1e47a680 100644
--- a/macros/latex/contrib/thuthesis/spine.pdf
+++ b/macros/latex/contrib/thuthesis/spine.pdf
Binary files differ
diff --git a/macros/latex/contrib/thuthesis/thusetup.tex b/macros/latex/contrib/thuthesis/thusetup.tex
index bba4722092..997340120b 100644
--- a/macros/latex/contrib/thuthesis/thusetup.tex
+++ b/macros/latex/contrib/thuthesis/thusetup.tex
@@ -89,12 +89,6 @@
%
include-spine = false,
%
- % 生成的声明页是否要插入页眉和页脚(默认 empty)
- % 仅在需要进行电子签名时,才需要打开这一选项
- % 插入的扫描声明页总是会生成页眉(研究生)和页脚,不受这一选项影响
- %
- % statement-page-style = plain,
- %
% 密级和年限
% 秘密, 机密, 绝密
%
@@ -137,11 +131,33 @@
% \usepackage{floatflt} % 图文混排用宏包
% \usepackage{rotating} % 图形和表格的控制旋转
+% 量和单位
+\usepackage{siunitx}
+
% 定理类环境宏包
\usepackage{amsthm}
% 也可以使用 ntheorem
% \usepackage[amsmath,thmmarks,hyperref]{ntheorem}
+% 参考文献使用 BibTeX + natbib 宏包
+% 顺序编码制
+\usepackage[sort]{natbib}
+\bibliographystyle{thuthesis-numeric}
+
+% 著者-出版年制
+% \usepackage{natbib}
+% \bibliographystyle{thuthesis-author-year}
+
+% 本科生参考文献的著录格式
+% \usepackage[sort]{natbib}
+% \bibliographystyle{thuthesis-bachelor}
+
+% 参考文献使用 BibLaTeX 宏包
+% \usepackage[backend=biber,style=thuthesis-numeric]{biblatex}
+% \usepackage[backend=biber,style=thuthesis-author-year]{biblatex}
+
+% \addbibresource{ref/refs.bib} % 声明 BibLaTeX 的数据库
+
% 给自定义的宏后面自动加空白
% \usepackage{xspace}
diff --git a/macros/latex/contrib/thuthesis/thuthesis-author-year.bbx b/macros/latex/contrib/thuthesis/thuthesis-author-year.bbx
new file mode 100644
index 0000000000..47ec9ea815
--- /dev/null
+++ b/macros/latex/contrib/thuthesis/thuthesis-author-year.bbx
@@ -0,0 +1,20 @@
+\ProvidesFile{thuthesis-author-year.bbx}[2020/08/01 v1.0 ThuThesis biblatex
+ bibliography style]
+
+\RequireBibliographyStyle{gb7714-2015ay}
+
+\ExecuteBibliographyOptions{
+ gbnamefmt = lowercase,
+ gbpub = false,
+ gbalign = left,
+}
+
+\defbibenvironment{bibliography}
+ {\list
+ {}
+ {\setlength{\leftmargin}{\bibhang}%
+ \setlength{\itemindent}{-\leftmargin}%
+ \setlength{\itemsep}{\bibitemsep}%
+ \setlength{\parsep}{\bibparsep}}}
+ {\endlist}
+ {\item}
diff --git a/macros/latex/contrib/thuthesis/thuthesis-author-year.bst b/macros/latex/contrib/thuthesis/thuthesis-author-year.bst
index 071d19764f..2a361a97c2 100644
--- a/macros/latex/contrib/thuthesis/thuthesis-author-year.bst
+++ b/macros/latex/contrib/thuthesis/thuthesis-author-year.bst
@@ -4,7 +4,7 @@
%%
%% The original source files were:
%%
-%% gbt7714.dtx (with options: `thu,2005,authoryear')
+%% gbt7714.dtx (with options: `thu,2015,authoryear')
%% -------------------------------------------------------------------
%% GB/T 7714-2015 BibTeX Style
%% https://github.com/CTeX-org/gbt7714-bibtex-style
@@ -21,9 +21,14 @@
%% version 2005/12/01 or later.
%% -------------------------------------------------------------------
INTEGERS {
+ citation.et.al.min
+ citation.et.al.use.first
+ bibliography.et.al.min
+ bibliography.et.al.use.first
uppercase.name
- max.num.authors
- period.between.author.year
+ terms.in.macro
+ year.after.author
+ period.after.author
sentence.case.title
link.title
title.in.journal
@@ -32,7 +37,7 @@ INTEGERS {
show.medium.type
slash.for.extraction
in.booktitle
- abbreviate.journal
+ short.journal
italic.journal
bold.journal.volume
show.missing.address.publisher
@@ -52,25 +57,30 @@ INTEGERS {
FUNCTION {load.config}
{
+ #2 'citation.et.al.min :=
+ #1 'citation.et.al.use.first :=
+ #4 'bibliography.et.al.min :=
+ #3 'bibliography.et.al.use.first :=
#0 'uppercase.name :=
- #3 'max.num.authors :=
- #1 'period.between.author.year :=
+ #0 'terms.in.macro :=
+ #1 'year.after.author :=
+ #1 'period.after.author :=
#1 'sentence.case.title :=
#0 'link.title :=
#1 'title.in.journal :=
#1 'show.mark :=
- #1 'space.before.mark :=
+ #0 'space.before.mark :=
#1 'show.medium.type :=
#1 'slash.for.extraction :=
#0 'in.booktitle :=
- #0 'abbreviate.journal :=
+ #0 'short.journal :=
#0 'italic.journal :=
#0 'bold.journal.volume :=
#0 'show.missing.address.publisher :=
#0 'only.start.page :=
#1 'show.urldate :=
#1 'show.url :=
- #0 'show.doi :=
+ #1 'show.doi :=
#0 'show.preprint :=
#0 'show.note :=
#0 'show.english.translation :=
@@ -91,11 +101,15 @@ ENTRY
edition
editor
eprint
+ eprinttype
howpublished
institution
journal
+ journaltitle
key
+ langid
language
+ location
mark
medium
note
@@ -105,6 +119,7 @@ ENTRY
publisher
school
series
+ shortjournal
title
translation
translator
@@ -114,7 +129,7 @@ ENTRY
year
}
{ entry.lang entry.is.electronic is.pure.electronic entry.numbered }
- { label extra.label sort.label short.list entry.mark entry.url }
+ { label extra.label sort.label short.label short.list entry.mark entry.url }
INTEGERS { output.state before.all mid.sentence after.sentence after.block after.slash }
@@ -149,6 +164,9 @@ FUNCTION {bbl.space}
if$
}
+FUNCTION {bbl.and}
+{ "" }
+
FUNCTION {bbl.et.al}
{ entry.lang lang.zh =
{ "等" }
@@ -164,14 +182,25 @@ FUNCTION {bbl.et.al}
if$
}
+FUNCTION {citation.and}
+{ terms.in.macro
+ { "{\biband}" }
+ 'bbl.and
+ if$
+}
+
FUNCTION {citation.et.al}
-{ bbl.et.al }
+{ terms.in.macro
+ { "{\bibetal}" }
+ 'bbl.et.al
+ if$
+}
FUNCTION {bbl.colon} { ": " }
-FUNCTION {bbl.wide.space} { "\ " }
+FUNCTION {bbl.wide.space} { "\quad " }
-FUNCTION {bbl.slash} { " // " }
+FUNCTION {bbl.slash} { "// " }
FUNCTION {bbl.sine.loco}
{ entry.lang lang.zh =
@@ -460,16 +489,27 @@ FUNCTION {check.entry.lang}
get.str.lang
}
+STRINGS { entry.langid }
+
FUNCTION {set.entry.lang}
-{ language empty$
+{ "" 'entry.langid :=
+ language empty$ not
+ { language 'entry.langid := }
+ 'skip$
+ if$
+ langid empty$ not
+ { langid 'entry.langid := }
+ 'skip$
+ if$
+ entry.langid empty$
{ check.entry.lang }
- { language "english" = language "american" = or language "british" = or
+ { entry.langid "english" = entry.langid "american" = or entry.langid "british" = or
{ lang.en }
- { language "chinese" =
+ { entry.langid "chinese" =
{ lang.zh }
- { language "japanese" =
+ { entry.langid "japanese" =
{ lang.ja }
- { language "russian" =
+ { entry.langid "russian" =
{ lang.ru }
{ check.entry.lang }
if$
@@ -495,6 +535,25 @@ FUNCTION {set.entry.numbered}
INTEGERS { nameptr namesleft numnames name.lang }
+FUNCTION {format.name}
+{ "{vv~}{ll}{, jj}{, ff}" format.name$ 't :=
+ t "others" =
+ { bbl.et.al }
+ { t get.str.lang 'name.lang :=
+ name.lang lang.en =
+ { t #1 "{vv~}{ll}{~f{~}}" format.name$
+ uppercase.name
+ { "u" change.case$ }
+ 'skip$
+ if$
+ t #1 "{, jj}" format.name$ *
+ }
+ { t #1 "{ll}{ff}" format.name$ }
+ if$
+ }
+ if$
+}
+
FUNCTION {format.names}
{ 's :=
#1 'nameptr :=
@@ -502,31 +561,21 @@ FUNCTION {format.names}
""
numnames 'namesleft :=
{ namesleft #0 > }
- { s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ 't :=
- nameptr #1 >
- { ", " * }
- 'skip$
- if$
- nameptr max.num.authors >
- { bbl.et.al *
+ { s nameptr format.name bbl.et.al =
+ numnames bibliography.et.al.min #1 - > nameptr bibliography.et.al.use.first > and or
+ { ", " *
+ bbl.et.al *
#1 'namesleft :=
}
- { t "others" =
- { bbl.et.al * }
- { t get.str.lang 'name.lang :=
- name.lang lang.en =
- { t #1 "{vv~}{ll}{~f{~}}" format.name$
- uppercase.name
- { "u" change.case$ }
- 'skip$
- if$
- t #1 "{, jj}" format.name$ *
- }
- { t #1 "{ll}{ff}" format.name$ }
+ { nameptr #1 >
+ { namesleft #1 = bbl.and "" = not and
+ { bbl.and * }
+ { ", " * }
if$
- *
}
+ 'skip$
if$
+ s nameptr format.name *
}
if$
nameptr #1 + 'nameptr :=
@@ -920,18 +969,38 @@ FUNCTION {abbreviate}
}
FUNCTION {format.journal}
-{ journal empty$ not
- { journal
- abbreviate.journal
- 'abbreviate
- 'skip$
+{ ""
+ short.journal
+ { shortjournal empty$ not
+ { shortjournal * }
+ { journal empty$ not
+ { journal * abbreviate }
+ { journaltitle empty$ not
+ { journaltitle * abbreviate }
+ 'skip$
+ if$
+ }
+ if$
+ }
if$
- italic.journal entry.lang lang.en = and
+ }
+ { journal empty$ not
+ { journal * }
+ { journaltitle empty$ not
+ { journaltitle * }
+ 'skip$
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$ empty$ not
+ { italic.journal entry.lang lang.en = and
'italicize
'skip$
if$
}
- { "" }
+ 'skip$
if$
}
@@ -948,9 +1017,6 @@ FUNCTION {set.entry.mark}
FUNCTION {format.mark}
{ show.mark
- type$ "phdthesis" = type$ "mastersthesis" = or type$ "patent" = or
- medium empty$ not or entry.is.electronic or
- and
{ entry.mark
show.medium.type
{ medium empty$ not
@@ -967,7 +1033,7 @@ FUNCTION {format.mark}
'entry.mark :=
space.before.mark
{ " [" entry.mark * "]" * }
- { "\allowbreak[" entry.mark * "]" * }
+ { "[" entry.mark * "]" * }
if$
}
{ "" }
@@ -1036,8 +1102,15 @@ FUNCTION {format.publisher}
FUNCTION {format.address.publisher}
{ address empty$ not
- { address
- format.publisher empty$ not
+ { address }
+ { location empty$ not
+ { location }
+ { "" }
+ if$
+ }
+ if$
+ duplicate$ empty$ not
+ { format.publisher empty$ not
{ bbl.colon * format.publisher * }
{ entry.is.electronic not show.missing.address.publisher and
{ bbl.colon * bbl.sine.nomine * }
@@ -1046,7 +1119,8 @@ FUNCTION {format.address.publisher}
}
if$
}
- { entry.is.electronic not show.missing.address.publisher and
+ { pop$
+ entry.is.electronic not show.missing.address.publisher and
{ format.publisher empty$ not
{ bbl.sine.loco bbl.colon * format.publisher * }
{ bbl.sine.loco.sine.nomine }
@@ -1117,9 +1191,93 @@ FUNCTION {contains.dash}
if$
}
+FUNCTION {extract.before.slash}
+{ duplicate$ empty$
+ { pop$ "" }
+ { 's :=
+ #1 'charptr :=
+ s text.length$ #1 + 'len :=
+ { charptr len <
+ s charptr #1 substring$ "/" = not
+ and
+ }
+ { charptr #1 + 'charptr := }
+ while$
+ s #1 charptr #1 - substring$
+ }
+ if$
+}
+
+FUNCTION {extract.after.slash}
+{ duplicate$ empty$
+ { pop$ "" }
+ { 's :=
+ #1 'charptr :=
+ s text.length$ #1 + 'len :=
+ { charptr len <
+ s charptr #1 substring$ "-" = not
+ and
+ s charptr #1 substring$ "/" = not
+ and
+ }
+ { charptr #1 + 'charptr := }
+ while$
+ { charptr len <
+ s charptr #1 substring$ "-" =
+ s charptr #1 substring$ "/" =
+ or
+ and
+ }
+ { charptr #1 + 'charptr := }
+ while$
+ s charptr global.max$ substring$
+ }
+ if$
+}
+
+FUNCTION {contains.slash}
+{ duplicate$ empty$
+ { pop$ #0 }
+ { 's :=
+ { s empty$ not
+ s #1 #1 substring$ "-" = not
+ and
+ s #1 #1 substring$ "/" = not
+ and
+ }
+ { s #2 global.max$ substring$ 's := }
+ while$
+ s empty$ not
+ }
+ if$
+}
+
FUNCTION {format.year}
{ year empty$ not
- { year extract.before.dash }
+ { year extract.before.slash extra.label * }
+ { date empty$ not
+ { date extract.before.dash extra.label * }
+ { "empty year in " cite$ * warning$
+ urldate empty$ not
+ { "[" urldate extract.before.dash * extra.label * "]" * }
+ { "" }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.periodical.year}
+{ year empty$ not
+ { year extract.before.slash
+ "--" *
+ year extract.after.slash
+ duplicate$ empty$
+ 'pop$
+ { * }
+ if$
+ }
{ date empty$ not
{ date extract.before.dash }
{ "empty year in " cite$ * warning$
@@ -1131,14 +1289,15 @@ FUNCTION {format.year}
if$
}
if$
- extra.label *
}
FUNCTION {format.date}
{ type$ "patent" = type$ "newspaper" = or
date empty$ not and
{ date }
- { year }
+ { year field.or.null
+ extra.label *
+ }
if$
}
@@ -1224,7 +1383,7 @@ FUNCTION {format.journal.pages}
FUNCTION {format.periodical.year.volume.number}
{ year empty$ not
- { year extract.before.dash }
+ { year extract.before.slash }
{ "empty year in periodical " cite$ * warning$ }
if$
volume empty$ not
@@ -1235,24 +1394,20 @@ FUNCTION {format.periodical.year.volume.number}
{ "\penalty0 (" * number extract.before.dash * ")" * }
'skip$
if$
- year contains.dash
- { "--" *
- year extract.after.dash empty$
- volume extract.after.dash empty$ and
- number extract.after.dash empty$ and not
- { year extract.after.dash empty$ not
- { year extract.after.dash * }
- { year extract.before.dash * }
- if$
- volume empty$ not
- { ", " * volume extract.after.dash * }
- 'skip$
- if$
- number empty$ not
- { "\penalty0 (" * number extract.after.dash * ")" * }
- 'skip$
- if$
- }
+ "--" *
+ year extract.after.slash empty$
+ volume extract.after.dash empty$ and
+ number extract.after.dash empty$ and not
+ { year extract.after.slash empty$ not
+ { year extract.after.slash * }
+ { year extract.before.slash * }
+ if$
+ volume empty$ not
+ { ", " * volume extract.after.dash * }
+ 'skip$
+ if$
+ number empty$ not
+ { "\penalty0 (" * number extract.after.dash * ")" * }
'skip$
if$
}
@@ -1395,11 +1550,22 @@ FUNCTION {check.electronic}
}
FUNCTION {format.eprint}
-{ ""
- archivePrefix empty$ not
- { archivePrefix * ": " *
- "\eprint{https://" *
- archivePrefix "l" change.case$ * ".org/abs/" * eprint * "}{" *
+{ eprinttype empty$ not
+ { eprinttype }
+ { archivePrefix empty$ not
+ { archivePrefix }
+ { "" }
+ if$
+ }
+ if$
+ 's :=
+ s empty$ not
+ { s ": \eprint{" *
+ url empty$ not
+ { url }
+ { "https://" s "l" change.case$ * ".org/abs/" * eprint * }
+ if$
+ * "}{" *
eprint * "}" *
}
{ eprint }
@@ -1470,11 +1636,15 @@ FUNCTION {monograph}
}
if$
output
- period.between.author.year
- 'new.sentence
+ year.after.author
+ { period.after.author
+ 'new.sentence
+ 'skip$
+ if$
+ format.year "year" output.check
+ }
'skip$
if$
- format.year "year" output.check
new.block
format.series.vol.num.title "title" output.check
"M" set.entry.mark
@@ -1485,6 +1655,10 @@ FUNCTION {monograph}
format.edition output
new.block
format.address.publisher output
+ year.after.author not
+ { format.year "year" output.check }
+ 'skip$
+ if$
format.pages bbl.colon output.after
format.urldate "" output.after
output.url
@@ -1499,11 +1673,15 @@ FUNCTION {incollection}
output.translation
format.authors output
author format.key output
- period.between.author.year
- 'new.sentence
+ year.after.author
+ { period.after.author
+ 'new.sentence
+ 'skip$
+ if$
+ format.year "year" output.check
+ }
'skip$
if$
- format.year "year" output.check
new.block
format.title "title" output.check
"M" set.entry.mark
@@ -1518,6 +1696,10 @@ FUNCTION {incollection}
format.edition output
new.block
format.address.publisher output
+ year.after.author not
+ { format.year "year" output.check }
+ 'skip$
+ if$
format.extracted.pages bbl.colon output.after
format.urldate "" output.after
output.url
@@ -1532,11 +1714,15 @@ FUNCTION {periodical}
output.translation
format.authors output
author format.key output
- period.between.author.year
- 'new.sentence
+ year.after.author
+ { period.after.author
+ 'new.sentence
+ 'skip$
+ if$
+ format.year "year" output.check
+ }
'skip$
if$
- format.year "year" output.check
new.block
format.title "title" output.check
"J" set.entry.mark
@@ -1545,6 +1731,10 @@ FUNCTION {periodical}
format.periodical.year.volume.number output
new.block
format.address.publisher output
+ year.after.author not
+ { format.periodical.year "year" output.check }
+ 'skip$
+ if$
format.urldate "" output.after
output.url
output.doi
@@ -1558,11 +1748,15 @@ FUNCTION {article}
output.translation
format.authors output
author format.key output
- period.between.author.year
- 'new.sentence
+ year.after.author
+ { period.after.author
+ 'new.sentence
+ 'skip$
+ if$
+ format.year "year" output.check
+ }
'skip$
if$
- format.year "year" output.check
new.block
title.in.journal
{ format.title "title" output.check
@@ -1573,6 +1767,10 @@ FUNCTION {article}
'skip$
if$
format.journal "journal" output.check
+ year.after.author not
+ { format.date "year" output.check }
+ 'skip$
+ if$
format.journal.volume output
format.journal.number "" output.after
format.journal.pages "" output.after
@@ -1589,11 +1787,15 @@ FUNCTION {patent}
output.translation
format.authors output
author format.key output
- period.between.author.year
- 'new.sentence
+ year.after.author
+ { period.after.author
+ 'new.sentence
+ 'skip$
+ if$
+ format.year "year" output.check
+ }
'skip$
if$
- format.year "year" output.check
new.block
format.title "title" output.check
"P" set.entry.mark
@@ -1616,17 +1818,29 @@ FUNCTION {electronic}
output.translation
format.authors output
author format.key output
- period.between.author.year
- 'new.sentence
+ year.after.author
+ { period.after.author
+ 'new.sentence
+ 'skip$
+ if$
+ format.year "year" output.check
+ }
'skip$
if$
- format.year "year" output.check
new.block
format.series.vol.num.title "title" output.check
"EB" set.entry.mark
format.mark "" output.after
new.block
format.address.publisher output
+ year.after.author not
+ { date empty$
+ { format.date output }
+ 'skip$
+ if$
+ }
+ 'skip$
+ if$
format.pages bbl.colon output.after
format.editdate "" output.after
format.urldate "" output.after
@@ -1651,11 +1865,15 @@ FUNCTION {preprint}
}
if$
output
- period.between.author.year
- 'new.sentence
+ year.after.author
+ { period.after.author
+ 'new.sentence
+ 'skip$
+ if$
+ format.year "year" output.check
+ }
'skip$
if$
- format.year "year" output.check
new.block
title.in.journal
{ format.series.vol.num.title "title" output.check
@@ -1670,6 +1888,10 @@ FUNCTION {preprint}
format.edition output
new.block
output.eprint
+ year.after.author not
+ { format.year "year" output.check }
+ 'skip$
+ if$
format.pages bbl.colon output.after
format.urldate "" output.after
output.url
@@ -1689,7 +1911,8 @@ FUNCTION {misc}
'preprint
{ entry.is.electronic
'electronic
- { "Z" set.entry.mark
+ {
+ "Z" set.entry.mark
monograph
}
if$
@@ -1745,11 +1968,7 @@ FUNCTION {map}
FUNCTION {manual} { monograph }
FUNCTION {mastersthesis}
-{ lang.zh entry.lang =
- { "硕士学位论文" }
- { "D" }
- if$
- set.entry.mark
+{ "D" set.entry.mark
monograph
}
@@ -1763,14 +1982,7 @@ FUNCTION {online}
electronic
}
-FUNCTION {phdthesis}
-{ lang.zh entry.lang =
- { "博士学位论文" }
- { "D" }
- if$
- set.entry.mark
- monograph
-}
+FUNCTION {phdthesis} { mastersthesis }
FUNCTION {proceedings}
{ "C" set.entry.mark
@@ -1875,18 +2087,48 @@ FUNCTION {chop.word}
if$
}
+FUNCTION {format.lab.name}
+{ "{vv~}{ll}{, jj}{, ff}" format.name$ 't :=
+ t "others" =
+ { citation.et.al }
+ { t get.str.lang 'name.lang :=
+ name.lang lang.zh = name.lang lang.ja = or
+ { t #1 "{ll}{ff}" format.name$ }
+ { t #1 "{vv~}{ll}" format.name$ }
+ if$
+ }
+ if$
+}
+
FUNCTION {format.lab.names}
{ 's :=
- s #1 "{vv~}{ll}{, jj}{, ff}" format.name$ 't :=
- t get.str.lang 'name.lang :=
- name.lang lang.en =
- { t #1 "{vv~}{ll}" format.name$}
- { t #1 "{ll}{ff}" format.name$}
- if$
- s num.names$ #1 >
- { bbl.space * citation.et.al * }
- 'skip$
- if$
+ s #1 format.lab.name 'short.label :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ ""
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr format.lab.name citation.et.al =
+ numnames citation.et.al.min #1 - > nameptr citation.et.al.use.first > and or
+ { bbl.space *
+ citation.et.al *
+ #1 'namesleft :=
+ }
+ { nameptr #1 >
+ { namesleft #1 = citation.and "" = not and
+ { citation.and * }
+ { ", " * }
+ if$
+ }
+ 'skip$
+ if$
+ s nameptr format.lab.name *
+ }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
}
FUNCTION {author.key.label}
@@ -1946,7 +2188,8 @@ FUNCTION {editor.key.organization.label}
}
FUNCTION {calc.short.authors}
-{ type$ "book" =
+{ "" 'short.label :=
+ type$ "book" =
type$ "inbook" =
or
'author.editor.key.label
@@ -1963,6 +2206,10 @@ FUNCTION {calc.short.authors}
}
if$
'short.list :=
+ short.label empty$
+ { short.list 'short.label := }
+ 'skip$
+ if$
}
FUNCTION {calc.label}
@@ -1977,6 +2224,16 @@ FUNCTION {calc.label}
if$
*
'label :=
+ short.label
+ "("
+ *
+ format.year duplicate$ empty$
+ short.list key field.or.null = or
+ { pop$ "" }
+ 'skip$
+ if$
+ *
+ 'short.label :=
}
FUNCTION {sort.language.label}
@@ -1996,6 +2253,7 @@ FUNCTION {sort.language.label}
if$
}
if$
+ #64 +
int.to.chr$
}
@@ -2062,7 +2320,7 @@ FUNCTION {author.sort}
{ author sort.format.names }
if$
}
- { key sortify }
+ { key }
if$
}
@@ -2078,7 +2336,7 @@ FUNCTION {author.editor.sort}
{ author sort.format.names }
if$
}
- { key sortify }
+ { key }
if$
}
@@ -2094,7 +2352,7 @@ FUNCTION {author.organization.sort}
{ author sort.format.names }
if$
}
- { key sortify }
+ { key }
if$
}
@@ -2110,7 +2368,7 @@ FUNCTION {editor.organization.sort}
{ editor sort.format.names }
if$
}
- { key sortify }
+ { key }
if$
}
@@ -2124,6 +2382,8 @@ FUNCTION {presort}
" "
*
sort.language.label
+ " "
+ *
type$ "book" =
type$ "inbook" =
or
@@ -2166,13 +2426,13 @@ FUNCTION {initialize.longest.label}
}
FUNCTION {forward.pass}
-{ last.label label =
+{ last.label short.label =
{ last.extra.num #1 + 'last.extra.num :=
last.extra.num int.to.chr$ 'extra.label :=
}
{ "a" chr.to.int$ 'last.extra.num :=
"" 'extra.label :=
- label 'last.label :=
+ short.label 'last.label :=
}
if$
number.label #1 + 'number.label :=
@@ -2204,6 +2464,14 @@ FUNCTION {begin.bib}
if$
"\begin{thebibliography}{" number.label int.to.str$ * "}" *
write$ newline$
+ terms.in.macro
+ { "\providecommand{\biband}{和}"
+ write$ newline$
+ "\providecommand{\bibetal}{等}"
+ write$ newline$
+ }
+ 'skip$
+ if$
"\providecommand{\natexlab}[1]{#1}"
write$ newline$
"\providecommand{\url}[1]{#1}"
diff --git a/macros/latex/contrib/thuthesis/thuthesis-author-year.cbx b/macros/latex/contrib/thuthesis/thuthesis-author-year.cbx
new file mode 100644
index 0000000000..ae664e64eb
--- /dev/null
+++ b/macros/latex/contrib/thuthesis/thuthesis-author-year.cbx
@@ -0,0 +1,4 @@
+\ProvidesFile{thuthesis-author-year.cbx}[2020/08/01 v1.0 ThuThesis biblatex
+ citation style]
+
+\RequireCitationStyle{gb7714-2015ay}
diff --git a/macros/latex/contrib/thuthesis/thuthesis-bachelor.bbx b/macros/latex/contrib/thuthesis/thuthesis-bachelor.bbx
new file mode 100644
index 0000000000..88bb38a8b5
--- /dev/null
+++ b/macros/latex/contrib/thuthesis/thuthesis-bachelor.bbx
@@ -0,0 +1,26 @@
+\ProvidesFile{thuthesis-bachelor.bbx}[2020/08/01 v1.0 ThuThesis biblatex
+ bibliography style]
+
+\RequireBibliographyStyle{gb7714-2015}
+
+\ExecuteBibliographyOptions{
+ gbpub = false,
+ gbalign = left,
+}
+
+\defbibenvironment{bibliography}
+ {\list
+ {\printtext[labelnumberwidth]{%
+ \printfield{labelprefix}%
+ \printfield{labelnumber}}}
+ {\addtolength{\labelnumberwidth}{\biblabelextend}%
+ \setlength{\labelwidth}{0.9cm}%
+ \setlength{\labelsep}{\biblabelsep}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \addtolength{\leftmargin}{\labelsep}%
+ \setlength{\itemindent}{\bibitemindent}%
+ \setlength{\itemsep}{\bibitemsep}%
+ \setlength{\parsep}{\bibparsep}}%
+ \renewcommand*{\makelabel}[1]{\hss##1}}
+ {\endlist}
+ {\item}
diff --git a/macros/latex/contrib/thuthesis/thuthesis-bachelor.bst b/macros/latex/contrib/thuthesis/thuthesis-bachelor.bst
index bb91ba5c09..9094bc339b 100644
--- a/macros/latex/contrib/thuthesis/thuthesis-bachelor.bst
+++ b/macros/latex/contrib/thuthesis/thuthesis-bachelor.bst
@@ -21,9 +21,14 @@
%% version 2005/12/01 or later.
%% -------------------------------------------------------------------
INTEGERS {
+ citation.et.al.min
+ citation.et.al.use.first
+ bibliography.et.al.min
+ bibliography.et.al.use.first
uppercase.name
- max.num.authors
- period.between.author.year
+ terms.in.macro
+ year.after.author
+ period.after.author
sentence.case.title
link.title
title.in.journal
@@ -32,7 +37,7 @@ INTEGERS {
show.medium.type
slash.for.extraction
in.booktitle
- abbreviate.journal
+ short.journal
italic.journal
bold.journal.volume
show.missing.address.publisher
@@ -47,8 +52,14 @@ INTEGERS {
FUNCTION {load.config}
{
+ #2 'citation.et.al.min :=
+ #1 'citation.et.al.use.first :=
+ #4 'bibliography.et.al.min :=
+ #3 'bibliography.et.al.use.first :=
#1 'uppercase.name :=
- #3 'max.num.authors :=
+ #0 'terms.in.macro :=
+ #0 'year.after.author :=
+ #1 'period.after.author :=
#1 'sentence.case.title :=
#0 'link.title :=
#1 'title.in.journal :=
@@ -57,7 +68,7 @@ FUNCTION {load.config}
#1 'show.medium.type :=
#1 'slash.for.extraction :=
#0 'in.booktitle :=
- #0 'abbreviate.journal :=
+ #0 'short.journal :=
#0 'italic.journal :=
#0 'bold.journal.volume :=
#0 'show.missing.address.publisher :=
@@ -80,11 +91,15 @@ ENTRY
edition
editor
eprint
+ eprinttype
howpublished
institution
journal
+ journaltitle
key
+ langid
language
+ location
mark
medium
note
@@ -94,6 +109,7 @@ ENTRY
publisher
school
series
+ shortjournal
title
translation
translator
@@ -103,7 +119,7 @@ ENTRY
year
}
{ entry.lang entry.is.electronic is.pure.electronic entry.numbered }
- { label extra.label sort.label short.list entry.mark entry.url }
+ { label extra.label sort.label short.label short.list entry.mark entry.url }
INTEGERS { output.state before.all mid.sentence after.sentence after.block after.slash }
@@ -138,6 +154,9 @@ FUNCTION {bbl.space}
if$
}
+FUNCTION {bbl.and}
+{ "" }
+
FUNCTION {bbl.et.al}
{ entry.lang lang.zh =
{ "等" }
@@ -153,8 +172,19 @@ FUNCTION {bbl.et.al}
if$
}
+FUNCTION {citation.and}
+{ terms.in.macro
+ { "{\biband}" }
+ 'bbl.and
+ if$
+}
+
FUNCTION {citation.et.al}
-{ bbl.et.al }
+{ terms.in.macro
+ { "{\bibetal}" }
+ 'bbl.et.al
+ if$
+}
FUNCTION {bbl.colon} { ": " }
@@ -449,16 +479,27 @@ FUNCTION {check.entry.lang}
get.str.lang
}
+STRINGS { entry.langid }
+
FUNCTION {set.entry.lang}
-{ language empty$
+{ "" 'entry.langid :=
+ language empty$ not
+ { language 'entry.langid := }
+ 'skip$
+ if$
+ langid empty$ not
+ { langid 'entry.langid := }
+ 'skip$
+ if$
+ entry.langid empty$
{ check.entry.lang }
- { language "english" = language "american" = or language "british" = or
+ { entry.langid "english" = entry.langid "american" = or entry.langid "british" = or
{ lang.en }
- { language "chinese" =
+ { entry.langid "chinese" =
{ lang.zh }
- { language "japanese" =
+ { entry.langid "japanese" =
{ lang.ja }
- { language "russian" =
+ { entry.langid "russian" =
{ lang.ru }
{ check.entry.lang }
if$
@@ -484,6 +525,25 @@ FUNCTION {set.entry.numbered}
INTEGERS { nameptr namesleft numnames name.lang }
+FUNCTION {format.name}
+{ "{vv~}{ll}{, jj}{, ff}" format.name$ 't :=
+ t "others" =
+ { bbl.et.al }
+ { t get.str.lang 'name.lang :=
+ name.lang lang.en =
+ { t #1 "{vv~}{ll}{~f{~}}" format.name$
+ uppercase.name
+ { "u" change.case$ }
+ 'skip$
+ if$
+ t #1 "{, jj}" format.name$ *
+ }
+ { t #1 "{ll}{ff}" format.name$ }
+ if$
+ }
+ if$
+}
+
FUNCTION {format.names}
{ 's :=
#1 'nameptr :=
@@ -491,31 +551,21 @@ FUNCTION {format.names}
""
numnames 'namesleft :=
{ namesleft #0 > }
- { s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ 't :=
- nameptr #1 >
- { ", " * }
- 'skip$
- if$
- nameptr max.num.authors >
- { bbl.et.al *
+ { s nameptr format.name bbl.et.al =
+ numnames bibliography.et.al.min #1 - > nameptr bibliography.et.al.use.first > and or
+ { ", " *
+ bbl.et.al *
#1 'namesleft :=
}
- { t "others" =
- { bbl.et.al * }
- { t get.str.lang 'name.lang :=
- name.lang lang.en =
- { t #1 "{vv~}{ll}{~f{~}}" format.name$
- uppercase.name
- { "u" change.case$ }
- 'skip$
- if$
- t #1 "{, jj}" format.name$ *
- }
- { t #1 "{ll}{ff}" format.name$ }
+ { nameptr #1 >
+ { namesleft #1 = bbl.and "" = not and
+ { bbl.and * }
+ { ", " * }
if$
- *
}
+ 'skip$
if$
+ s nameptr format.name *
}
if$
nameptr #1 + 'nameptr :=
@@ -909,18 +959,38 @@ FUNCTION {abbreviate}
}
FUNCTION {format.journal}
-{ journal empty$ not
- { journal
- abbreviate.journal
- 'abbreviate
- 'skip$
+{ ""
+ short.journal
+ { shortjournal empty$ not
+ { shortjournal * }
+ { journal empty$ not
+ { journal * abbreviate }
+ { journaltitle empty$ not
+ { journaltitle * abbreviate }
+ 'skip$
+ if$
+ }
+ if$
+ }
if$
- italic.journal entry.lang lang.en = and
+ }
+ { journal empty$ not
+ { journal * }
+ { journaltitle empty$ not
+ { journaltitle * }
+ 'skip$
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$ empty$ not
+ { italic.journal entry.lang lang.en = and
'italicize
'skip$
if$
}
- { "" }
+ 'skip$
if$
}
@@ -953,7 +1023,7 @@ FUNCTION {format.mark}
'entry.mark :=
space.before.mark
{ " [" entry.mark * "]" * }
- { "\allowbreak[" entry.mark * "]" * }
+ { "[" entry.mark * "]" * }
if$
}
{ "" }
@@ -1022,8 +1092,15 @@ FUNCTION {format.publisher}
FUNCTION {format.address.publisher}
{ address empty$ not
- { address
- format.publisher empty$ not
+ { address }
+ { location empty$ not
+ { location }
+ { "" }
+ if$
+ }
+ if$
+ duplicate$ empty$ not
+ { format.publisher empty$ not
{ bbl.colon * format.publisher * }
{ entry.is.electronic not show.missing.address.publisher and
{ bbl.colon * bbl.sine.nomine * }
@@ -1032,7 +1109,8 @@ FUNCTION {format.address.publisher}
}
if$
}
- { entry.is.electronic not show.missing.address.publisher and
+ { pop$
+ entry.is.electronic not show.missing.address.publisher and
{ format.publisher empty$ not
{ bbl.sine.loco bbl.colon * format.publisher * }
{ bbl.sine.loco.sine.nomine }
@@ -1103,9 +1181,93 @@ FUNCTION {contains.dash}
if$
}
+FUNCTION {extract.before.slash}
+{ duplicate$ empty$
+ { pop$ "" }
+ { 's :=
+ #1 'charptr :=
+ s text.length$ #1 + 'len :=
+ { charptr len <
+ s charptr #1 substring$ "/" = not
+ and
+ }
+ { charptr #1 + 'charptr := }
+ while$
+ s #1 charptr #1 - substring$
+ }
+ if$
+}
+
+FUNCTION {extract.after.slash}
+{ duplicate$ empty$
+ { pop$ "" }
+ { 's :=
+ #1 'charptr :=
+ s text.length$ #1 + 'len :=
+ { charptr len <
+ s charptr #1 substring$ "-" = not
+ and
+ s charptr #1 substring$ "/" = not
+ and
+ }
+ { charptr #1 + 'charptr := }
+ while$
+ { charptr len <
+ s charptr #1 substring$ "-" =
+ s charptr #1 substring$ "/" =
+ or
+ and
+ }
+ { charptr #1 + 'charptr := }
+ while$
+ s charptr global.max$ substring$
+ }
+ if$
+}
+
+FUNCTION {contains.slash}
+{ duplicate$ empty$
+ { pop$ #0 }
+ { 's :=
+ { s empty$ not
+ s #1 #1 substring$ "-" = not
+ and
+ s #1 #1 substring$ "/" = not
+ and
+ }
+ { s #2 global.max$ substring$ 's := }
+ while$
+ s empty$ not
+ }
+ if$
+}
+
FUNCTION {format.year}
{ year empty$ not
- { year extract.before.dash }
+ { year extract.before.slash extra.label * }
+ { date empty$ not
+ { date extract.before.dash extra.label * }
+ { "empty year in " cite$ * warning$
+ urldate empty$ not
+ { "[" urldate extract.before.dash * extra.label * "]" * }
+ { "" }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.periodical.year}
+{ year empty$ not
+ { year extract.before.slash
+ "--" *
+ year extract.after.slash
+ duplicate$ empty$
+ 'pop$
+ { * }
+ if$
+ }
{ date empty$ not
{ date extract.before.dash }
{ "empty year in " cite$ * warning$
@@ -1117,14 +1279,15 @@ FUNCTION {format.year}
if$
}
if$
- extra.label *
}
FUNCTION {format.date}
{ type$ "patent" = type$ "newspaper" = or
date empty$ not and
{ date }
- { year }
+ { year field.or.null
+ extra.label *
+ }
if$
}
@@ -1210,7 +1373,7 @@ FUNCTION {format.journal.pages}
FUNCTION {format.periodical.year.volume.number}
{ year empty$ not
- { year extract.before.dash }
+ { year extract.before.slash }
{ "empty year in periodical " cite$ * warning$ }
if$
volume empty$ not
@@ -1221,24 +1384,20 @@ FUNCTION {format.periodical.year.volume.number}
{ "\penalty0 (" * number extract.before.dash * ")" * }
'skip$
if$
- year contains.dash
- { "--" *
- year extract.after.dash empty$
- volume extract.after.dash empty$ and
- number extract.after.dash empty$ and not
- { year extract.after.dash empty$ not
- { year extract.after.dash * }
- { year extract.before.dash * }
- if$
- volume empty$ not
- { ", " * volume extract.after.dash * }
- 'skip$
- if$
- number empty$ not
- { "\penalty0 (" * number extract.after.dash * ")" * }
- 'skip$
- if$
- }
+ "--" *
+ year extract.after.slash empty$
+ volume extract.after.dash empty$ and
+ number extract.after.dash empty$ and not
+ { year extract.after.slash empty$ not
+ { year extract.after.slash * }
+ { year extract.before.slash * }
+ if$
+ volume empty$ not
+ { ", " * volume extract.after.dash * }
+ 'skip$
+ if$
+ number empty$ not
+ { "\penalty0 (" * number extract.after.dash * ")" * }
'skip$
if$
}
@@ -1381,11 +1540,22 @@ FUNCTION {check.electronic}
}
FUNCTION {format.eprint}
-{ ""
- archivePrefix empty$ not
- { archivePrefix * ": " *
- "\eprint{https://" *
- archivePrefix "l" change.case$ * ".org/abs/" * eprint * "}{" *
+{ eprinttype empty$ not
+ { eprinttype }
+ { archivePrefix empty$ not
+ { archivePrefix }
+ { "" }
+ if$
+ }
+ if$
+ 's :=
+ s empty$ not
+ { s ": \eprint{" *
+ url empty$ not
+ { url }
+ { "https://" s "l" change.case$ * ".org/abs/" * eprint * }
+ if$
+ * "}{" *
eprint * "}" *
}
{ eprint }
@@ -1456,6 +1626,15 @@ FUNCTION {monograph}
}
if$
output
+ year.after.author
+ { period.after.author
+ 'new.sentence
+ 'skip$
+ if$
+ format.year "year" output.check
+ }
+ 'skip$
+ if$
new.block
format.series.vol.num.title "title" output.check
"M" set.entry.mark
@@ -1466,7 +1645,10 @@ FUNCTION {monograph}
format.edition output
new.block
format.address.publisher output
- format.year "year" output.check
+ year.after.author not
+ { format.year "year" output.check }
+ 'skip$
+ if$
format.pages bbl.colon output.after
format.urldate "" output.after
output.url
@@ -1481,6 +1663,15 @@ FUNCTION {incollection}
output.translation
format.authors output
author format.key output
+ year.after.author
+ { period.after.author
+ 'new.sentence
+ 'skip$
+ if$
+ format.year "year" output.check
+ }
+ 'skip$
+ if$
new.block
format.title "title" output.check
"M" set.entry.mark
@@ -1495,7 +1686,10 @@ FUNCTION {incollection}
format.edition output
new.block
format.address.publisher output
- format.year "year" output.check
+ year.after.author not
+ { format.year "year" output.check }
+ 'skip$
+ if$
format.extracted.pages bbl.colon output.after
format.urldate "" output.after
output.url
@@ -1510,6 +1704,15 @@ FUNCTION {periodical}
output.translation
format.authors output
author format.key output
+ year.after.author
+ { period.after.author
+ 'new.sentence
+ 'skip$
+ if$
+ format.year "year" output.check
+ }
+ 'skip$
+ if$
new.block
format.title "title" output.check
"J" set.entry.mark
@@ -1518,7 +1721,10 @@ FUNCTION {periodical}
format.periodical.year.volume.number output
new.block
format.address.publisher output
- format.date "year" output.check
+ year.after.author not
+ { format.periodical.year "year" output.check }
+ 'skip$
+ if$
format.urldate "" output.after
output.url
output.doi
@@ -1532,6 +1738,15 @@ FUNCTION {article}
output.translation
format.authors output
author format.key output
+ year.after.author
+ { period.after.author
+ 'new.sentence
+ 'skip$
+ if$
+ format.year "year" output.check
+ }
+ 'skip$
+ if$
new.block
title.in.journal
{ format.title "title" output.check
@@ -1542,7 +1757,10 @@ FUNCTION {article}
'skip$
if$
format.journal "journal" output.check
- format.date "year" output.check
+ year.after.author not
+ { format.date "year" output.check }
+ 'skip$
+ if$
format.journal.volume output
format.journal.number "" output.after
format.journal.pages "" output.after
@@ -1559,6 +1777,15 @@ FUNCTION {patent}
output.translation
format.authors output
author format.key output
+ year.after.author
+ { period.after.author
+ 'new.sentence
+ 'skip$
+ if$
+ format.year "year" output.check
+ }
+ 'skip$
+ if$
new.block
format.title "title" output.check
"P" set.entry.mark
@@ -1581,14 +1808,27 @@ FUNCTION {electronic}
output.translation
format.authors output
author format.key output
+ year.after.author
+ { period.after.author
+ 'new.sentence
+ 'skip$
+ if$
+ format.year "year" output.check
+ }
+ 'skip$
+ if$
new.block
format.series.vol.num.title "title" output.check
"EB" set.entry.mark
format.mark "" output.after
new.block
format.address.publisher output
- date empty$
- { format.date output }
+ year.after.author not
+ { date empty$
+ { format.date output }
+ 'skip$
+ if$
+ }
'skip$
if$
format.pages bbl.colon output.after
@@ -1615,6 +1855,15 @@ FUNCTION {preprint}
}
if$
output
+ year.after.author
+ { period.after.author
+ 'new.sentence
+ 'skip$
+ if$
+ format.year "year" output.check
+ }
+ 'skip$
+ if$
new.block
title.in.journal
{ format.series.vol.num.title "title" output.check
@@ -1629,7 +1878,10 @@ FUNCTION {preprint}
format.edition output
new.block
output.eprint
- format.year "year" output.check
+ year.after.author not
+ { format.year "year" output.check }
+ 'skip$
+ if$
format.pages bbl.colon output.after
format.urldate "" output.after
output.url
@@ -1649,7 +1901,8 @@ FUNCTION {misc}
'preprint
{ entry.is.electronic
'electronic
- { "Z" set.entry.mark
+ {
+ "Z" set.entry.mark
monograph
}
if$
@@ -1824,18 +2077,48 @@ FUNCTION {chop.word}
if$
}
+FUNCTION {format.lab.name}
+{ "{vv~}{ll}{, jj}{, ff}" format.name$ 't :=
+ t "others" =
+ { citation.et.al }
+ { t get.str.lang 'name.lang :=
+ name.lang lang.zh = name.lang lang.ja = or
+ { t #1 "{ll}{ff}" format.name$ }
+ { t #1 "{vv~}{ll}" format.name$ }
+ if$
+ }
+ if$
+}
+
FUNCTION {format.lab.names}
{ 's :=
- s #1 "{vv~}{ll}{, jj}{, ff}" format.name$ 't :=
- t get.str.lang 'name.lang :=
- name.lang lang.en =
- { t #1 "{vv~}{ll}" format.name$}
- { t #1 "{ll}{ff}" format.name$}
- if$
- s num.names$ #1 >
- { bbl.space * citation.et.al * }
- 'skip$
- if$
+ s #1 format.lab.name 'short.label :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ ""
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr format.lab.name citation.et.al =
+ numnames citation.et.al.min #1 - > nameptr citation.et.al.use.first > and or
+ { bbl.space *
+ citation.et.al *
+ #1 'namesleft :=
+ }
+ { nameptr #1 >
+ { namesleft #1 = citation.and "" = not and
+ { citation.and * }
+ { ", " * }
+ if$
+ }
+ 'skip$
+ if$
+ s nameptr format.lab.name *
+ }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
}
FUNCTION {author.key.label}
@@ -1895,7 +2178,8 @@ FUNCTION {editor.key.organization.label}
}
FUNCTION {calc.short.authors}
-{ type$ "book" =
+{ "" 'short.label :=
+ type$ "book" =
type$ "inbook" =
or
'author.editor.key.label
@@ -1912,6 +2196,10 @@ FUNCTION {calc.short.authors}
}
if$
'short.list :=
+ short.label empty$
+ { short.list 'short.label := }
+ 'skip$
+ if$
}
FUNCTION {calc.label}
@@ -1926,6 +2214,16 @@ FUNCTION {calc.label}
if$
*
'label :=
+ short.label
+ "("
+ *
+ format.year duplicate$ empty$
+ short.list key field.or.null = or
+ { pop$ "" }
+ 'skip$
+ if$
+ *
+ 'short.label :=
}
INTEGERS { seq.num }
@@ -1969,13 +2267,13 @@ FUNCTION {initialize.longest.label}
}
FUNCTION {forward.pass}
-{ last.label label =
+{ last.label short.label =
{ last.extra.num #1 + 'last.extra.num :=
last.extra.num int.to.chr$ 'extra.label :=
}
{ "a" chr.to.int$ 'last.extra.num :=
"" 'extra.label :=
- label 'last.label :=
+ short.label 'last.label :=
}
if$
number.label #1 + 'number.label :=
@@ -2007,6 +2305,14 @@ FUNCTION {begin.bib}
if$
"\begin{thebibliography}{" number.label int.to.str$ * "}" *
write$ newline$
+ terms.in.macro
+ { "\providecommand{\biband}{和}"
+ write$ newline$
+ "\providecommand{\bibetal}{等}"
+ write$ newline$
+ }
+ 'skip$
+ if$
"\providecommand{\natexlab}[1]{#1}"
write$ newline$
"\providecommand{\url}[1]{#1}"
diff --git a/macros/latex/contrib/thuthesis/thuthesis-bachelor.cbx b/macros/latex/contrib/thuthesis/thuthesis-bachelor.cbx
new file mode 100644
index 0000000000..acb8a10c94
--- /dev/null
+++ b/macros/latex/contrib/thuthesis/thuthesis-bachelor.cbx
@@ -0,0 +1,4 @@
+\ProvidesFile{thuthesis-bachelor.cbx}[2020/08/01 v1.0 ThuThesis biblatex
+ citation style]
+
+\RequireCitationStyle{gb7714-2015}
diff --git a/macros/latex/contrib/thuthesis/thuthesis-example.pdf b/macros/latex/contrib/thuthesis/thuthesis-example.pdf
index 7b6a0b2a4c..ceea3fa53c 100644
--- a/macros/latex/contrib/thuthesis/thuthesis-example.pdf
+++ b/macros/latex/contrib/thuthesis/thuthesis-example.pdf
Binary files differ
diff --git a/macros/latex/contrib/thuthesis/thuthesis-example.tex b/macros/latex/contrib/thuthesis/thuthesis-example.tex
index 24d38279d7..e3b3fd4fd4 100644
--- a/macros/latex/contrib/thuthesis/thuthesis-example.tex
+++ b/macros/latex/contrib/thuthesis/thuthesis-example.tex
@@ -10,7 +10,7 @@
% 论文基本配置,加载宏包等全局配置
-\input{thusetup.tex}
+\input{thusetup}
\begin{document}
@@ -18,17 +18,25 @@
% 封面
\maketitle
+% 学位论文指导小组、公开评阅人和答辩委员会名单
+\input{data/committee}
+
% 使用授权的说明
\copyrightpage
% 将签字扫描后授权文件 scan-copyright.pdf 替换原始页面
-% \copyrightpage[scan-copyright.pdf]
+% \copyrightpage[file=scan-copyright.pdf]
\frontmatter
-\input{data/abstract.tex}
+\input{data/abstract}
% 目录
\tableofcontents
+% 插图和附表清单
+\listoffigures % 插图清单
+% \listoftables % 附表清单
+% \listoffiguresandtables % 插图和附表清单
+
% 符号对照表
\input{data/denotation}
@@ -39,37 +47,41 @@
\input{data/chap02}
-% 其它部分
+% 其他部分
\backmatter
-%% 本科生要求的几个索引。
-% \listoffigures % 插图索引
-% \listoftables % 表格索引
-
% 参考文献
-\bibliographystyle{thuthesis-numeric} % 顺序编码制
-% \bibliographystyle{thuthesis-author-year} % 著者-出版年制
-% \bibliographystyle{thuthesis-bachelor} % 本科生参考文献的著录格式
-\bibliography{ref/refs}
+\bibliography{ref/refs} % 参考文献使用 BibTeX 编译
+% \printbibliography % 参考文献使用 BibLaTeX 编译
+
+% 附录
+\appendix
+\input{data/appendix}
+% \input{data/appendix-survey} % 本科生:外文资料的调研阅读报告
+% \input{data/appendix-translation} % 本科生:外文资料的书面翻译
% 致谢
\input{data/acknowledgements}
% 声明
\statement
+% 生成的声明页是否要插入页眉和页脚(默认 empty)
+% 仅在需要进行电子签名时,才需要打开这一选项
+% 插入的扫描声明页总是会生成页眉(研究生)和页脚,不受这一选项影响
+% \statement[page-style=plain]
% 将签字扫描后的声明文件 scan-statement.pdf 替换原始页面
-% \statement[scan-statement.pdf]
+% \statement[file=scan-statement.pdf]
-% 附录
-\appendix
-\input{data/appendix}
-% \input{data/appendix-survey} % 本科生:外文资料的调研阅读报告
-% \input{data/appendix-translation} % 本科生:外文资料的书面翻译
-
-% 个人简历
+% 个人简历、在学期间完成的相关学术成果
\input{data/resume}
+% 指导教师/指导小组学术评语
+\input{data/comments}
+
+% 答辩委员会决议书
+\input{data/resolution}
+
% 本科生的综合论文训练记录表(扫描版)
-% \record{scan-record.pdf}
+% \record{file=scan-record.pdf}
\end{document}
diff --git a/macros/latex/contrib/thuthesis/thuthesis-inline.cbx b/macros/latex/contrib/thuthesis/thuthesis-inline.cbx
new file mode 100644
index 0000000000..bec04d1d44
--- /dev/null
+++ b/macros/latex/contrib/thuthesis/thuthesis-inline.cbx
@@ -0,0 +1,18 @@
+\ProvidesFile{thuthesis-inline.cbx}[2020/08/01 v1.0 ThuThesis biblatex
+ citation style]
+
+\RequireCitationStyle{gb7714-2015}
+
+\ExecuteBibliographyOptions{
+ autocite = inline ,
+}
+
+\DeclareCiteCommand{\cite}%[\mkbibbrackets]
+ {[\usebibmacro{cite:init}%]
+ \usebibmacro{prenote}}%
+ {\usebibmacro{citeindex}%
+ \usebibmacro{cite:comp}}
+ {}
+ {%[
+ \usebibmacro{cite:dump}]%
+ \mkbibsuperscript{\printfield{postnote}}}
diff --git a/macros/latex/contrib/thuthesis/thuthesis-numeric.bbx b/macros/latex/contrib/thuthesis/thuthesis-numeric.bbx
new file mode 100644
index 0000000000..f0d6234eff
--- /dev/null
+++ b/macros/latex/contrib/thuthesis/thuthesis-numeric.bbx
@@ -0,0 +1,27 @@
+\ProvidesFile{thuthesis-numeric.bbx}[2020/08/01 v1.0 ThuThesis biblatex
+ bibliography style]
+
+\RequireBibliographyStyle{gb7714-2015}
+
+\ExecuteBibliographyOptions{
+ gbnamefmt = lowercase,
+ gbpub = false,
+ gbalign = left,
+}
+
+\defbibenvironment{bibliography}
+ {\list
+ {\printtext[labelnumberwidth]{%
+ \printfield{labelprefix}%
+ \printfield{labelnumber}}}
+ {\addtolength{\labelnumberwidth}{\biblabelextend}%
+ \setlength{\labelwidth}{0.9cm}%
+ \setlength{\labelsep}{\biblabelsep}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \addtolength{\leftmargin}{\labelsep}%
+ \setlength{\itemindent}{\bibitemindent}%
+ \setlength{\itemsep}{\bibitemsep}%
+ \setlength{\parsep}{\bibparsep}}%
+ \renewcommand*{\makelabel}[1]{\hss##1}}
+ {\endlist}
+ {\item}
diff --git a/macros/latex/contrib/thuthesis/thuthesis-numeric.bst b/macros/latex/contrib/thuthesis/thuthesis-numeric.bst
index 234b065a7d..9bb0702e39 100644
--- a/macros/latex/contrib/thuthesis/thuthesis-numeric.bst
+++ b/macros/latex/contrib/thuthesis/thuthesis-numeric.bst
@@ -4,7 +4,7 @@
%%
%% The original source files were:
%%
-%% gbt7714.dtx (with options: `thu,2005,numerical')
+%% gbt7714.dtx (with options: `thu,2015,numerical')
%% -------------------------------------------------------------------
%% GB/T 7714-2015 BibTeX Style
%% https://github.com/CTeX-org/gbt7714-bibtex-style
@@ -21,9 +21,14 @@
%% version 2005/12/01 or later.
%% -------------------------------------------------------------------
INTEGERS {
+ citation.et.al.min
+ citation.et.al.use.first
+ bibliography.et.al.min
+ bibliography.et.al.use.first
uppercase.name
- max.num.authors
- period.between.author.year
+ terms.in.macro
+ year.after.author
+ period.after.author
sentence.case.title
link.title
title.in.journal
@@ -32,7 +37,7 @@ INTEGERS {
show.medium.type
slash.for.extraction
in.booktitle
- abbreviate.journal
+ short.journal
italic.journal
bold.journal.volume
show.missing.address.publisher
@@ -47,24 +52,30 @@ INTEGERS {
FUNCTION {load.config}
{
+ #2 'citation.et.al.min :=
+ #1 'citation.et.al.use.first :=
+ #4 'bibliography.et.al.min :=
+ #3 'bibliography.et.al.use.first :=
#0 'uppercase.name :=
- #3 'max.num.authors :=
+ #0 'terms.in.macro :=
+ #0 'year.after.author :=
+ #1 'period.after.author :=
#1 'sentence.case.title :=
#0 'link.title :=
#1 'title.in.journal :=
#1 'show.mark :=
- #1 'space.before.mark :=
+ #0 'space.before.mark :=
#1 'show.medium.type :=
#1 'slash.for.extraction :=
#0 'in.booktitle :=
- #0 'abbreviate.journal :=
+ #0 'short.journal :=
#0 'italic.journal :=
#0 'bold.journal.volume :=
#0 'show.missing.address.publisher :=
#0 'only.start.page :=
#1 'show.urldate :=
#1 'show.url :=
- #0 'show.doi :=
+ #1 'show.doi :=
#0 'show.preprint :=
#0 'show.note :=
#0 'show.english.translation :=
@@ -80,11 +91,15 @@ ENTRY
edition
editor
eprint
+ eprinttype
howpublished
institution
journal
+ journaltitle
key
+ langid
language
+ location
mark
medium
note
@@ -94,6 +109,7 @@ ENTRY
publisher
school
series
+ shortjournal
title
translation
translator
@@ -103,7 +119,7 @@ ENTRY
year
}
{ entry.lang entry.is.electronic is.pure.electronic entry.numbered }
- { label extra.label sort.label short.list entry.mark entry.url }
+ { label extra.label sort.label short.label short.list entry.mark entry.url }
INTEGERS { output.state before.all mid.sentence after.sentence after.block after.slash }
@@ -138,6 +154,9 @@ FUNCTION {bbl.space}
if$
}
+FUNCTION {bbl.and}
+{ "" }
+
FUNCTION {bbl.et.al}
{ entry.lang lang.zh =
{ "等" }
@@ -153,14 +172,25 @@ FUNCTION {bbl.et.al}
if$
}
+FUNCTION {citation.and}
+{ terms.in.macro
+ { "{\biband}" }
+ 'bbl.and
+ if$
+}
+
FUNCTION {citation.et.al}
-{ bbl.et.al }
+{ terms.in.macro
+ { "{\bibetal}" }
+ 'bbl.et.al
+ if$
+}
FUNCTION {bbl.colon} { ": " }
-FUNCTION {bbl.wide.space} { "\ " }
+FUNCTION {bbl.wide.space} { "\quad " }
-FUNCTION {bbl.slash} { " // " }
+FUNCTION {bbl.slash} { "// " }
FUNCTION {bbl.sine.loco}
{ entry.lang lang.zh =
@@ -449,16 +479,27 @@ FUNCTION {check.entry.lang}
get.str.lang
}
+STRINGS { entry.langid }
+
FUNCTION {set.entry.lang}
-{ language empty$
+{ "" 'entry.langid :=
+ language empty$ not
+ { language 'entry.langid := }
+ 'skip$
+ if$
+ langid empty$ not
+ { langid 'entry.langid := }
+ 'skip$
+ if$
+ entry.langid empty$
{ check.entry.lang }
- { language "english" = language "american" = or language "british" = or
+ { entry.langid "english" = entry.langid "american" = or entry.langid "british" = or
{ lang.en }
- { language "chinese" =
+ { entry.langid "chinese" =
{ lang.zh }
- { language "japanese" =
+ { entry.langid "japanese" =
{ lang.ja }
- { language "russian" =
+ { entry.langid "russian" =
{ lang.ru }
{ check.entry.lang }
if$
@@ -484,6 +525,25 @@ FUNCTION {set.entry.numbered}
INTEGERS { nameptr namesleft numnames name.lang }
+FUNCTION {format.name}
+{ "{vv~}{ll}{, jj}{, ff}" format.name$ 't :=
+ t "others" =
+ { bbl.et.al }
+ { t get.str.lang 'name.lang :=
+ name.lang lang.en =
+ { t #1 "{vv~}{ll}{~f{~}}" format.name$
+ uppercase.name
+ { "u" change.case$ }
+ 'skip$
+ if$
+ t #1 "{, jj}" format.name$ *
+ }
+ { t #1 "{ll}{ff}" format.name$ }
+ if$
+ }
+ if$
+}
+
FUNCTION {format.names}
{ 's :=
#1 'nameptr :=
@@ -491,31 +551,21 @@ FUNCTION {format.names}
""
numnames 'namesleft :=
{ namesleft #0 > }
- { s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ 't :=
- nameptr #1 >
- { ", " * }
- 'skip$
- if$
- nameptr max.num.authors >
- { bbl.et.al *
+ { s nameptr format.name bbl.et.al =
+ numnames bibliography.et.al.min #1 - > nameptr bibliography.et.al.use.first > and or
+ { ", " *
+ bbl.et.al *
#1 'namesleft :=
}
- { t "others" =
- { bbl.et.al * }
- { t get.str.lang 'name.lang :=
- name.lang lang.en =
- { t #1 "{vv~}{ll}{~f{~}}" format.name$
- uppercase.name
- { "u" change.case$ }
- 'skip$
- if$
- t #1 "{, jj}" format.name$ *
- }
- { t #1 "{ll}{ff}" format.name$ }
+ { nameptr #1 >
+ { namesleft #1 = bbl.and "" = not and
+ { bbl.and * }
+ { ", " * }
if$
- *
}
+ 'skip$
if$
+ s nameptr format.name *
}
if$
nameptr #1 + 'nameptr :=
@@ -909,18 +959,38 @@ FUNCTION {abbreviate}
}
FUNCTION {format.journal}
-{ journal empty$ not
- { journal
- abbreviate.journal
- 'abbreviate
- 'skip$
+{ ""
+ short.journal
+ { shortjournal empty$ not
+ { shortjournal * }
+ { journal empty$ not
+ { journal * abbreviate }
+ { journaltitle empty$ not
+ { journaltitle * abbreviate }
+ 'skip$
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ { journal empty$ not
+ { journal * }
+ { journaltitle empty$ not
+ { journaltitle * }
+ 'skip$
+ if$
+ }
if$
- italic.journal entry.lang lang.en = and
+ }
+ if$
+ duplicate$ empty$ not
+ { italic.journal entry.lang lang.en = and
'italicize
'skip$
if$
}
- { "" }
+ 'skip$
if$
}
@@ -937,9 +1007,6 @@ FUNCTION {set.entry.mark}
FUNCTION {format.mark}
{ show.mark
- type$ "phdthesis" = type$ "mastersthesis" = or type$ "patent" = or
- medium empty$ not or entry.is.electronic or
- and
{ entry.mark
show.medium.type
{ medium empty$ not
@@ -956,7 +1023,7 @@ FUNCTION {format.mark}
'entry.mark :=
space.before.mark
{ " [" entry.mark * "]" * }
- { "\allowbreak[" entry.mark * "]" * }
+ { "[" entry.mark * "]" * }
if$
}
{ "" }
@@ -1025,8 +1092,15 @@ FUNCTION {format.publisher}
FUNCTION {format.address.publisher}
{ address empty$ not
- { address
- format.publisher empty$ not
+ { address }
+ { location empty$ not
+ { location }
+ { "" }
+ if$
+ }
+ if$
+ duplicate$ empty$ not
+ { format.publisher empty$ not
{ bbl.colon * format.publisher * }
{ entry.is.electronic not show.missing.address.publisher and
{ bbl.colon * bbl.sine.nomine * }
@@ -1035,7 +1109,8 @@ FUNCTION {format.address.publisher}
}
if$
}
- { entry.is.electronic not show.missing.address.publisher and
+ { pop$
+ entry.is.electronic not show.missing.address.publisher and
{ format.publisher empty$ not
{ bbl.sine.loco bbl.colon * format.publisher * }
{ bbl.sine.loco.sine.nomine }
@@ -1106,9 +1181,93 @@ FUNCTION {contains.dash}
if$
}
+FUNCTION {extract.before.slash}
+{ duplicate$ empty$
+ { pop$ "" }
+ { 's :=
+ #1 'charptr :=
+ s text.length$ #1 + 'len :=
+ { charptr len <
+ s charptr #1 substring$ "/" = not
+ and
+ }
+ { charptr #1 + 'charptr := }
+ while$
+ s #1 charptr #1 - substring$
+ }
+ if$
+}
+
+FUNCTION {extract.after.slash}
+{ duplicate$ empty$
+ { pop$ "" }
+ { 's :=
+ #1 'charptr :=
+ s text.length$ #1 + 'len :=
+ { charptr len <
+ s charptr #1 substring$ "-" = not
+ and
+ s charptr #1 substring$ "/" = not
+ and
+ }
+ { charptr #1 + 'charptr := }
+ while$
+ { charptr len <
+ s charptr #1 substring$ "-" =
+ s charptr #1 substring$ "/" =
+ or
+ and
+ }
+ { charptr #1 + 'charptr := }
+ while$
+ s charptr global.max$ substring$
+ }
+ if$
+}
+
+FUNCTION {contains.slash}
+{ duplicate$ empty$
+ { pop$ #0 }
+ { 's :=
+ { s empty$ not
+ s #1 #1 substring$ "-" = not
+ and
+ s #1 #1 substring$ "/" = not
+ and
+ }
+ { s #2 global.max$ substring$ 's := }
+ while$
+ s empty$ not
+ }
+ if$
+}
+
FUNCTION {format.year}
{ year empty$ not
- { year extract.before.dash }
+ { year extract.before.slash extra.label * }
+ { date empty$ not
+ { date extract.before.dash extra.label * }
+ { "empty year in " cite$ * warning$
+ urldate empty$ not
+ { "[" urldate extract.before.dash * extra.label * "]" * }
+ { "" }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.periodical.year}
+{ year empty$ not
+ { year extract.before.slash
+ "--" *
+ year extract.after.slash
+ duplicate$ empty$
+ 'pop$
+ { * }
+ if$
+ }
{ date empty$ not
{ date extract.before.dash }
{ "empty year in " cite$ * warning$
@@ -1120,14 +1279,15 @@ FUNCTION {format.year}
if$
}
if$
- extra.label *
}
FUNCTION {format.date}
{ type$ "patent" = type$ "newspaper" = or
date empty$ not and
{ date }
- { year }
+ { year field.or.null
+ extra.label *
+ }
if$
}
@@ -1213,7 +1373,7 @@ FUNCTION {format.journal.pages}
FUNCTION {format.periodical.year.volume.number}
{ year empty$ not
- { year extract.before.dash }
+ { year extract.before.slash }
{ "empty year in periodical " cite$ * warning$ }
if$
volume empty$ not
@@ -1224,24 +1384,20 @@ FUNCTION {format.periodical.year.volume.number}
{ "\penalty0 (" * number extract.before.dash * ")" * }
'skip$
if$
- year contains.dash
- { "--" *
- year extract.after.dash empty$
- volume extract.after.dash empty$ and
- number extract.after.dash empty$ and not
- { year extract.after.dash empty$ not
- { year extract.after.dash * }
- { year extract.before.dash * }
- if$
- volume empty$ not
- { ", " * volume extract.after.dash * }
- 'skip$
- if$
- number empty$ not
- { "\penalty0 (" * number extract.after.dash * ")" * }
- 'skip$
- if$
- }
+ "--" *
+ year extract.after.slash empty$
+ volume extract.after.dash empty$ and
+ number extract.after.dash empty$ and not
+ { year extract.after.slash empty$ not
+ { year extract.after.slash * }
+ { year extract.before.slash * }
+ if$
+ volume empty$ not
+ { ", " * volume extract.after.dash * }
+ 'skip$
+ if$
+ number empty$ not
+ { "\penalty0 (" * number extract.after.dash * ")" * }
'skip$
if$
}
@@ -1384,11 +1540,22 @@ FUNCTION {check.electronic}
}
FUNCTION {format.eprint}
-{ ""
- archivePrefix empty$ not
- { archivePrefix * ": " *
- "\eprint{https://" *
- archivePrefix "l" change.case$ * ".org/abs/" * eprint * "}{" *
+{ eprinttype empty$ not
+ { eprinttype }
+ { archivePrefix empty$ not
+ { archivePrefix }
+ { "" }
+ if$
+ }
+ if$
+ 's :=
+ s empty$ not
+ { s ": \eprint{" *
+ url empty$ not
+ { url }
+ { "https://" s "l" change.case$ * ".org/abs/" * eprint * }
+ if$
+ * "}{" *
eprint * "}" *
}
{ eprint }
@@ -1459,6 +1626,15 @@ FUNCTION {monograph}
}
if$
output
+ year.after.author
+ { period.after.author
+ 'new.sentence
+ 'skip$
+ if$
+ format.year "year" output.check
+ }
+ 'skip$
+ if$
new.block
format.series.vol.num.title "title" output.check
"M" set.entry.mark
@@ -1469,7 +1645,10 @@ FUNCTION {monograph}
format.edition output
new.block
format.address.publisher output
- format.year "year" output.check
+ year.after.author not
+ { format.year "year" output.check }
+ 'skip$
+ if$
format.pages bbl.colon output.after
format.urldate "" output.after
output.url
@@ -1484,6 +1663,15 @@ FUNCTION {incollection}
output.translation
format.authors output
author format.key output
+ year.after.author
+ { period.after.author
+ 'new.sentence
+ 'skip$
+ if$
+ format.year "year" output.check
+ }
+ 'skip$
+ if$
new.block
format.title "title" output.check
"M" set.entry.mark
@@ -1498,7 +1686,10 @@ FUNCTION {incollection}
format.edition output
new.block
format.address.publisher output
- format.year "year" output.check
+ year.after.author not
+ { format.year "year" output.check }
+ 'skip$
+ if$
format.extracted.pages bbl.colon output.after
format.urldate "" output.after
output.url
@@ -1513,6 +1704,15 @@ FUNCTION {periodical}
output.translation
format.authors output
author format.key output
+ year.after.author
+ { period.after.author
+ 'new.sentence
+ 'skip$
+ if$
+ format.year "year" output.check
+ }
+ 'skip$
+ if$
new.block
format.title "title" output.check
"J" set.entry.mark
@@ -1521,7 +1721,10 @@ FUNCTION {periodical}
format.periodical.year.volume.number output
new.block
format.address.publisher output
- format.date "year" output.check
+ year.after.author not
+ { format.periodical.year "year" output.check }
+ 'skip$
+ if$
format.urldate "" output.after
output.url
output.doi
@@ -1535,6 +1738,15 @@ FUNCTION {article}
output.translation
format.authors output
author format.key output
+ year.after.author
+ { period.after.author
+ 'new.sentence
+ 'skip$
+ if$
+ format.year "year" output.check
+ }
+ 'skip$
+ if$
new.block
title.in.journal
{ format.title "title" output.check
@@ -1545,7 +1757,10 @@ FUNCTION {article}
'skip$
if$
format.journal "journal" output.check
- format.date "year" output.check
+ year.after.author not
+ { format.date "year" output.check }
+ 'skip$
+ if$
format.journal.volume output
format.journal.number "" output.after
format.journal.pages "" output.after
@@ -1562,6 +1777,15 @@ FUNCTION {patent}
output.translation
format.authors output
author format.key output
+ year.after.author
+ { period.after.author
+ 'new.sentence
+ 'skip$
+ if$
+ format.year "year" output.check
+ }
+ 'skip$
+ if$
new.block
format.title "title" output.check
"P" set.entry.mark
@@ -1584,14 +1808,27 @@ FUNCTION {electronic}
output.translation
format.authors output
author format.key output
+ year.after.author
+ { period.after.author
+ 'new.sentence
+ 'skip$
+ if$
+ format.year "year" output.check
+ }
+ 'skip$
+ if$
new.block
format.series.vol.num.title "title" output.check
"EB" set.entry.mark
format.mark "" output.after
new.block
format.address.publisher output
- date empty$
- { format.date output }
+ year.after.author not
+ { date empty$
+ { format.date output }
+ 'skip$
+ if$
+ }
'skip$
if$
format.pages bbl.colon output.after
@@ -1618,6 +1855,15 @@ FUNCTION {preprint}
}
if$
output
+ year.after.author
+ { period.after.author
+ 'new.sentence
+ 'skip$
+ if$
+ format.year "year" output.check
+ }
+ 'skip$
+ if$
new.block
title.in.journal
{ format.series.vol.num.title "title" output.check
@@ -1632,7 +1878,10 @@ FUNCTION {preprint}
format.edition output
new.block
output.eprint
- format.year "year" output.check
+ year.after.author not
+ { format.year "year" output.check }
+ 'skip$
+ if$
format.pages bbl.colon output.after
format.urldate "" output.after
output.url
@@ -1652,7 +1901,8 @@ FUNCTION {misc}
'preprint
{ entry.is.electronic
'electronic
- { "Z" set.entry.mark
+ {
+ "Z" set.entry.mark
monograph
}
if$
@@ -1708,11 +1958,7 @@ FUNCTION {map}
FUNCTION {manual} { monograph }
FUNCTION {mastersthesis}
-{ lang.zh entry.lang =
- { "硕士学位论文" }
- { "D" }
- if$
- set.entry.mark
+{ "D" set.entry.mark
monograph
}
@@ -1726,14 +1972,7 @@ FUNCTION {online}
electronic
}
-FUNCTION {phdthesis}
-{ lang.zh entry.lang =
- { "博士学位论文" }
- { "D" }
- if$
- set.entry.mark
- monograph
-}
+FUNCTION {phdthesis} { mastersthesis }
FUNCTION {proceedings}
{ "C" set.entry.mark
@@ -1838,18 +2077,48 @@ FUNCTION {chop.word}
if$
}
+FUNCTION {format.lab.name}
+{ "{vv~}{ll}{, jj}{, ff}" format.name$ 't :=
+ t "others" =
+ { citation.et.al }
+ { t get.str.lang 'name.lang :=
+ name.lang lang.zh = name.lang lang.ja = or
+ { t #1 "{ll}{ff}" format.name$ }
+ { t #1 "{vv~}{ll}" format.name$ }
+ if$
+ }
+ if$
+}
+
FUNCTION {format.lab.names}
{ 's :=
- s #1 "{vv~}{ll}{, jj}{, ff}" format.name$ 't :=
- t get.str.lang 'name.lang :=
- name.lang lang.en =
- { t #1 "{vv~}{ll}" format.name$}
- { t #1 "{ll}{ff}" format.name$}
- if$
- s num.names$ #1 >
- { bbl.space * citation.et.al * }
- 'skip$
- if$
+ s #1 format.lab.name 'short.label :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ ""
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr format.lab.name citation.et.al =
+ numnames citation.et.al.min #1 - > nameptr citation.et.al.use.first > and or
+ { bbl.space *
+ citation.et.al *
+ #1 'namesleft :=
+ }
+ { nameptr #1 >
+ { namesleft #1 = citation.and "" = not and
+ { citation.and * }
+ { ", " * }
+ if$
+ }
+ 'skip$
+ if$
+ s nameptr format.lab.name *
+ }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
}
FUNCTION {author.key.label}
@@ -1909,7 +2178,8 @@ FUNCTION {editor.key.organization.label}
}
FUNCTION {calc.short.authors}
-{ type$ "book" =
+{ "" 'short.label :=
+ type$ "book" =
type$ "inbook" =
or
'author.editor.key.label
@@ -1926,6 +2196,10 @@ FUNCTION {calc.short.authors}
}
if$
'short.list :=
+ short.label empty$
+ { short.list 'short.label := }
+ 'skip$
+ if$
}
FUNCTION {calc.label}
@@ -1940,6 +2214,16 @@ FUNCTION {calc.label}
if$
*
'label :=
+ short.label
+ "("
+ *
+ format.year duplicate$ empty$
+ short.list key field.or.null = or
+ { pop$ "" }
+ 'skip$
+ if$
+ *
+ 'short.label :=
}
INTEGERS { seq.num }
@@ -1983,13 +2267,13 @@ FUNCTION {initialize.longest.label}
}
FUNCTION {forward.pass}
-{ last.label label =
+{ last.label short.label =
{ last.extra.num #1 + 'last.extra.num :=
last.extra.num int.to.chr$ 'extra.label :=
}
{ "a" chr.to.int$ 'last.extra.num :=
"" 'extra.label :=
- label 'last.label :=
+ short.label 'last.label :=
}
if$
number.label #1 + 'number.label :=
@@ -2021,6 +2305,14 @@ FUNCTION {begin.bib}
if$
"\begin{thebibliography}{" number.label int.to.str$ * "}" *
write$ newline$
+ terms.in.macro
+ { "\providecommand{\biband}{和}"
+ write$ newline$
+ "\providecommand{\bibetal}{等}"
+ write$ newline$
+ }
+ 'skip$
+ if$
"\providecommand{\natexlab}[1]{#1}"
write$ newline$
"\providecommand{\url}[1]{#1}"
diff --git a/macros/latex/contrib/thuthesis/thuthesis-numeric.cbx b/macros/latex/contrib/thuthesis/thuthesis-numeric.cbx
new file mode 100644
index 0000000000..d13887bf26
--- /dev/null
+++ b/macros/latex/contrib/thuthesis/thuthesis-numeric.cbx
@@ -0,0 +1,4 @@
+\ProvidesFile{thuthesis-numeric.cbx}[2020/08/01 v1.0 ThuThesis biblatex
+ citation style]
+
+\RequireCitationStyle{gb7714-2015}
diff --git a/macros/latex/contrib/thuthesis/thuthesis.dtx b/macros/latex/contrib/thuthesis/thuthesis.dtx
index f96a2d4b72..b52c7ea851 100644
--- a/macros/latex/contrib/thuthesis/thuthesis.dtx
+++ b/macros/latex/contrib/thuthesis/thuthesis.dtx
@@ -17,7 +17,7 @@
%
% \iffalse
%<*driver>
-\ProvidesFile{thuthesis.dtx}[2020/07/09 6.1.3 Tsinghua University Thesis Template]
+\ProvidesFile{thuthesis.dtx}[2020/09/09 7.0.0 Tsinghua University Thesis Template]
\documentclass{ltxdoc}
\usepackage{dtx-style}
@@ -252,9 +252,9 @@
% \begin{shell}
% $ xelatex thuthesis-example.tex
% $ bibtex thuthesis-example.aux # 生成 bbl 文件
-% $ bibtex main-survey.aux # 本科生的调研报告的参考文献
-% $ bibtex main-translation.aux # 本科生的外文资料翻译的参考文献
-% $ bibtex main-index.aux # 本科生的书面翻译对应的原文索引
+% $ bibtex thuthesis-example-survey.aux # 本科生的调研报告的参考文献
+% $ bibtex thuthesis-example-translation.aux # 本科生的外文资料翻译的参考文献
+% $ bibtex thuthesis-example-index.aux # 本科生的书面翻译对应的原文索引
% $ xelatex thuthesis-example.tex # 解决引用
% $ xelatex thuthesis-example.tex # 生成论文 PDF
%
@@ -546,7 +546,7 @@
% \begin{latex}
% \thusetup{
% secret-year = 10,
-% secret-level = {内部},
+% secret-level = {秘密},
% }
% \end{latex}
%
@@ -572,14 +572,30 @@
%
% \subsection{前言部分}
%
+% \subsubsection{指导小组、公开评阅人和答辩委员会名单}
+% \myentry{答辩委员会名单}
+% \DescribeEnv{committee}
+% 学位论文指导小组、公开评阅人和答辩委员会名单可以由 \env{committee} 环境生成,
+% 其中的可选参数可以使用 \option{name} 根据是有无指导小组设置合适的标题,比如
+% \begin{latex}
+% \begin{committee}[name={学位论文公开评阅人和答辩委员会名单}]
+% ...
+% \end{committee}
+% \end{latex}
+%
+% 答辩委员会名单中的表格使用 LaTeX 生成可能略麻烦,也可以导入 Word 版转成的 PDF 文件,
+% \begin{latex}
+% \begin{committee}[file=figures/committee.pdf]
+% \end{committee}
+% \end{latex}
+%
% \subsubsection{授权说明}
% \myentry{授权说明}
% \DescribeMacro{\copyrightpage}
-% 生成授权说明。用法:\cs{copyrightpage}\oarg{file}。
% 可选参数为扫描得到的 PDF 文件名,例如:
% \begin{latex}
% % 将签字扫描后授权文件 scan-copyright.pdf 替换原始页面
-% \copyrightpage[scan-copyright.pdf]
+% \copyrightpage[file=scan-copyright.pdf]
% \end{latex}
%
% \subsubsection{摘要}
@@ -648,6 +664,7 @@
% toc-chapter-style = times,
% }
% \end{latex}
+% 该选项只对本科生有效。
%
% \LaTeX{} 默认支持插图和表格索引,是通过 \cs{caption} 命令完成的,因此它们必须出
% 现在浮动环境中,否则不被计数。
@@ -720,8 +737,38 @@
%
% \subsection{正文部分}
%
-% \subsubsection{数学环境}
+% \subsubsection{数学符号}
% \label{sec:math}
+% 数学符号应遵循 GB/T 3102.11-1993《物理科学和技术中使用的数学符号》
+% \footnote{原 GB 3102.11-1993,根据2017年第7号公告和强制性标准整合精简结论,
+% 自2017年3月23日起,该标准转化为推荐性标准。},
+% 模板中使用 \pkg{unicode-math} 宏包来配置数学符号,
+% 与 \LaTeX{} 默认的英美国家的符号习惯有所差异:
+% \newcommand\dif{\mathop{}\!\mathrm{d}}
+% \begin{enumerate}
+% \item 大写希腊字母默认为斜体,如 \cs{Delta}:$\Delta$。
+% \item 有限增量符号 $\increment$(U+2206)应使用 \pkg{unicode-math} 宏包提供的
+% \cs{increment} 命令。
+% \item 向量、矩阵和张量要求粗斜体,应使用 \cs{symbf} 命令,
+% 如 \verb|\symbf{A}|、\verb|\symbf{\alpha}|。
+% \item 数学常数和特殊函数要求用正体,应使用 \cs{symup} 命令,
+% 如 $\symup{\pi} = 3.14\dots$; $\symup{e} = 2.718\dots$,
+% \item 微分号和积分号使用使用正体,比如 $\int f(x) \dif x$。
+% \end{enumerate}
+%
+% 关于数学符号更多的用法,参考
+% \href{http://mirrors.ctan.org/macros/latex/contrib/unicode-math/unicode-math.pdf}{\pkg{unicode-math}}
+% 宏包的使用说明,
+% 全部数学符号命的令参考
+% \href{http://mirrors.ctan.org/macros/latex/contrib/unicode-math/unimath-symbols.pdf}{\pkg{unimath-symbols}}。
+%
+% 注意,\pkg{unicode-math} 宏包与 \pkg{amsfonts}、\pkg{amssymb}、\pkg{bm}、
+% \pkg{mathrsfs}、\pkg{upgreek} 等宏包\emph{不}兼容。
+% 模板作了处理,用户可以直接使用这些宏包的命令,如 \cs{bm}、\cs{mathscr}、
+% \cs{uppi}。
+%
+% \subsubsection{定理环境}
+% \label{sec:theorem}
% \thuthesis{} 定义了常用的数学环境:
%
% \begin{center}
@@ -778,6 +825,9 @@
% (\cs{bibliographystyle},见第~\ref{sec:bibliography} 节)时,
% 正文中引用文献的标注会自动调整为对应的格式。
%
+% 如果需要标出引文的页码,可以写在 \cs{cite} 的可选参数中,如
+% |\cite[42]{knuth84}|。
+%
% \paragraph{顺序编码制}
% \DescribeMacro{\inlinecite}
% 顺序编码制的参考文献引用分为两种模式:
@@ -788,13 +838,11 @@
%
% \DescribeOption{cite-style}
% 用户可以将引用标注的格式设为正文模式:
-%
% \begin{latex}
% \thusetup{
% cite-style = inline,
% }
% \end{latex}
-%
% 也可以使用 \cs{inlinecite}\marg{key} 临时使用正文模式的引用标注。
%
% \paragraph{著者-出版年制}
@@ -805,61 +853,111 @@
% \item \cs{citet}:著者姓名作为正文的一部分,比如“Zhang (2008)”;
% \end{enumerate}
%
-% 另外还有 \cs{citeauthor}、\cs{citeyear} 等命令分别标注文献的著者姓名和年份,
-% 更多的引用文献标注法参考 \pkg{natbib} 的文档。
+% 另外,\pkg{natbib} 还提供了其他方便引用的命令,
+% 比如 \cs{citeauthor}、\cs{citeyear} 等,
+% 更多细节参考 \pkg{natbib} 的文档。
%
% \subsection{其他部分}
%
% \subsubsection{参考文献}
% \label{sec:bibliography}
%
-% 模板支持使用 \hologo{BibTeX} 处理生成参考文献表,
-% 用户需要在文中设置参考文献格式并调用 \file{.bib} 数据库:
+% 参考文献通常可以使用 \hologo{BibTeX} 或 biblatex 生成。
+% \hologo{BibTeX} 是 LaTeX 处理参考文献的传统的方式,
+% 需要在使用 \cs{bibliographystyle}\marg{style} 选择样式
+% 并用 \cs{bibliography} 设置 \file{.bib} 的路径。
+% 然后使用 \texttt{bibtex} 对 \file{.aux} 文件进行编译得到 \file{.bbl} 文件。
+% 其中的参考文献表内容会在后续编译时替换到 \cs{bibliography} 的位置。
+% Biblatex 是较新的方式,需要在载入宏包时通过 \option{style} 选择样式,
+% 在导言区使用 \cs{addbibresource} 声明数据库的路径,
+% 并在输出参考文献表的位置使用 \cs{printbibliography} 命令,
+% 而且编译参考文献的命令需要换为 biber。
+% 这两种方式各有优缺点,比如 BibTeX 无法对中文按照拼音排序,一些样式更新不够及时;
+% Biblatex 运行较缓慢,无法对多个参考文献表使用不同样式。
+% 用户需要根据实际选择合适的方式。
+%
+% 研究生要求的参考文献格式基于《信息与文献 参考文献著录规则》(GB/T 7714-2015)
+% 进行了少量改编(如英文姓名不使用全大写),
+% 可以选择“顺序编码制”和“著者-出版年制”。
+% 如果使用 BibTeX 的方式,需要在导言区载入 \pkg{natbib} 宏包并选择样式,如:
% \begin{latex}
-% \bibliographystyle{thuthesis-numeric} % 顺序编码制
-% % \bibliographystyle{thuthesis-author-year} % 著者-出版年制
-% % \bibliographystyle{thuthesis-bachelor} % 本科生参考文献的著录格式
-% \bibliography{ref1,ref2} % 载入 ref1.bib 和 ref2.bib
+% % 顺序编码制
+% \usepackage[sort]{natbib}
+% \bibliographystyle{thuthesis-numeric}
% \end{latex}
-%
-% \note[注意:]{\cs{bibliographystyle} 命令只能出现一次。}
-%
-% \hologo{BibTeX} 可以自动识别数据库中每条文献的语言,并自动处理文献类型和载体类
-% 型标识,用户也可以手动指定,如:
-%
+% 或
% \begin{latex}
-% @misc{citekey,
-% language = {japanese},
-% mark = {Z},
-% medium = {DK},
-% ...
-% }
+% % 著者-出版年制
+% \usepackage{natbib}
+% \bibliographystyle{thuthesis-author-year}
% \end{latex}
+% 其中的 \option{sort} 选项会将同一处引用的多个文献编号严格按照顺序排序,
+% 这并非《写作指南》要求,但是推荐使用。
+% 这里调用的样式由 \href{http://ctan.org/pkg/gbt7714}{\pkg{gbt7714}} 的 \file{.bst} 进行了少量修改。
%
-% 可选的语言有 \option{english}, \option{chinese}, \option{japanese} 和 \option{russian}。
-%
-% 国标规定参考文献表采用“著者-出版年”制组织时,各篇文献首先按文种集中,然后按著者字
+% 参考文献表采用“著者-出版年”制组织时,各篇文献首先按文种集中,然后按著者字
% 顺和出版年排列;中文文献可以按著者汉语拼音字顺排列,也可以按著者的笔画笔顺排列。
-% 由于 \hologo{BibTeX} 功能的局限性,无法自动获取著者姓名的拼音或笔画笔顺,所
-% 以\emph{必须}在 \file{.bib} 数据库中的 |key| 字段手动录入著者姓名的拼音,如:
+% 但由于 \hologo{BibTeX} 功能的局限性,无法自动获取著者姓名的拼音或笔画笔顺进行正确排序。
+% 一种解放方法是在 \file{.bib} 数据库的中文文献的 |key| 域手动录入著者姓名的拼音,
+% 这比较适合中文文献数量较少的情况,如:
% \begin{latex}
% @book{capital,
% author = {马克思 and 恩格斯},
-% key = {ma3 ke4 si1 en1 ge2 si1}, % 名字之间用 2 或 3 个空格
+% key = {ma3 ke4 si1 & en1 ge2 si1},
% ...
% }
% \end{latex}
+% 另一种方式是使用 biblatex,应在在导言区设置
+% \begin{latex}
+% \usepackage[backend=biber,style=thuthesis-author-year]{biblatex}
+% \addbibresource{ref/refs.bib}
+% \end{latex}
+% 这里的样式由 \href{https://ctan.org/pkg/biblatex-gb7714-2015}{biblatex-gb7714-2015} 进行了少量改编,
+% 一些额外用法可以参考该宏包的文档。
+% 注意 \pkg{biblatex} 跟 \pkg{natbib} 不兼容,
+% 而且 \cs{addbibresource} 必须在导言区设置。
+% 输出参考文献表应使用 \cs{printbibliography} 命令。
+%
+% 本科生要求的中文参考文献格式严格遵从 GB/T 7714-2015,
+% 附录中调研报告的英文参考文献可以自行选择合适的风格。
+% 但是 biblatex 不支持同一文档中使用不同的格式,
+% 所以只能使用 \hologo{BibTeX}:
+% \begin{latex}
+% % 本科生参考文献的著录格式
+% \usepackage[sort]{natbib}
+% \bibliographystyle{thuthesis-bachelor}
+% \end{latex}
+% 调研报告的参考文献需要选择与 \pkg{natbib} 兼容的样式。
%
-% \hologo{BibTeX} 对自定义样式的支持比较有限,所以用户只能通过修改 \file{bst} 文
-% 件来修改文献列表的格式。本宏包提供了一些接口供用户更方便地修改,在 \file{bst}
-% 文件开始处的 |load.config| 函数中,有一组配置参数用来控制样式。若变量被设
-% 为 |#1| 则表示该项被启用,设为 |#0| 则不启用。默认的值是严格遵循学校规定的配
-% 置。
+% 本科生外文系要求使用 APA 或 MLA。
+% APA 的 BibTeX 样式由 \pkg{apacite} 宏包提供,需要在导言区调用:
+% \begin{latex}
+% \usepackage[natbibapa]{apacite}
+% \bibliographystyle{apacite}
+% \end{latex}
+% 其中 \option{natbibapa} 会调用 \pkg{natbib} 来处理引用,
+% 这也是宏包推荐的用法。
+% 注意目前的 \pkg{apacite} 只支持到 APA 第 6 版。
+% 更推荐使用已经更新到 APA 第 7 版的 \pkg{biblatex-apa}:
+% \begin{latex}
+% \usepackage[style=apa]{biblatex}
+% \addbibresource{refs-apa.bib}
+% \end{latex}
+% 注意,如果参考文献中引用了中文文献的话,这两种方法都不能正确调整格式,
+% 需要手动进行修改 \file{.bbl} 文件的内容,
+% 这时 BibTeX 比 biblatex 更简单些。
%
+% BibTeX 没有用于 MLA 的样式,所以对于 MLA 只能使用 biblatex:
+% \begin{latex}
+% \usepackage[style=mla-new]{biblatex}
+% \addbibresource{refs-apa.bib}
+% \end{latex}
+% 注意这里 \option{mla-new} 对应于 MLA 第 8 版的格式,
+% \option{mla} 是第 7 版的。
%
% \subsubsection{致谢}
%
-% \DescribeEnv{acknowledgement}
+% \DescribeEnv{acknowledgements}
% 把致谢做成一个环境更好一些,直接往里面写感谢的话就可以啦。
%
% \begin{latex}
@@ -874,19 +972,17 @@
% 如果使用声明扫描页,将可选参数指定为扫描后的 PDF 文件名,例如:
%
% \begin{latex}
-% \statement[scan-statement.pdf]
+% \statement[file=scan-statement.pdf]
% \end{latex}
%
% 由于打印版和电子版有空白页的差别,声明的页码可能不同。
-% 所以编译声明页时默认不加页眉和页脚,
+% 所以编译声明页时默认不加页眉和页脚(\texttt{page-style=empty}),
% 在签字后插入扫描页时再补上页眉和页脚,防止页码冲突。
%
-% \DescribeOption{statement-page-style}
-% 如果需要编译时也加页码(如直接对电子版进行签名而不是插入扫描页),可以使用在 \cs{statement} 前设置
+% 如果需要编译时也加页码(如直接对电子版进行签名而不是插入扫描页),
+% 可以使用在 \cs{statement} 命令设置
% \begin{latex}
-% \thusetup{
-% statement-page-style = plain,
-% }
+% \statement[page-style=plain]
% \end{latex}
% 注意,插入扫描页总是会加页码,不受该选项控制。
%
@@ -915,8 +1011,8 @@
% 调研报告(或书面翻译)的题目和参考文献是独立于论文的,相当一篇独立的小文章,
% 所以模板相应定义了 \env{survey} 和 \env{translation}。在这两个环境内部可以
% 像论文正文一样使用标题和参考文献的命令,但不会影响外部。
-% 但是需要使用 \hologo{BibTeX} 对 \file{main-survey.aux} 或者
-% \file{main-translation.aux} 进行编译,才能生成参考文献(见 \ref{sec:xelatex} 节)。
+% 但是需要使用 \hologo{BibTeX} 对 \file{*-survey.aux} 或者
+% \file{*-translation.aux} 进行编译,才能生成参考文献(见 \ref{sec:xelatex} 节)。
% 如果使用 \texttt{latexmk},则无需额外处理。
%
% 同时,阅读报告默认切换书写语言为英语,书面翻译默认切换为中文。
@@ -934,7 +1030,7 @@
% \end{latex}
%
% “书面翻译对应的原文索引”区别于译文的参考文献,需要使用 \env{translation-index}
-% 环境,另外需要使用 \hologo{BibTeX} 编译 \file{main-index.aux},\texttt{latexmk} 同样会自动处理。
+% 环境,另外需要使用 \hologo{BibTeX} 编译 \file{*-index.aux},\texttt{latexmk} 同样会自动处理。
%
% \begin{latex}
% \begin{translation}
@@ -1019,7 +1115,7 @@
% 本科生需要在最后附上综合论文训练记录表,可以用如下命令:
%
% \begin{latex}
-% \record{scan-record.pdf}
+% \record{file=scan-record.pdf}
% \end{latex}
%
%
@@ -1083,7 +1179,7 @@
% \begin{macrocode}
%<cls>\NeedsTeXFormat{LaTeX2e}[2017/04/15]
%<cls>\ProvidesClass{thuthesis}
-%<cls>[2020/07/09 6.1.3 Tsinghua University Thesis Template]
+%<cls>[2020/09/09 7.0.0 Tsinghua University Thesis Template]
% \end{macrocode}
%
% 报错
@@ -1094,6 +1190,9 @@
\newcommand\thu@warning[1]{%
\ClassWarning{thuthesis}{#1}%
}
+\newcommand\thu@patch@error[1]{%
+ \thu@error{Failed to patch command \protect#1}%
+}
% \end{macrocode}
%
% 检查 \LaTeXe{} kernel 版本
@@ -1113,6 +1212,13 @@
\fi
% \end{macrocode}
%
+% 载入用于测试的配置。
+% \begin{macrocode}
+\InputIfFileExists{thuthesis-pdf-test-config.tex}{}{
+ \InputIfFileExists{thuthesis-log-test-config.tex}{}{}
+}
+% \end{macrocode}
+%
% \subsection{定义选项}
% \label{sec:defoption}
% 定义论文类型以及是否涉密
@@ -1120,7 +1226,7 @@
%<*cls>
\hyphenation{Thu-Thesis}
\def\thuthesis{ThuThesis}
-\def\version{6.1.3}
+\def\version{7.0.0}
\RequirePackage{kvdefinekeys}
\RequirePackage{kvsetkeys}
\RequirePackage{kvoptions}
@@ -1282,6 +1388,17 @@
%
% 论文的主要语言。
% \begin{macrocode}
+ main-language = {
+ name = main@language,
+ choices = {
+ chinese,
+ english,
+ },
+ },
+% \end{macrocode}
+%
+% 用于设置局部语言。
+% \begin{macrocode}
language = {
choices = {
chinese,
@@ -1417,6 +1534,7 @@
% 引用的宏包和相应的定义。
% \begin{macrocode}
\RequirePackage{etoolbox}
+\RequirePackage{filehook}
\RequirePackage{xparse}
% \end{macrocode}
%
@@ -1486,6 +1604,7 @@
% \cs{makebox}\oarg{width}\oarg{s} 可能产生的 underful boxes。
% \begin{macrocode}
\RequirePackage{xeCJKfntef}
+\RequirePackage{soul}
% \end{macrocode}
%
% 表格控制
@@ -1498,19 +1617,28 @@
\RequirePackage{booktabs}
% \end{macrocode}
%
-% 参考文献引用宏包。
% \begin{macrocode}
-\RequirePackage[sort&compress]{natbib}
-\RequirePackage{bibunits}
+\RequirePackage{url}
% \end{macrocode}
%
+% 如果用户在导言区未调用 \pkg{biblatex},则自动调用 \pkg{natbib}。
% \begin{macrocode}
-\RequirePackage{url}
+\AtEndPreamble{
+ \@ifpackageloaded{biblatex}{}{
+ \@ifpackageloaded{apacite}{}{
+ \RequirePackage{natbib}
+ }
+ }
+}
+\AtEndOfPackageFile*{natbib}{
+ \@ifpackageloaded{apacite}{}{
+ \RequirePackage{bibunits}
+ }
+}
% \end{macrocode}
%
% 对冲突的宏包报错。
% \begin{macrocode}
-\RequirePackage{filehook}
\newcommand\thu@package@conflict[2]{
\AtBeginOfPackageFile*{#2}{
\thu@error{The "#2" package is incompatible with required "#1"}
@@ -1541,9 +1669,9 @@
%
% \begin{macrocode}
\geometry{
- a4paper, % 210 * 297mm
+ paper = a4paper, % 210 * 297mm
marginparwidth = 2cm,
- marginparsep = 0.5cm
+ marginparsep = 0.5cm,
}
\newcommand\thu@set@geometry{%
\ifthu@degree@bachelor
@@ -1616,7 +1744,6 @@
\cleardoublepage
\@mainmatterfalse
\pagenumbering{Roman}%
- \let\@tabular\thu@tabular
}
\renewcommand\mainmatter{%
\cleardoublepage
@@ -1629,7 +1756,8 @@
\else
\clearpage
\fi
- \@mainmattertrue}
+ \@mainmatterfalse
+}
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -2144,14 +2272,17 @@
% 保存为论文的主要语言;
% \cs{thu@reset@main@language} 则用于正文中恢复为主要语言。
% \begin{macrocode}
+\thusetup{main-language=\thu@language}%
\let\thu@main@language\thu@language
\thu@option@hook{language}{%
\ifx\@begindocumenthook\@undefined\else
+ \thusetup{main-language=\thu@language}%
\let\thu@main@language\thu@language
\fi
}
-\newcommand\thu@reset@main@language{
- \thusetup{language = \thu@main@language}
+\newcommand\thu@reset@main@language{%
+ \thusetup{language = \thu@main@language}%
+ \let\thu@language\thu@main@language
}
% \end{macrocode}
%
@@ -2159,59 +2290,78 @@
% \option{language} 时会修改,而在正文局部切换语言时则不变。
% \begin{macrocode}
\newcommand\thu@set@chapter@names{%
- \ifthu@language@chinese
+ \ifthu@main@language@chinese
\ctexset{
chapter/name = {第,章},
- appendixname = 附录,
- contentsname = 目\hspace{\ccwd}录,
- listfigurename = 插图索引,
- listtablename = 表格索引,
- bibname = 参考文献,
- indexname = 索引,
}%
- \def\thu@denotation@name{主要符号对照表}%
- \def\thu@list@algorithm@name{算法索引}%
- \def\listequationname{公式索引}%
+ \def\bibname{参考文献}%
+ \def\appendixname{附录}%
+ \def\indexname{索引}%
\def\thu@acknowledgements@name{致\hspace{\ccwd}谢}%
\ifthu@degree@bachelor
+ \def\contentsname{目\hspace{\ccwd}录}%
+ \def\listfigurename{插图索引}%
+ \def\listtablename{表格索引}%
+ \def\thu@list@figure@table@name{插图和附表索引}%
+ \def\thu@list@algorithm@name{算法索引}%
+ \def\listequationname{公式索引}%
+ \def\thu@denotation@name{主要符号对照表}%
\def\thu@resume@name{在学期间参加课题的研究成果}%
\else
- \ifthu@degree@postdoc
+ \def\listfigurename{插图清单}%
+ \def\listtablename{附表清单}%
+ \def\thu@list@figure@table@name{插图和附表清单}%
+ \def\thu@list@algorithm@name{算法清单}%
+ \def\listequationname{公式清单}%
+ \ifthu@degree@graduate
+ \def\contentsname{目\hspace{\ccwd}录}%
+ \def\thu@toc@contents@name{目录}%
+ \def\thu@denotation@name{符号和缩略语说明}%
+ \def\thu@resume@name{个人简历、在学期间完成的相关学术成果}%
+ \else % degree = postdoc
+ \def\contentsname{目\hspace{2\ccwd}次}%
+ \def\thu@denotation@name{符号表}%
\def\thu@resume@name{个人简历、发表的学术论文与科研成果}%
- \else
- \def\thu@resume@name{个人简历、在学期间发表的学术论文与研究成果}%
\fi
\fi
\else
- \ifthu@language@english
+ \ifthu@main@language@english
\ctexset{
chapter/name = \chaptername\space,
- appendixname = Appendix,
- contentsname = Contents,
- listfigurename = List of Figures,
- listtablename = List of Tables,
- bibname = Bibliography,
- indexname = Index,
}%
- \def\thu@denotation@name{Nomenclature}%
- \def\thu@list@algorithm@name{List of Algorithms}%
- \def\listequationname{List of Equations}%
- \def\thu@acknowledgements@name{Acknowledgements}%
+ \def\indexname{Index}%
\ifthu@degree@bachelor
- \def\thu@resume@name{Research Achievements}%
+ \def\contentsname{CONTENTS}%
+ \def\listfigurename{FIGURES}%
+ \def\listtablename{TABLES}%
+ \def\thu@list@figure@table@name{FIGURES AND TABLES}%
+ \def\thu@list@algorithm@name{ALGORITHMS}%
+ \def\listequationname{EQUATIONS}%
+ \def\thu@denotation@name{ABBREVIATIONS}%
+ \def\bibname{REFERENCES}%
+ \def\appendixname{APPENDIX}%
+ \def\thu@acknowledgements@name{ACKNOWLEDGEMENTS}%
+ \def\thu@resume@name{PUBLICATIONS}%
\else
- \def\thu@resume@name{Resume, Publications and Research Achievements}%
+ \def\contentsname{Contents}%
+ \def\thu@toc@contents@name{Contents}%
+ \def\listfigurename{List of Figures}%
+ \def\listtablename{List of Tables}%
+ \def\thu@list@figure@table@name{List of Figures and Tables}%
+ \def\thu@list@algorithm@name{List of Algorithms}%
+ \def\listequationname{List of Equations}%
+ \def\thu@denotation@name{Nomenclature}%
+ \def\bibname{Bibliography}%
+ \def\appendixname{Appendix}%
+ \def\thu@acknowledgements@name{Acknowledgements}%
+ \def\thu@resume@name{Resume and Academic Achievements}%
\fi
\fi
\fi
}
\thu@set@chapter@names
\thu@option@hook{degree}{\thu@set@chapter@names}
-\thu@option@hook{language}{%
- \ifx\@begindocumenthook\@undefined\else
- \thu@set@chapter@names
- \fi
-}
+\thu@option@hook{main-language}{\thu@set@chapter@names}
% \end{macrocode}
%
% 这部分名称在正文中局部地修改语言时会发生变化,比如英文摘要、
@@ -2331,17 +2481,26 @@
\renewcommand\footrulewidth{0pt}%
\ifthu@degree@bachelor
\renewcommand\headrulewidth{0pt}%
- \fancyfoot[C]{\xiaowu\thepage}%
+ \fancyfoot[C]{
+ \ifthu@main@language@chinese
+ \xiaowu
+ \else
+ \normalsize
+ \fi
+ \thepage
+ }%
\let\@mkboth\@gobbletwo
+ \let\chaptermark\@gobble
\else
\renewcommand\headrulewidth{0.75bp}%
\fancyhead[C]{\wuhao\leftmark}%
\fancyfoot[C]{\wuhao\thepage}%
\let\@mkboth\markboth
+ \def\chaptermark##1{%
+ \markboth{\CTEXifname{\CTEXthechapter\hskip\ccwd}{}##1}{}%
+ }%
\fi
- \def\chaptermark##1{%
- \markboth{\CTEXifname{\CTEXthechapter\hskip\ccwd}{}##1}{}%
- }%
+ \let\sectionmark\@gobble
}
\pagestyle{plain}
% \end{macrocode}
@@ -2360,7 +2519,21 @@
\ctexset{%
punct=quanjiao,
space=auto,
- autoindent=true}
+}
+\newcommand\thu@set@indent{%
+ \ifthu@main@language@english
+ \ifthu@degree@bachelor
+ \ctexset{autoindent=0.8cm}%
+ \else
+ \ctexset{autoindent=2}%
+ \fi
+ \else
+ \ctexset{autoindent=2}%
+ \fi
+}
+\thu@set@indent
+\thu@option@hook{degree}{\thu@set@indent}
+\thu@option@hook{main-language}{\thu@set@indent}
% \end{macrocode}
%
% 利用 \pkg{enumitem} 命令调整默认列表环境间的距离,以符合中文习惯。
@@ -2558,7 +2731,7 @@
\renewcommand{\eqref}[1]{\textup{(\ref{#1})}}
% \end{macrocode}
%
-% \subsubsection{浮动对象以及表格}
+% \subsubsection{浮动对象:插图和表格}
% \label{sec:float}
% 设置浮动对象和文字之间的距离
% \begin{macrocode}
@@ -2579,6 +2752,16 @@
\renewcommand{\floatpagefraction}{0.60}
% \end{macrocode}
%
+% 研究生要求表单元格中的文字采用 11pt 宋体字,单倍行距,段前空 3 磅,段后空 3 磅。
+% \begin{macrocode}
+\patchcmd\@floatboxreset{%
+ \normalsize
+}{%
+ \fontsize{11bp}{14.3bp}\selectfont
+ \renewcommand\arraystretch{1.2}%
+}{}{\thu@patch@error{\@floatboxreset}}
+% \end{macrocode}
+%
% 定制浮动图形和表格标题样式,以及改变附录中浮动体的编号规则:
% \begin{itemize}
% \item 图表标题字体为 11pt, 这里写作大五号
@@ -2596,10 +2779,7 @@
\fi
% \end{macrocode}
%
-% 研究生要求表单元格中的文字采用 11pt 宋体字,单倍行距,段前空 3 磅,段后空 3 磅。
% \begin{macrocode}
-\let\old@tabular\@tabular
-\def\thu@tabular{\dawu[1.5]\old@tabular}
\DeclareCaptionFont{thu}{\dawu}
\DeclareCaptionLabelSeparator{thu}{\hspace{\ccwd}}
\captionsetup{
@@ -2649,65 +2829,165 @@
% \end{macrocode}
%
% 各级标题格式设置。
-% \begin{description}
-% \item[chapter] 章序号与章名之间空一个汉字符 黑体三号字,居中书写,单倍行距,段
-% 前空 24 磅,段后空 18 磅。本科要求:段前段后间距 30/20 pt,行距 20pt。但正文
-% 章节 30pt 的话和样例效果不一致。
-%
-% \item[section] 一级节标题,例如:\fbox{2.1 实验装置与实验方法}。节标题序号与标
-% 题名之间空一个汉字符(下同)。采用黑体四号(14pt)字居左书写,行距为固定
-% 值 20 磅,段前空 24 磅,段后空 6 磅。本科:25/12 pt,行距 18pt。
-%
-% \item[subsection] 二级节标题,例如:\fbox{2.1.1 实验装置}。采用黑体 13pt 字居左
-% 书写,行距为固定值 20 磅,段前空 12 磅,段后空 6 磅。本科:中文黑体 12pt 字,
-% 英文 13pt 字,段间距 12/6 pt,行距 15pt。
-%
-% \item[subsubsection] 三级节标题,例如:\fbox{2.1.2.1 归纳法}。采用黑体小四号
-% (12pt)字居左书写,行距为固定值 20 磅,段前空 12 磅,段后空 6 磅。
-%
-% \end{description}
% \begin{macrocode}
-\newcommand\thu@chapter@titleformat[1]{%
- \ifthu@degree@bachelor #1\else%
- \ifthenelse%
- {\equal{#1}{\thu@abstract@name@en}}%
- {\bfseries #1}%
- {#1}%
- \fi}
\ctexset{%
- chapter={
- afterindent=true,
- beforeskip={\ifthu@degree@bachelor 15bp\else 9bp\fi},
- aftername=\hskip\ccwd,
- afterskip={\ifthu@degree@bachelor 20bp\else 24bp\fi},
- format={\centering\sffamily\ifthu@degree@bachelor\xiaosan[1.333]\else\sanhao[1]\fi},
- nameformat=\relax,
- numberformat=\relax,
- titleformat=\thu@chapter@titleformat,
- lofskip=0pt,
- lotskip=0pt,
+ chapter = {
+ nameformat = {},
+ numberformat = {},
+ titleformat = {},
+ aftername = \quad,
+ fixskip = true,
+ afterindent = true,
+ lofskip = 0pt,
+ lotskip = 0pt,
},
- section={
- afterindent=true,
- beforeskip={\ifthu@degree@bachelor 25bp\else 24bp\fi\@plus 1ex \@minus .2ex},
- afterskip={\ifthu@degree@bachelor 12bp\else 6bp\fi \@plus .2ex},
- format={\sffamily\ifthu@degree@bachelor\sihao[1.286]\else\sihao[1.429]\fi},
+ section = {
+ aftername = \quad,
+ afterindent = true,
},
- subsection={
- afterindent=true,
- beforeskip={\ifthu@degree@bachelor 12bp\else 16bp\fi\@plus 1ex \@minus .2ex},
- afterskip={6bp \@plus .2ex},
- format={\sffamily\ifthu@degree@bachelor\xiaosi[1.25]\else\banxiaosi[1.538]\fi},
- numberformat={\sffamily\ifthu@degree@bachelor\banxiaosi[1.154]\else\banxiaosi[1.538]\fi},
+ subsection = {
+ aftername = \quad,
+ afterindent = true,
},
- subsubsection={
- afterindent=true,
- beforeskip={\ifthu@degree@bachelor 12bp\else 16bp\fi\@plus 1ex \@minus .2ex},
- afterskip={6bp \@plus .2ex},
- format={\sffamily\ifthu@degree@bachelor\xiaosi[1.25]\else\xiaosi[1.667]\fi},
+ subsubsection = {
+ aftername = \quad,
+ afterindent = true,
},
- paragraph/afterindent=true,
- subparagraph/afterindent=true}
+ paragraph/afterindent = true,
+ subparagraph/afterindent = true,
+}
+% \end{macrocode}
+%
+% 本科生要求:
+% \begin{center}
+% \begin{tabular}{lclll}
+% \toprule
+% 标题 & 中文 & 英文 & 段前/后间距 & 行距 \\
+% \midrule
+% 一级节标题 & 黑体小三号 & Arial 15pt & 30/20 pt & 20pt \\
+% 二级节标题 & 黑体四号 & Arial 14pt & 25/12 pt & 18pt \\
+% 三级节标题 & 黑体小四号 & Arial 13pt & 12/6 pt & 15pt \\
+% 四级节标题 & 黑体小四号 & Arial 12pt & 12/6 pt & \\
+% \bottomrule
+% \end{tabular}
+% \end{center}
+%
+% 这里三级节标题的“中文黑体小四号”和“英文 Arial 13pt”不一致,取 13pt。
+% \begin{macrocode}
+\newcommand\thu@set@section@format{%
+ \ifthu@degree@bachelor
+ \ctexset{%
+ chapter = {
+ format = \centering\sffamily\fontsize{15bp}{20bp}\selectfont,
+ beforeskip = 30bp,
+ afterskip = 20bp,
+ },
+ section = {
+ format = \sffamily\fontsize{14bp}{18bp}\selectfont,
+ beforeskip = 25bp,
+ afterskip = 12bp,
+ },
+ subsection = {
+ format = \sffamily\fontsize{13bp}{15bp}\selectfont,
+ beforeskip = 12bp,
+ afterskip = 6bp,
+ },
+ subsubsection = {
+ format = \sffamily\fontsize{12bp}{14bp}\selectfont,
+ beforeskip = 12bp,
+ afterskip = 6bp,
+ },
+ }%
+ \ifthu@main@language@chinese
+ \ctexset{chapter/number = \thechapter}%
+ \else
+ \ctexset{chapter/number = \thu@english@number{chapter}}%
+ \fi
+% \end{macrocode}
+%
+% 研究生要求:
+% \begin{itemize}
+% \item 各章标题,例如:“\textsf{第 1 章 引言}”。
+%
+% 章序号与章名之间空一个汉字符。
+% 采用黑体三号字,居中书写,单倍行距,
+% 段前空 24 磅,段后空 18 磅。
+%
+% \item 一级节标题,例如:“\textsf{2.1 实验装置与实验方法}”。
+%
+% 节标题序号与标题名之间空一个汉字符(下同)。
+% 采用黑体四号(14pt)字居左书写,行距为固定值 20 磅,
+% 段前空 24 磅,段后空 6 磅。
+%
+% \item 二级节标题,例如:“\textsf{2.1.1 实验装置}”。
+%
+% 采用黑体 13pt 字居左书写,行距为固定值 20 磅,
+% 段前空 12 磅,段后空 6 磅。
+%
+% \item 三级节标题,例如:“\textsf{2.1.2.1 归纳法}”。
+%
+% 采用黑体小四号(12pt)字居左书写,行距为固定值 20 磅,
+% 段前空 12 磅,段后空 6 磅。
+% \end{itemize}
+%
+% 由于 Word 模板中开启了“对齐到网格”,实际的段前段后距离有所调整。
+% \begin{macrocode}
+ \else
+ \ctexset{%
+ chapter = {
+ format = \centering\sffamily\sanhao,
+ beforeskip = 32bp,
+ afterskip = 32bp,
+ },
+ section = {
+ format = \sffamily\fontsize{14bp}{20bp}\selectfont,
+ beforeskip = 24bp,
+ afterskip = 6bp,
+ },
+ subsection = {
+ format = \sffamily\fontsize{13bp}{20bp}\selectfont,
+ beforeskip = 12bp,
+ afterskip = 6bp,
+ },
+ subsubsection = {
+ format = \sffamily\fontsize{12bp}{20bp}\selectfont,
+ beforeskip = 12bp,
+ afterskip = 6bp,
+ },
+ }%
+ \fi
+}
+\thu@set@section@format
+\thu@option@hook{degree}{\thu@set@section@format}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand\thu@english@number[1]{%
+ \expandafter\ifcase\csname c@#1\endcsname
+ Zero\or
+ One\or
+ Two\or
+ Three\or
+ Four\or
+ Five\or
+ Six\or
+ Seven\or
+ Eight\or
+ Nine\or
+ Ten\or
+ Eleven\or
+ Twelve\or
+ Thirteen\or
+ Fourteen\or
+ Fifteen\or
+ Sixteen\or
+ Seventeen\or
+ Eighteen\or
+ Nineteen\or
+ Twenty\or
+ \thu@error{You are genius}%
+ \fi
+}
% \end{macrocode}
%
% \begin{macro}{\thu@chapter*}
@@ -2724,7 +3004,7 @@
% \begin{macrocode}
\newcommand\thu@pdfbookmark[2]{}
\newcommand\thu@phantomsection{}
-\NewDocumentCommand\thu@chapter{s o m o}{
+\NewDocumentCommand\thu@chapter{s o m o}{%
\IfBooleanF{#1}{%
\thu@error{You have to use the star form: \string\thu@chapter*}%
}%
@@ -2734,15 +3014,15 @@
\thu@pdfbookmark{0}{#3}%
}{%
\thu@phantomsection
- \addcontentsline{toc}{chapter}{#3}%
+ \addcontentsline{toc}{chapter}{#2}%
}%
}{%
\thu@phantomsection
\addcontentsline{toc}{chapter}{#3}%
}%
- \ifthu@degree@bachelor\ctexset{chapter/beforeskip=25bp}\fi
+ \ifthu@degree@bachelor\ctexset{chapter/beforeskip=40bp}\fi
\chapter*{#3}%
- \ifthu@degree@bachelor\ctexset{chapter/beforeskip=15bp}\fi
+ \ifthu@degree@bachelor\ctexset{chapter/beforeskip=30bp}\fi
\IfValueTF{#4}{%
\ifthenelse{\equal{#4}{}}{%
\@mkboth{}{}%
@@ -2770,7 +3050,11 @@
% 目录生成命令。
% \begin{macrocode}
\renewcommand\tableofcontents{%
- \thu@chapter*[]{\contentsname}%
+ \ifthu@degree@graduate
+ \thu@chapter*[\thu@toc@contents@name]{\contentsname}%
+ \else
+ \thu@chapter*[]{\contentsname}%
+ \fi
\@starttoc{toc}%
}
\thu@define@key{
@@ -2797,24 +3081,45 @@
% 示例中的一级和二级节标题分别缩进 1 和 1.5 个汉字符。
% \begin{macrocode}
\ifthu@degree@bachelor
- \titlecontents{chapter}
- [\z@]{\addvspace{6bp}
- \ifthu@toc@chapter@style@arial
- \sffamily
- \else
- \heiti
- \fi
- }
- {\contentspush{\thecontentslabel\hspace{\ccwd}}}{}
- {\rmfamily\thu@leaders\thecontentspage}%
- \titlecontents{section}
- [1\ccwd]{}
- {\contentspush{\thecontentslabel\hspace{\ccwd}}}{}
- {\thu@leaders\thecontentspage}%
- \titlecontents{subsection}
- [1.5\ccwd]{}
- {\contentspush{\thecontentslabel\hspace{\ccwd}}}{}
- {\thu@leaders\thecontentspage}%
+ \ifthu@main@language@chinese
+ \titlecontents{chapter}
+ [\z@]{\addvspace{6bp}
+ \ifthu@toc@chapter@style@arial
+ \sffamily
+ \else
+ \heiti
+ \fi
+ }
+ {\contentspush{\thecontentslabel\quad}}{}
+ {\rmfamily\thu@leaders\thecontentspage}%
+ \titlecontents{section}
+ [1em]{}
+ {\contentspush{\thecontentslabel\quad}}{}
+ {\thu@leaders\thecontentspage}%
+ \titlecontents{subsection}
+ [1.5em]{}
+ {\contentspush{\thecontentslabel\quad}}{}
+ {\thu@leaders\thecontentspage}%
+ \else
+% \end{macrocode}
+%
+% 本科生英文专业要求“左侧按级依次缩进 0.5cm”。
+% \begin{macrocode}
+ \ifthu@main@language@english
+ \titlecontents{chapter}
+ [\z@]{\addvspace{6bp}\sffamily}
+ {\contentspush{\thecontentslabel\quad}}{}
+ {\rmfamily\thu@leaders\thecontentspage}%
+ \titlecontents{section}
+ [0.5cm]{}
+ {\contentspush{\thecontentslabel\quad}}{}
+ {\thu@leaders\thecontentspage}%
+ \titlecontents{subsection}
+ [1cm]{}
+ {\contentspush{\thecontentslabel\quad}}{}
+ {\thu@leaders\thecontentspage}%
+ \fi
+ \fi
% \end{macrocode}
%
% 研究生:
@@ -2831,16 +3136,22 @@
% \begin{macrocode}
\else
\titlecontents{chapter}
- [\z@]{\addvspace{6bp}\sffamily}
- {\contentspush{\thecontentslabel\hspace{\ccwd}}}{}
+ [\z@]{\addvspace{6bp}
+ \ifthu@main@language@chinese
+ \heiti
+ \else
+ \sffamily
+ \fi
+ }
+ {\contentspush{\thecontentslabel\quad}}{}
{\rmfamily\thu@leaders\thecontentspage}%
\titlecontents{section}
- [1\ccwd]{}
- {\contentspush{\thecontentslabel\hspace{\ccwd}}}{}
+ [1em]{}
+ {\contentspush{\thecontentslabel\quad}}{}
{\thu@leaders\thecontentspage}%
\titlecontents{subsection}
- [2\ccwd]{}
- {\contentspush{\thecontentslabel\hspace{\ccwd}}}{}
+ [2em]{}
+ {\contentspush{\thecontentslabel\quad}}{}
{\thu@leaders\thecontentspage}%
\fi
}
@@ -3097,6 +3408,7 @@
% layout 一样,所以按照 \cs{thu@discipline}(工程领域)是否为空来区分“工程硕士”。
% \begin{macrocode}
\newcommand\thu@titlepage{%
+ \thusetup{language = chinese}%
\ifthu@degree@graduate
\ifthu@degree@type@academic
\thu@titlepage@graduate@academic
@@ -3118,6 +3430,7 @@
\fi
\fi
\fi
+ \thu@reset@main@language
}
% \end{macrocode}
% \end{macro}
@@ -3324,11 +3637,13 @@
hmargin = 3.6cm,
}%
\thispagestyle{empty}%
+ \thusetup{language = english}%
\ifthu@degree@type@academic
\thu@titlepage@en@graduate@academic
\else
\thu@titlepage@en@graduate@professional
\fi
+ \thu@reset@main@language
\clearpage
\restoregeometry
}
@@ -3445,63 +3760,75 @@
hmargin = 3.17cm,
}%
\thispagestyle{empty}%
- \null\vskip 0.44cm%
\begingroup
\centering
- \parbox[t][2cm][t]{\textwidth}{%
+ \parbox[t][0cm][t]{\textwidth}{%
\hfill
- \sffamily\CJKfamily+{}\xiaosi
- \ifx\thu@secret@level\@empty
- \phantom{秘密}%
- \else
- \thu@secret@level\makebox[3em][c]{\thu@secret@year}年%
- \fi\par
- }\par
- \begingroup
- \includegraphics{tsinghua-name-bachelor.pdf}%
- \par
- \endgroup
+ \CJKfamily+{}\xiaosi
+ \ifx\thu@secret@level\@empty\else
+ \thu@secret@level\space\thu@secret@year 年\par
+ \fi
+ }%
+ \endgroup
+ \vfill
+ \begingroup
+ \centering
+ \includegraphics{tsinghua-name-bachelor.pdf}%
\vskip 0.94cm%
{\sffamily\bfseries\xiaochu\ziju{0.5}综合论文训练\par}%
- \vskip 2.3cm%
- \parbox[t][2.4cm][t]{\textwidth}{%
- \heiti\xiaoer[1.56]%
- \parindent=2em%
- \hangindent=5em%
- \makebox[3em][l]{题目:}%
+ \endgroup
+ \vskip 1.8cm%
+ \begingroup
+ \heiti
+ \ifthu@main@language@chinese
\yihao[1.56]%
- \CJKunderline[skip=false, thickness=0.05em, depth=0.12em]{\thu@title}\par
- }\par
- \vskip 2.5cm%
- \begingroup
- \fangsong\sanhao[2.3]%
- \leftskip=2.5cm%
- \parindent=\z@
- \def\thu@info@item##1##2##3{%
- \ifx##3\@empty\else
- \thu@fixed@box{%
- \ifx\thu@joint@supervisor\@empty
- 4em%
- \else
- 5.5em%
- \fi
- }{##1}:##2{##3}\\
- \fi
- }%
- \def\thu@name@title@format##1##2{%
- \thu@stretch{3em}{##1}\quad ##2%
- }
- \thu@info@item{系别}{}{\thu@department}%
- \thu@info@item{专业}{}{\thu@discipline}%
- \thu@info@item{姓名}{\thu@name@title}{\thu@author}%
- \thu@info@item{指导教师}{\thu@name@title}{\thu@supervisor}%
- \thu@info@item{辅导教师}{\thu@name@title}{\thu@associate@supervisor}%
- \thu@info@item{联合指导教师}{\thu@name@title}{\thu@joint@supervisor}%
- \par
- \endgroup
- \vskip 1.5cm%
+ \else
+ \fontsize{26bp}{32bp}\selectfont
+ \fi
+ \parindent=18bp%
+ \hangindent=72bp%
+ \makebox[54bp]{\xiaoer[1.2]题目:}%
+ \CJKunderline*[skip=false, thickness=0.05em, depth=0.12em]{\thu@title}%
+ \ifthu@main@language@english
+ \\
+ \thusetup{language=english}%
+ \ul\thu@title@en
+ \thusetup{language=chinese}%
+ \fi
+ \par
+ \endgroup
+ \vskip 1.9cm%
+ \begingroup
+ \fangsong\sanhao[2.32]%
+ \leftskip=2.5cm%
+ \parindent=\z@
+ \def\thu@info@item##1##2##3{%
+ \ifx##3\@empty\else
+ \thu@fixed@box{%
+ \ifx\thu@joint@supervisor\@empty
+ 4em%
+ \else
+ 5.5em%
+ \fi
+ }{##1}:##2{##3}\par
+ \fi
+ }%
+ \def\thu@name@title@format##1##2{%
+ \thu@stretch{3em}{##1}\quad ##2%
+ }%
+ \thu@info@item{系别}{}{\thu@department}%
+ \thu@info@item{专业}{}{\thu@discipline}%
+ \thu@info@item{姓名}{\thu@name@title}{\thu@author}%
+ \thu@info@item{指导教师}{\thu@name@title}{\thu@supervisor}%
+ \thu@info@item{辅导教师}{\thu@name@title}{\thu@associate@supervisor}%
+ \thu@info@item{联合指导教师}{\thu@name@title}{\thu@joint@supervisor}%
+ \endgroup
+ \vskip 1.4cm%
+ \begingroup
+ \centering
{\CJKfamily+{}\xiaosi\thu@format@date{\thu@date@zh@digit}{\thu@date}\par}%
\endgroup
+ \vfill
\clearpage
\restoregeometry
}
@@ -3585,30 +3912,71 @@
}
% \end{macrocode}
%
-% \myentry{授权说明}
+% \subsubsection{答辩委员会名单}
+% \begin{environment}{committee}
+% 学位论文指导小组、公开评阅人和答辩委员会名单。
+% \begin{macrocode}
+\def\thu@committee@name{学位论文指导小组、公开评阅人和答辩委员会名单}
+\newenvironment{committee}[1][]{%
+ \cleardoublepage
+ \let\thu@committee@file\@empty
+ \kv@define@key{thu@committee}{name}{\let\thu@committee@name\kv@value}%
+ \kv@define@key{thu@committee}{file}{\let\thu@committee@file\kv@value}%
+ \kv@set@family@handler{thu@committee}{%
+ \ifx\kv@value\relax
+ \let\thu@committee@file\kv@key
+ \else
+ \kv@handled@false
+ \fi
+ }%
+ \kvsetkeys{thu@committee}{#1}%
+ \ifx\thu@committee@file\@empty
+ \thu@chapter*[]{\thu@committee@name}%
+ \else
+ \thu@pdfbookmark{0}{\thu@committee@name}%
+ \includepdf{\thu@committee@file}%
+ \fi
+ \thispagestyle{empty}%
+ \ctexset{
+ section = {
+ format += {\centering},
+ numbering = false,
+ afterindent = false,
+ },
+ }%
+}{%
+}
+% \end{macrocode}
+% \end{environment}
+%
+% \subsubsection{授权说明}
% \begin{macro}{\copyrightpage}
% 授权说明
% \begin{macrocode}
\newcommand{\thu@authorization@title}{关于学位论文使用授权的说明}
\newcommand{\thu@authorization@content}{%
\ifthu@degree@bachelor
-本人完全了解清华大学有关保留、使用学位论文的规定,即:学校有权保留学位
-论文的复印件,允许该论文被查阅和借阅;学校可以公布该论文的全部或部分内
-容,可以采用影印、缩印或其他复制手段保存该论文。
+ 本人完全了解清华大学有关保留、使用学位论文的规定,%
+ 即:学校有权保留学位论文的复印件,允许该论文被查阅和借阅;%
+ 学校可以公布该论文的全部或部分内容,可以采用影印、缩印或其他复制手段保存该论文。%
\else
-本人完全了解清华大学有关保留、使用学位论文的规定,即:
-
-清华大学拥有在著作权法规定范围内学位论文的使用权,其中包括:(1)已获学位的研究生
-必须按学校规定提交学位论文,学校可以采用影印、缩印或其他复制手段保存研究生上交的
-学位论文;(2)为教学和科研目的,学校可以将公开的学位论文作为资料在图书馆、资料
-室等场所供校内师生阅读,或在校园网上供校内师生浏览部分内容\ifthu@degree@master 。\else ;
-(3)根据《中华人民共和国学位条例暂行实施办法》,向国家图书馆报送可以公开的学位
-论文。\fi
-
-本人保证遵守上述规定。
-\fi}
+ 本人完全了解清华大学有关保留、使用学位论文的规定,即:\par
+ 清华大学拥有在著作权法规定范围内学位论文的使用权,其中包括:%
+ (1)已获学位的研究生必须按学校规定提交学位论文,%
+ 学校可以采用影印、缩印或其他复制手段保存研究生上交的学位论文;%
+ (2)为教学和科研目的,学校可以将公开的学位论文作为资料在图书馆、资料室等场所供校内师生阅读,%
+ 或在校园网上供校内师生浏览部分内容;%
+ \ifthu@degree@doctor
+ (3)根据《中华人民共和国学位条例暂行实施办法》及相关部门具体要求,向国家图书馆报送相应的学位论文。%
+ \else
+ (3)按照相关部门督导、抽查等要求,报送相应的学位论文。%
+ \fi
+ \par
+ 本人保证遵守上述规定。%
+ \fi
+}
\newcommand{\thu@authorization@addon}{%
- \ifthu@degree@bachelor(涉密的学位论文在解密后应遵守此规定)\else (保密的论文在解密后应遵守此规定)\fi}
+ \ifthu@degree@bachelor(涉密的学位论文在解密后应遵守此规定)\else (保密的论文在解密后遵守此规定)\fi}
\newcommand{\thu@authorization@authorsig}{\ifthu@degree@bachelor 签\hskip1em名:\else 作者签名:\fi}
\newcommand{\thu@authorization@teachersig}{导师签名:}
\newcommand{\thu@authorization@frontdate}{%
@@ -3632,7 +4000,15 @@
\fi%
\else
\thu@phantomsection
- \includepdf{#1}%
+ \kv@define@key{thu@copyright}{file}{\includepdf{\kv@value}}%
+ \kv@set@family@handler{thu@copyright}{%
+ \ifx\kv@value\relax
+ \includepdf{\kv@key}%
+ \else
+ \kv@handled@false
+ \fi
+ }%
+ \kvsetkeys{thu@copyright}{#1}%
\fi
\fi
}
@@ -3691,19 +4067,6 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\thu@put@keywords}
-% 排版关键字。
-% \begin{macrocode}
-\newbox\thu@kw
-\newcommand\thu@put@keywords[2]{%
- \begingroup
- \setbox\thu@kw=\hbox{#1}
- \ifthu@degree@bachelor\indent\else\noindent\hangindent\wd\thu@kw\hangafter1\fi%
- \box\thu@kw#2\par
- \endgroup}
-% \end{macrocode}
-% \end{macro}
-%
% \begin{environment}{abstract}
% 中文摘要部分的标题为“\textbf{摘要}”,用黑体三号字。
% 摘要内容用小四号字书写,两端对齐,汉字用宋体,外文字用 Times New Roman 体,
@@ -3714,16 +4077,29 @@
\cleardoublepage
\fi
\thusetup{language = chinese}%
- \thu@chapter*[]{\thu@abstract@name}% %no tocline
+ \ifthu@degree@graduate
+ \thu@chapter*{\thu@abstract@name}%
+ \else
+ \thu@chapter*[]{\thu@abstract@name}%
+ \fi
}{%
% \end{macrocode}
%
% 每个关键词之间空两个汉字符宽度, 且为悬挂缩进。
% \begin{macrocode}
- \ifthu@degree@doctor\vfill\else\vskip12bp\fi
- \thu@put@keywords{\textbf{关键词:}}{%
- \thu@clist@use{\thu@keywords}{;}%
- }%
+ \par
+ \ifthu@degree@graduate
+ \vspace*{\stretch{4}}%
+ \noindent
+ \textsf{关键词:}%
+ \else
+ \null\par
+ \textbf{关键词:}%
+ \fi
+ \thu@clist@use{\thu@keywords}{;}%
+ \ifthu@degree@graduate
+ \vspace*{\stretch{1}}%
+ \fi
\ifthu@degree@bachelor
\cleardoublepage
\fi
@@ -3733,8 +4109,7 @@
% \end{environment}
%
% \begin{environment}{abstract*}
-% 英文摘要部分的标题为 \textbf{Abstract},用 Arial 体三号字。研究生的英文摘要要求
-% 非常怪异:虽然正文前的封面部分为右开,但是英文摘要要跟中文摘要连续。
+% 英文摘要部分的标题为 \textbf{Abstract},用 Arial 体三号字。
% 摘要内容用小四号 Times New Roman。
% \begin{macrocode}
\newenvironment{abstract*}{%
@@ -3742,14 +4117,28 @@
\cleardoublepage
\fi
\thusetup{language = english}%
- \thu@chapter*[]{\thu@abstract@name@en}% no tocline
+ \ifthu@degree@graduate
+ \begingroup
+ \ctexset{chapter/format+=\bfseries}%
+ \thu@chapter*[\sffamily\bfseries\thu@abstract@name@en]{\thu@abstract@name@en}%
+ \endgroup
+ \else
+ \thu@chapter*[]{\thu@abstract@name@en}%
+ \fi
}{%
- \ifthu@degree@doctor\vfill\else\vskip12bp\fi
- \thu@put@keywords{%
- \textbf{\ifthu@degree@bachelor Keywords:\else Key Words:\fi\enskip}%
- }{%
- \thu@clist@use{\thu@keywords@en}{; }%
- }%
+ \par
+ \ifthu@degree@graduate
+ \vspace*{\stretch{4}}%
+ \noindent
+ \textbf{Key Words:}\space
+ \else
+ \null\par
+ \textbf{Keywords:}\space
+ \fi
+ \thu@clist@use{\thu@keywords@en}{; }%
+ \ifthu@degree@graduate
+ \vspace*{\stretch{1}}%
+ \fi
\ifthu@degree@bachelor
\cleardoublepage
\fi
@@ -3767,7 +4156,11 @@
\ifthu@degree@bachelor
\cleardoublepage
\fi
- \thu@chapter*[]{\thu@denotation@name} % no tocline
+ \ifthu@degree@graduate
+ \thu@chapter*{\thu@denotation@name}%
+ \else
+ \thu@chapter*[]{\thu@denotation@name}%
+ \fi
\vskip-30bp\xiaosi[1.6]\begin{thu@denotation}[labelwidth=#1]
}{%
\end{thu@denotation}
@@ -3793,7 +4186,6 @@
% \begin{environment}{acknowledgements}
% 定义致谢环境
% \begin{macrocode}
-\newcommand\thu@statement@name{声\hspace{\ccwd}明}
\newcommand{\thu@statement@text}{本人郑重声明:所呈交的学位论文,是本人在导师指导下
,独立进行研究工作所取得的成果。尽我所知,除文中已经注明引用的内容外,本学位论
文的研究成果不包含任何他人享有著作权的内容。对本论文所涉及的研究工作做出贡献的
@@ -3805,6 +4197,7 @@
% 定义致谢与声明环境。
% \begin{macrocode}
\newenvironment{acknowledgements}{%
+ \@mainmatterfalse
\ifthu@degree@bachelor
\cleardoublepage
\fi
@@ -3815,9 +4208,9 @@
\fi
}
% \end{macrocode}
-%
% \end{environment}
-% \begin{environment}{statement}
+%
+% \begin{macro}{statement}
% 声明部分(支持扫描文件替换)
% \begin{macrocode}
\thu@define@key{
@@ -3839,21 +4232,38 @@
},
}
\thu@option@hook{statement-page-number}{%
+ \ifthu@statement@page@number@false
+ \thusetup{statement-page-style=empty}%
+ \else
+ \thusetup{statement-page-style=plain}%
+ \fi
\thu@warning{%
The "statement-page-number" option is deprecated.
- Use "statement-page-style" instead%
+ Use "page-style" option of \protect\statement command instead%
}%
}
\newcommand\statement[1][]{%
+ \@mainmatterfalse
\ifthu@degree@bachelor
\cleardoublepage
+ \def\thu@statement@name{声\hspace{2em}明}%
+ \else
+ \def\thu@statement@name{声\hspace{1em}明}%
\fi
- \def\thu@@tmp{#1}%
- \ifx\thu@@tmp\@empty
- \thu@chapter*{\thu@statement@name}%
- \ifthu@statement@page@number@false
- \thispagestyle{\thu@statement@page@style}%
+ \let\thu@statement@file\@empty
+ \kv@define@key{thu@statement}{page-style}{\thusetup{statement-page-style=##1}}%
+ \kv@define@key{thu@statement}{file}{\let\thu@statement@file\kv@value}%
+ \kv@set@family@handler{thu@statement}{%
+ \ifx\kv@value\relax
+ \let\thu@statement@file\kv@key
+ \else
+ \kv@handled@false
\fi
+ }%
+ \kvsetkeys{thu@statement}{#1}%
+ \ifx\thu@statement@file\@empty
+ \thu@chapter*{\thu@statement@name}%
+ \thispagestyle{\thu@statement@page@style}%
\thu@statement@text\par
\ifthu@degree@graduate
\vskip 2cm%
@@ -3867,14 +4277,14 @@
\markboth{\thu@statement@name}{}%
\thu@phantomsection
\addcontentsline{toc}{chapter}{\thu@statement@name}%
- }]{#1}%
+ }]{\thu@statement@file}%
\fi
\ifthu@degree@bachelor
\cleardoublepage
\fi
}
% \end{macrocode}
-% \end{environment}
+% \end{macro}
%
% 兼容旧版本保留 \env{acknowledgement}。
% \begin{macrocode}
@@ -3882,12 +4292,8 @@
\let\endacknowledgement\endacknowledgements
% \end{macrocode}
%
-% \subsubsection{图表索引}
-% \label{sec:threeindex}
-% \begin{macro}{\listoffigures}
-% \begin{macro}{\listoffigures*}
-% \begin{macro}{\listoftables}
-% \begin{macro}{\listoftables*}
+% \subsubsection{插图和附表清单}
+% \label{sec:threelists}
% 定义图表以及公式目录样式。
% \begin{macrocode}
\def\thu@listof#1{% #1: float type
@@ -3896,35 +4302,49 @@
{\thu@chapter*[]{\csname list#1name\endcsname}\@starttoc{\csname ext@#1\endcsname}}
{\thu@chapter*{\csname list#1name\endcsname}\@starttoc{\csname ext@#1\endcsname}}%
}
+% \end{macrocode}
+%
+% \begin{macro}{\listoffigures}
+% \begin{macro}{\listoffigures*}
+% 插图清单。
+% \begin{macrocode}
\renewcommand\listoffigures{%
- \thu@set@list@label@width{\figurename}%
\thu@listof{figure}%
}
+\titlecontents{figure}
+ [\z@]{}
+ {\contentspush{\figurename~\thecontentslabel\hspace{\ccwd}}}{}
+ {\nobreak\thu@leaders\nobreak\hfil\thecontentspage}
% \end{macrocode}
+% \end{macro}
+% \end{macro}
%
-% 英文的图序“Figure X-X”比中文略宽,所以根据实际内容设置不同宽度。
+% \begin{macro}{\listoftables}
+% \begin{macro}{\listoftables*}
+% 附表清单。
% \begin{macrocode}
-\newlength{\thu@list@label@width}
-\newcommand\thu@set@list@label@width[1]{%
- \settowidth{\thu@list@label@width}{#1~8.8}%
- \addtolength{\thu@list@label@width}{1em}%
-}
-\titlecontents{figure}
- [\thu@list@label@width]{\addvspace{6bp}}
- {\contentslabel[\figurename~\thecontentslabel]{\thu@list@label@width}}{}
- {\thu@leaders\thecontentspage}
\renewcommand\listoftables{%
- \thu@set@list@label@width{\tablename}%
\thu@listof{table}%
}
\titlecontents{table}
- [\thu@list@label@width]{\addvspace{6bp}}
- {\contentslabel[\tablename~\thecontentslabel]{\thu@list@label@width}}{}
+ [\z@]{}
+ {\contentspush{\tablename~\thecontentslabel\hspace{\ccwd}}}{}
{\thu@leaders\thecontentspage}
% \end{macrocode}
% \end{macro}
% \end{macro}
-% \end{macro}
+%
+% \begin{macro}{\listoffiguresandtables}
+% 将插图和附表合在一起列出“插图和附表清单”。
+% \begin{macrocode}
+\newcommand\listoffiguresandtables{%
+ \thu@chapter*{\thu@list@figure@table@name}%
+ \@starttoc{lof}%
+ \par
+ \null\par
+ \@starttoc{lot}%
+}
+% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\equcaption}
@@ -3955,7 +4375,7 @@
\titlecontents{equation}
[0pt]{\addvspace{6bp}}
{\thu@equation@name~\thecontentslabel}{}
- {\thu@leaders\thecontentspage}
+ {\nobreak\thu@leaders\nobreak\thecontentspage}
\contentsuse{equation}{loe}
% \end{macrocode}
% \end{macro}
@@ -3965,109 +4385,397 @@
% \subsection{参考文献}
% \label{sec:ref}
%
+% 参考文献的格式根据用户选择的 \BibTeX{}/BibLaTeX 分别进行配置,
+% 所以使用 \pkg{filehook} 的方式。
+%
+% 设置 \option{cite-style} 的接口,只对 \BibTeX{} 的编译方式有效。
+% \begin{macrocode}
+ \thu@define@key{
+ cite-style = {
+ name = cite@style,
+ }
+ }
+% \end{macrocode}
+%
+% \subsubsection{BibTeX + \pkg{natbib} 宏包}
+%
+% \BibTeX{} 和 \pkg{natbib} 宏包的配置。
+% \begin{macrocode}
+\PassOptionsToPackage{compress}{natbib}
+\AtEndOfPackageFile*{natbib}{
+% \end{macrocode}
% \begin{macro}{\inlinecite}
% 依赖于 \pkg{natbib} 宏包,修改其中的命令。 旧命令 \cs{onlinecite} 依然可用。
% \begin{macrocode}
-\DeclareRobustCommand\inlinecite{\@inlinecite}
-\def\@inlinecite#1{\begingroup\let\@cite\NAT@citenum\citep{#1}\endgroup}
-\let\onlinecite\inlinecite
+ \DeclareRobustCommand\inlinecite{\@inlinecite}
+ \def\@inlinecite#1{\begingroup\let\@cite\NAT@citenum\citep{#1}\endgroup}
+ \let\onlinecite\inlinecite
% \end{macrocode}
% \end{macro}
%
-% 参考文献的正文部分用五号字。
-% 行距采用固定值 16 磅,段前空 3 磅,段后空 0 磅。
-% 本科生要求固定行距 17pt,段前后间距 3pt。
-%
-% 复用 \pkg{natbib} 的 \texttt{thebibliography} 环境,调整距离。
-% \begin{macrocode}
-\renewcommand\bibsection{\thu@chapter*{\bibname}}
-\renewcommand\bibfont{\ifthu@degree@bachelor\wuhao[1.619]\else\wuhao[1.5]\fi}
-\setlength\bibhang{2\ccwd}
-\addtolength{\bibsep}{-0.7em}
-\setlength{\labelsep}{0.4em}
-\def\@biblabel#1{[#1]\hfill}
+% 几种种引用样式,与 \file{bst} 文件名保持一致,
+% 这样在使用 \cs{bibliographystyle} 选择参考文献表的样式时也会设置对应的引用样式。
+% \begin{macrocode}
+ \expandafter\newcommand\csname bibstyle@thuthesis-numeric\endcsname{%
+ \bibpunct{[}{]}{,}{s}{,}{\textsuperscript{,}}}
+ \expandafter\newcommand\csname bibstyle@thuthesis-author-year\endcsname{%
+ \bibpunct{(}{)}{;}{a}{,}{,}}
+ \expandafter\newcommand\csname bibstyle@thuthesis-bachelor\endcsname{%
+ \bibpunct{[}{]}{,}{s}{,}{\textsuperscript{,}}}
+ \@namedef{bibstyle@thuthesis-inline}{\bibpunct{[}{]}{,}{n}{,}{,}}
+ \thu@option@hook{cite-style}{\@nameuse{bibstyle@thuthesis-\thu@cite@style}}
+% \end{macrocode}
+%
+% 修改引用的样式。
+% 这里在 filehook 中无法使用 \cs{patchcmd},所以只能手动重定义。
+%
+% 将 \cs{citep} super 式引用的页码改为上标。
+% \begin{macrocode}
+ \renewcommand\NAT@citesuper[3]{\ifNAT@swa
+ \if*#2*\else#2\NAT@spacechar\fi
+ % \unskip\kern\p@\textsuperscript{\NAT@@open#1\NAT@@close}%
+ % \if*#3*\else\NAT@spacechar#3\fi\else #1\fi\endgroup}
+ \unskip\kern\p@\textsuperscript{\NAT@@open#1\NAT@@close\if*#3*\else#3\fi}%
+ \else #1\fi\endgroup}
+% \end{macrocode}
+%
+% 将 \cs{citep} numbers 式引用的页码改为上标并置于括号外。
+% \begin{macrocode}
+ \renewcommand\NAT@citenum%
+ [3]{\ifNAT@swa\NAT@@open\if*#2*\else#2\NAT@spacechar\fi
+ % #1\if*#3*\else\NAT@cmt#3\fi\NAT@@close\else#1\fi\endgroup}
+ #1\NAT@@close\textsuperscript{\if*#3*\else#3\fi}\else#1\fi\endgroup}
+% \end{macrocode}
+%
+% 修改 \cs{citet} 引用的样式。
+% \begin{macrocode}
+ \def\NAT@citexnum[#1][#2]#3{%
+ \NAT@reset@parser
+ \NAT@sort@cites{#3}%
+ \NAT@reset@citea
+ \@cite{\def\NAT@num{-1}\let\NAT@last@yr\relax\let\NAT@nm\@empty
+ \@for\@citeb:=\NAT@cite@list\do
+ {\@safe@activestrue
+ \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
+ \@safe@activesfalse
+ \@ifundefined{b@\@citeb\@extra@b@citeb}{%
+ {\reset@font\bfseries?}
+ \NAT@citeundefined\PackageWarning{natbib}%
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+ {\let\NAT@last@num\NAT@num\let\NAT@last@nm\NAT@nm
+ \NAT@parse{\@citeb}%
+ \ifNAT@longnames\@ifundefined{bv@\@citeb\@extra@b@citeb}{%
+ \let\NAT@name=\NAT@all@names
+ \global\@namedef{bv@\@citeb\@extra@b@citeb}{}}{}%
+ \fi
+ \ifNAT@full\let\NAT@nm\NAT@all@names\else
+ \let\NAT@nm\NAT@name\fi
+ \ifNAT@swa
+ \@ifnum{\NAT@ctype>\@ne}{%
+ \@citea
+ \NAT@hyper@{\@ifnum{\NAT@ctype=\tw@}{\NAT@test{\NAT@ctype}}{\NAT@alias}}%
+ }{%
+ \@ifnum{\NAT@cmprs>\z@}{%
+ \NAT@ifcat@num\NAT@num
+ {\let\NAT@nm=\NAT@num}%
+ {\def\NAT@nm{-2}}%
+ \NAT@ifcat@num\NAT@last@num
+ {\@tempcnta=\NAT@last@num\relax}%
+ {\@tempcnta\m@ne}%
+ \@ifnum{\NAT@nm=\@tempcnta}{%
+ \@ifnum{\NAT@merge>\@ne}{}{\NAT@last@yr@mbox}%
+ }{%
+ \advance\@tempcnta by\@ne
+ \@ifnum{\NAT@nm=\@tempcnta}{%
% \end{macrocode}
%
-% 几种种引用样式:
+% 在顺序编码制下,\pkg{natbib} 只有在三个以上连续文献引用才会使用连接号,
+% 这里修改为允许两个引用使用连接号。
% \begin{macrocode}
-\expandafter\newcommand\csname bibstyle@thuthesis-numeric\endcsname{%
- \bibpunct{[}{]}{,}{s}{,}{\textsuperscript{,}}}
-\expandafter\newcommand\csname bibstyle@thuthesis-author-year\endcsname{%
- \bibpunct{(}{)}{;}{a}{,}{,}}
-\expandafter\newcommand\csname bibstyle@thuthesis-bachelor\endcsname{%
- \bibpunct{[}{]}{,}{s}{,}{\textsuperscript{,}}}
+ % \ifx\NAT@last@yr\relax
+ % \def@NAT@last@yr{\@citea}%
+ % \else
+ % \def@NAT@last@yr{--\NAT@penalty}%
+ % \fi
+ \def@NAT@last@yr{-\NAT@penalty}%
+ }{%
+ \NAT@last@yr@mbox
+ }%
+ }%
+ }{%
+ \@tempswatrue
+ \@ifnum{\NAT@merge>\@ne}{\@ifnum{\NAT@last@num=\NAT@num\relax}{\@tempswafalse}{}}{}%
+ \if@tempswa\NAT@citea@mbox\fi
+ }%
+ }%
+ \NAT@def@citea
+ \else
+ \ifcase\NAT@ctype
+ \ifx\NAT@last@nm\NAT@nm \NAT@yrsep\NAT@penalty\NAT@space\else
+ \@citea \NAT@test{\@ne}\NAT@spacechar\NAT@mbox{\NAT@super@kern\NAT@@open}%
+ \fi
+ \if*#1*\else#1\NAT@spacechar\fi
+ \NAT@mbox{\NAT@hyper@{{\citenumfont{\NAT@num}}}}%
+ \NAT@def@citea@box
+ \or
+ \NAT@hyper@citea@space{\NAT@test{\NAT@ctype}}%
+ \or
+ \NAT@hyper@citea@space{\NAT@test{\NAT@ctype}}%
+ \or
+ \NAT@hyper@citea@space\NAT@alias
+ \fi
+ \fi
+ }%
+ }%
+ \@ifnum{\NAT@cmprs>\z@}{\NAT@last@yr}{}%
+ \ifNAT@swa\else
% \end{macrocode}
%
-% 设置 \option{cite-style} 的接口:
+% 将页码放在括号外边,并且置于上标。
% \begin{macrocode}
-\@namedef{bibstyle@thuthesis-inline}{\bibpunct{[}{]}{,}{n}{,}{,}}
-\thu@define@key{
- cite-style = {
- name = cite@style,
- }
-}
-\thu@option@hook{cite-style}{\@nameuse{bibstyle@thuthesis-\thu@cite@style}}
+ % \@ifnum{\NAT@ctype=\z@}{%
+ % \if*#2*\else\NAT@cmt#2\fi
+ % }{}%
+ \NAT@mbox{\NAT@@close}%
+ \@ifnum{\NAT@ctype=\z@}{%
+ \if*#2*\else\textsuperscript{#2}\fi
+ }{}%
+ \fi
+ }{#1}{#2}%
+ }%
% \end{macrocode}
%
-% 下面修改 \pkg{natbib} 的引用格式,主要是将页码写在上标位置。
-% numeric 模式的 \cs{citet} 的页码:
-% \begin{macrocode}
-\patchcmd\NAT@citexnum{%
- \@ifnum{\NAT@ctype=\z@}{%
- \if*#2*\else\NAT@cmt#2\fi
- }{}%
- \NAT@mbox{\NAT@@close}%
-}{%
- \NAT@mbox{\NAT@@close}%
- \@ifnum{\NAT@ctype=\z@}{%
- \if*#2*\else\textsuperscript{#2}\fi
- }{}%
-}{}{}
+% 修改 \cs{citep} author-year 式的页码:
+% \begin{macrocode}
+ \renewcommand\NAT@cite%
+ [3]{\ifNAT@swa\NAT@@open\if*#2*\else#2\NAT@spacechar\fi
+ % #1\if*#3*\else\NAT@cmt#3\fi\NAT@@close\else#1\fi\endgroup}
+ #1\NAT@@close\if*#3*\else\textsuperscript{#3}\fi\else#1\fi\endgroup}
+% \end{macrocode}
+%
+% 修改 \cs{citet} author-year 式的页码:
+% \begin{macrocode}
+ \def\NAT@citex%
+ [#1][#2]#3{%
+ \NAT@reset@parser
+ \NAT@sort@cites{#3}%
+ \NAT@reset@citea
+ \@cite{\let\NAT@nm\@empty\let\NAT@year\@empty
+ \@for\@citeb:=\NAT@cite@list\do
+ {\@safe@activestrue
+ \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
+ \@safe@activesfalse
+ \@ifundefined{b@\@citeb\@extra@b@citeb}{\@citea%
+ {\reset@font\bfseries ?}\NAT@citeundefined
+ \PackageWarning{natbib}%
+ {Citation `\@citeb' on page \thepage \space undefined}\def\NAT@date{}}%
+ {\let\NAT@last@nm=\NAT@nm\let\NAT@last@yr=\NAT@year
+ \NAT@parse{\@citeb}%
+ \ifNAT@longnames\@ifundefined{bv@\@citeb\@extra@b@citeb}{%
+ \let\NAT@name=\NAT@all@names
+ \global\@namedef{bv@\@citeb\@extra@b@citeb}{}}{}%
+ \fi
+ \ifNAT@full\let\NAT@nm\NAT@all@names\else
+ \let\NAT@nm\NAT@name\fi
+ \ifNAT@swa\ifcase\NAT@ctype
+ \if\relax\NAT@date\relax
+ \@citea\NAT@hyper@{\NAT@nmfmt{\NAT@nm}\NAT@date}%
+ \else
+ \ifx\NAT@last@nm\NAT@nm\NAT@yrsep
+ \ifx\NAT@last@yr\NAT@year
+ \def\NAT@temp{{?}}%
+ \ifx\NAT@temp\NAT@exlab\PackageWarningNoLine{natbib}%
+ {Multiple citation on page \thepage: same authors and
+ year\MessageBreak without distinguishing extra
+ letter,\MessageBreak appears as question mark}\fi
+ \NAT@hyper@{\NAT@exlab}%
+ \else\unskip\NAT@spacechar
+ \NAT@hyper@{\NAT@date}%
+ \fi
+ \else
+ \@citea\NAT@hyper@{%
+ \NAT@nmfmt{\NAT@nm}%
+ \hyper@natlinkbreak{%
+ \NAT@aysep\NAT@spacechar}{\@citeb\@extra@b@citeb
+ }%
+ \NAT@date
+ }%
+ \fi
+ \fi
+ \or\@citea\NAT@hyper@{\NAT@nmfmt{\NAT@nm}}%
+ \or\@citea\NAT@hyper@{\NAT@date}%
+ \or\@citea\NAT@hyper@{\NAT@alias}%
+ \fi \NAT@def@citea
+ \else
+ \ifcase\NAT@ctype
+ \if\relax\NAT@date\relax
+ \@citea\NAT@hyper@{\NAT@nmfmt{\NAT@nm}}%
+ \else
+ \ifx\NAT@last@nm\NAT@nm\NAT@yrsep
+ \ifx\NAT@last@yr\NAT@year
+ \def\NAT@temp{{?}}%
+ \ifx\NAT@temp\NAT@exlab\PackageWarningNoLine{natbib}%
+ {Multiple citation on page \thepage: same authors and
+ year\MessageBreak without distinguishing extra
+ letter,\MessageBreak appears as question mark}\fi
+ \NAT@hyper@{\NAT@exlab}%
+ \else
+ \unskip\NAT@spacechar
+ \NAT@hyper@{\NAT@date}%
+ \fi
+ \else
+ \@citea\NAT@hyper@{%
+ \NAT@nmfmt{\NAT@nm}%
+ \hyper@natlinkbreak{\NAT@spacechar\NAT@@open\if*#1*\else#1\NAT@spacechar\fi}%
+ {\@citeb\@extra@b@citeb}%
+ \NAT@date
+ }%
+ \fi
+ \fi
+ \or\@citea\NAT@hyper@{\NAT@nmfmt{\NAT@nm}}%
+ \or\@citea\NAT@hyper@{\NAT@date}%
+ \or\@citea\NAT@hyper@{\NAT@alias}%
+ \fi
+ \if\relax\NAT@date\relax
+ \NAT@def@citea
+ \else
+ \NAT@def@citea@close
+ \fi
+ \fi
+ }}\ifNAT@swa\else
% \end{macrocode}
%
-% Numeric 模式的 \cs{citep} 的页码:
+% 将页码放在括号外边,并且置于上标。
% \begin{macrocode}
-\renewcommand\NAT@citesuper[3]{\ifNAT@swa
- \if*#2*\else#2\NAT@spacechar\fi
-\unskip\kern\p@\textsuperscript{\NAT@@open#1\NAT@@close\if*#3*\else#3\fi}%
- \else #1\fi\endgroup}
+ % \if*#2*\else\NAT@cmt#2\fi
+ \if\relax\NAT@date\relax\else\NAT@@close\fi
+ \if*#2*\else\textsuperscript{#2}\fi
+ \fi}{#1}{#2}}
% \end{macrocode}
%
-% Author-year 模式的 \cs{citet} 的页码:
+% 参考文献表的正文部分用五号字。
+% 行距采用固定值 16 磅,段前空 3 磅,段后空 0 磅。
+%
+% 本科生要求宋体五号/Times New Roman 10.5 pt,固定行距 17pt,段前后间距 3pt;
+% 英文专业要求悬挂缩进 0.5inch(1.27 厘米)。
+%
+% 复用 \pkg{natbib} 的 \texttt{thebibliography} 环境,调整距离。
% \begin{macrocode}
-\patchcmd{\NAT@citex}{%
- \if*#2*\else\NAT@cmt#2\fi
- \if\relax\NAT@date\relax\else\NAT@@close\fi
-}{%
- \if\relax\NAT@date\relax\else\NAT@@close\fi
- \if*#2*\else\textsuperscript{#2}\fi
-}{}{}
+ \renewcommand\bibsection{\thu@chapter*{\bibname}}
+ \newcommand\thu@set@bibliography@format{%
+ \ifthu@degree@bachelor
+ \renewcommand\bibfont{\fontsize{10.5bp}{17bp}\selectfont}%
+ \setlength{\bibsep}{6bp}%
+ \ifthu@main@language@chinese
+ \setlength{\bibhang}{21bp}%
+ \else
+ \setlength{\bibhang}{0.5in}%
+ \fi
+ \else
+ \renewcommand\bibfont{\fontsize{10.5bp}{16bp}\selectfont}%
+ \setlength{\bibsep}{3bp}%
+ \setlength{\bibhang}{21bp}%
+ \fi
+ }
+ \thu@set@bibliography@format
+ \thu@option@hook{degree}{\thu@set@bibliography@format}
+ \thu@option@hook{main-language}{\thu@set@bibliography@format}
+% \end{macrocode}
+%
+% 参考文献表的编号居左,宽度 1 cm。
+% \begin{macrocode}
+ \def\@biblabel#1{[#1]\hfill}
+ \renewcommand\NAT@bibsetnum[1]{%
+ % \settowidth\labelwidth{\@biblabel{#1}}%
+ % \setlength{\leftmargin}{\labelwidth}%
+ % \addtolength{\leftmargin}{\labelsep}%
+ \setlength{\leftmargin}{1cm}%
+ \setlength{\itemindent}{\z@}%
+ \setlength{\labelsep}{0.1cm}%
+ \setlength{\labelwidth}{0.9cm}%
+ \setlength{\itemsep}{\bibsep}
+ \setlength{\parsep}{\z@}%
+ \ifNAT@openbib
+ \addtolength{\leftmargin}{\bibindent}%
+ \setlength{\itemindent}{-\bibindent}%
+ \setlength{\listparindent}{\itemindent}%
+ \setlength{\parsep}{0pt}%
+ \fi
+ }
+}
% \end{macrocode}
%
-% Author-year 模式的 \cs{citep} 的页码:
+% \subsubsection{\pkg{biblatex} 宏包}
+%
% \begin{macrocode}
-\renewcommand\NAT@cite%
- [3]{\ifNAT@swa\NAT@@open\if*#2*\else#2\NAT@spacechar\fi
- #1\NAT@@close\if*#3*\else\textsuperscript{#3}\fi\else#1\fi\endgroup}
+\AtEndOfPackageFile*{biblatex}{
+ \AtBeginDocument{
+ \ifthenelse{\equal{\blx@bbxfile}{apa}}{\def\bibname{REFERENCES}}{}
+ \ifthenelse{\equal{\blx@bbxfile}{apa6}}{\def\bibname{REFERENCES}}{}
+ \ifthenelse{\equal{\blx@bbxfile}{mla}}{\def\bibname{WORKS CITED}}{}
+ \ifthenelse{\equal{\blx@bbxfile}{mla-new}}{\def\bibname{WORKS CITED}}{}
+ }
+ \DeclareRobustCommand\inlinecite{\parencite}
+ \defbibheading{bibliography}[\bibname]{\thu@chapter*{\bibname}}
+ \newcommand\thu@set@bibliography@format{%
+ \ifthu@degree@bachelor
+ \renewcommand\bibfont{\fontsize{10.5bp}{17bp}\selectfont}%
+ \setlength{\bibitemsep}{6bp}%
+ \ifthu@main@language@chinese
+ \setlength{\bibhang}{21bp}%
+ \else
+ \setlength{\bibhang}{0.5in}%
+ \fi
+ \else
+ \renewcommand\bibfont{\fontsize{10.5bp}{16bp}\selectfont}%
+ \setlength{\bibitemsep}{3bp}%
+ \setlength{\biblabelsep}{0.1cm}%
+ \setlength{\bibhang}{21bp}%
+ \fi
+ }
+ \thu@set@bibliography@format
+ \thu@option@hook{degree}{\thu@set@bibliography@format}
+ \thu@option@hook{main-language}{\thu@set@bibliography@format}
+}
% \end{macrocode}
%
-% 在顺序编码制下,\pkg{natbib} 只有在三个以上连续文献引用才会使用连接号,
-% 这里修改为允许两个引用使用连接号。
+% \subsubsection{\pkg{apacite} 宏包}
+%
+% \pkg{apacite} 在 \cs{begindocument} 处载入的 \file{english.apc}
+% 会覆盖掉 \cs{bibname} 的定义,所以需要重新 \cs{thu@set@chapter@names}。
% \begin{macrocode}
-\patchcmd{\NAT@citexnum}{%
- \ifx\NAT@last@yr\relax
- \def@NAT@last@yr{\@citea}%
+\AtEndOfPackageFile*{apacite}{
+ \AtBeginDocument{
+ \thu@set@chapter@names
+ }
+ \renewcommand\bibliographytypesize{\fontsize{10.5bp}{17bp}\selectfont}
+ \setlength{\bibitemsep}{6bp}
+ \ifthu@main@language@chinese
+ \setlength{\bibleftmargin}{21bp}
+ \setlength{\bibindent}{-\bibleftmargin}
\else
- \def@NAT@last@yr{--\NAT@penalty}%
+ \setlength{\bibleftmargin}{0.5in}
+ \setlength{\bibindent}{-\bibleftmargin}
\fi
-}{%
- \def@NAT@last@yr{-\NAT@penalty}%
-}{}{}
+ \def\st@rtbibchapter{%
+ \if@numberedbib%
+ \chapter{\bibname}% e.g., 6. References
+ \else%
+ \thu@chapter*{\bibname}% e.g., References
+ \fi%
+ }%
+}
% \end{macrocode}
%
% \subsection{附录}
% \label{sec:appendix}
%
+% \begin{macrocode}
+\g@addto@macro\appendix{%
+ \@mainmattertrue
+}
+% \end{macrocode}
+%
% 研究生和本科生的写作指南均未规定附录的节标题是否加入目录,
% 但是从示例来看,目录中只出现附录的 chapter 标题,
% 不出现附录中的 section 及 subsection 的标题。
@@ -4123,7 +4831,7 @@
}%
\renewcommand\bibname{参考文献}%
\let\bibsection\thu@appendix@bibsection
- \renewcommand\@bibunitname{main-survey}%
+ \renewcommand\@bibunitname{\jobname-survey}%
\let\bibliographystyle\defaultbibliographystyle
\let\bibliography\thu@appendix@bibliography
\begin{bibunit}%
@@ -4156,7 +4864,7 @@
\section{\bibname}%
\endgroup
}%
- \renewcommand\@bibunitname{main-translation}%
+ \renewcommand\@bibunitname{\jobname-translation}%
\let\bibliographystyle\defaultbibliographystyle
\let\bibliography\thu@appendix@bibliography
\begin{bibunit}%
@@ -4174,7 +4882,7 @@
% \begin{macrocode}
\newenvironment{translation-index}{%
\begin{bibunit}%
- \renewcommand\@bibunitname{main-index}%
+ \renewcommand\@bibunitname{\jobname-index}%
\renewcommand\bibname{书面翻译对应的原文索引}%
\let\bibsection\thu@appendix@bibsection
}{%
@@ -4234,6 +4942,7 @@
% 个人简历发表文章等。
% \begin{macrocode}
\newenvironment{resume}[1][\thu@resume@name]{%
+ \@mainmatterfalse
\thu@chapter*{#1}}{}
% \end{macrocode}
% \end{environment}
@@ -4286,9 +4995,22 @@
%
% \begin{macrocode}
\newcommand{\record}[1]{%
+ \let\thu@record@file\@empty
+ \kv@define@key{thu@record}{file}{\let\thu@record@file\kv@value}%
+ \kv@set@family@handler{thu@record}{%
+ \ifx\kv@value\relax
+ \let\thu@record@file\kv@key
+ \else
+ \kv@handled@false
+ \fi
+ }%
+ \kvsetkeys{thu@record}{#1}%
+ \ifx\thu@record@file\@empty
+ \thu@error{File path of \protect\record\space is required}
+ \fi
\cleardoublepage
\thu@pdfbookmark{0}{综合论文训练记录表}%
- \includepdf[pages=-]{#1}%
+ \includepdf[pages=-]{\thu@record@file}%
}
% \end{macrocode}
%
@@ -4341,7 +5063,7 @@
\@ifpackagelater{hyperref}{2019/04/27}{}{%
\g@addto@macro\psdmapshortnames{\let\mu\textmu}
}%
- \ifthu@language@chinese
+ \ifthu@main@language@chinese
\hypersetup{
pdflang = zh-CN,
}%
@@ -4351,7 +5073,7 @@
}%
\fi
\AtBeginDocument{%
- \ifthu@language@chinese
+ \ifthu@main@language@chinese
\hypersetup{
pdftitle = \thu@title,
pdfauthor = \thu@author,
@@ -4503,15 +5225,14 @@
\floatname{algorithm}{\thu@algorithm@name}
\g@addto@macro\appendix{\renewcommand*{\thealgorithm}{\thechapter-\arabic{algorithm}}}
\renewcommand\listofalgorithms{%
- \thu@set@list@label@width{\fname@algorithm}%
\thu@listof{algorithm}%
}
\renewcommand\listalgorithmname{\thu@list@algorithm@name}
\def\ext@algorithm{loa}
\contentsuse{algorithm}{loa}
\titlecontents{algorithm}
- [\thu@list@label@width]{\addvspace{6bp}}
- {\contentslabel[\fname@algorithm~\thecontentslabel]{\thu@list@label@width}}{}
+ [\z@]{}
+ {\contentspush{\fname@algorithm~\thecontentslabel\hspace{\ccwd}}}{}
{\thu@leaders\thecontentspage}
}
% \end{macrocode}
@@ -4529,15 +5250,14 @@
\SetAlgoCaptionSeparator{\hspace*{1em}}
\SetAlFnt{\dawu}
\renewcommand\listofalgorithms{%
- \thu@set@list@label@width{\algorithmcfname}%
\thu@listof{algorithmcf}%
}
\renewcommand\listalgorithmcfname{\thu@list@algorithm@name}
\def\ext@algorithmcf{loa}
\contentsuse{algocf}{loa}
\titlecontents{algocf}
- [\thu@list@label@width]{\addvspace{6bp}}
- {\contentslabel[\algorithmcfname~\thecontentslabel]{\thu@list@label@width}}{}
+ [\z@]{}
+ {\contentspush{\algorithmcfname~\thecontentslabel\hspace{\ccwd}}}{}
{\thu@leaders\thecontentspage}
}
% \end{macrocode}
@@ -4618,7 +5338,7 @@
}%
\fi
\thispagestyle{empty}%
- \ifthu@language@chinese
+ \ifthu@main@language@chinese
\thu@pdfbookmark{0}{书脊}%
\else
\thu@pdfbookmark{0}{Spine}%
@@ -4688,7 +5408,7 @@
\RequirePackage{fontspec}[2017/01/20]
\RequirePackage{amsmath}
\RequirePackage{unicode-math}
-\RequirePackage[UTF8,scheme=chinese,fontset=fandol]{ctex}
+\RequirePackage[UTF8,scheme=chinese]{ctex}
\RequirePackage[
top=2.5cm, bottom=2.5cm,
left=4cm, right=2cm,
diff --git a/macros/latex/contrib/thuthesis/thuthesis.ins b/macros/latex/contrib/thuthesis/thuthesis.ins
index 6621dce6d2..0dec4fcbdc 100644
--- a/macros/latex/contrib/thuthesis/thuthesis.ins
+++ b/macros/latex/contrib/thuthesis/thuthesis.ins
@@ -17,8 +17,6 @@
\input docstrip
\askforoverwritefalse
-%\askonceonly
-\showprogress
\keepsilent
\usedir{tex/latex/thuthesis}
@@ -43,27 +41,6 @@ through LaTeX.
\endpreamble
\generate{\file{\jobname.cls}{\from{\jobname.dtx}{cls}}
- \usepreamble\defaultpreamble\usepostamble\defaultpostamble
\file{dtx-style.sty}{\from{\jobname.dtx}{dtx-style}}}
-\ifToplevel{%
- \Msg{***********************************************************}
- \Msg{*}
- \Msg{* To finish the installation you have to move the following}
- \Msg{* files into a directory searched by TeX:}
- \Msg{*}
- \Msg{* The recommended directory is TEXMF/tex/latex/thuthesis}
- \Msg{*}
- \Msg{* \space\space thuthesis.cls}
- \Msg{* \space\space thuthesis-author-year.bst}
- \Msg{* \space\space thuthesis-numeric.bst}
- \Msg{* \space\space thuthesis-bachelor.bst}
- \Msg{* \space\space tsinghua-name-bachelor.pdf}
- \Msg{*}
- \Msg{* To produce the documentation run the files ending with}
- \Msg{* `.dtx' through LaTeX.}
- \Msg{*}
- \Msg{* Happy TeXing!}
- \Msg{***********************************************************}}
-
\endbatchfile
diff --git a/macros/latex/contrib/thuthesis/thuthesis.pdf b/macros/latex/contrib/thuthesis/thuthesis.pdf
index d2d3ee64d7..a6fef1ff93 100644
--- a/macros/latex/contrib/thuthesis/thuthesis.pdf
+++ b/macros/latex/contrib/thuthesis/thuthesis.pdf
Binary files differ
diff --git a/macros/luatex/latex/lua-physical/README.md b/macros/luatex/latex/lua-physical/README.md
index 8162d2de4d..830574a5da 100644
--- a/macros/luatex/latex/lua-physical/README.md
+++ b/macros/luatex/latex/lua-physical/README.md
@@ -2,9 +2,9 @@
Author: Thomas Jenni
-Version: 1.0.2
+Version: 1.0.3
-Date: 2020-09-07
+Date: 2020-09-09
License: MIT
diff --git a/macros/luatex/latex/lua-physical/lua-physical.bib b/macros/luatex/latex/lua-physical/lua-physical.bib
deleted file mode 100644
index f675d92457..0000000000
--- a/macros/luatex/latex/lua-physical/lua-physical.bib
+++ /dev/null
@@ -1,57 +0,0 @@
-%% This BibTeX bibliography file was created using BibDesk.
-%% https://bibdesk.sourceforge.io/
-
-%% Created for Thomas Jenni at 2019-04-12 20:58:33 +0200
-
-
-%% Saved with string encoding Unicode (UTF-8)
-
-
-
-@electronic{bipm18,
- Author = {Bureau International des Poids et Mesures},
- Date-Added = {2019-04-12 20:53:47 +0200},
- Date-Modified = {2019-04-12 20:58:26 +0200},
- Month = {November},
- Title = {Resolutions of the 26th CGPM},
- Url = {https://www.bipm.org/utils/common/pdf/CGPM-2018/26th-CGPM-Resolutions.pdf},
- Year = {2018}}
-
-@electronic{nist19,
- Date-Added = {2019-04-12 17:05:08 +0200},
- Date-Modified = {2019-04-12 17:28:29 +0200},
- Lastchecked = {12.4.2019},
- Month = {August},
- Title = {Webpage https://physics.nist.gov/cuu/index.html},
- Url = {https://physics.nist.gov/cuu/index.html},
- Year = {2019},
- Bdsk-Url-1 = {https://physics.nist.gov/cuu/index.html}}
-
-@booklet{bipm06,
- Author = {Bureau International des Poids et Mesures},
- Date-Added = {2019-03-19 13:45:11 +0000},
- Date-Modified = {2019-04-12 20:57:27 +0200},
- Title = {The International System of Units (SI)},
- Volume = {8th edition},
- Year = {2006}}
-
-@electronic{bipmunits18,
- Date-Added = {2018-09-03 09:58:37 +0200},
- Date-Modified = {2019-04-12 17:28:42 +0200},
- Lastchecked = {3.9.2018},
- Month = {September},
- Title = {Webpage https://www.bipm.org/en/measurement-units/},
- Url = {https://www.bipm.org/en/measurement-units/},
- Year = {2018},
- Bdsk-Url-1 = {https://www.bipm.org/en/measurement-units/}}
-
-@article{iau16,
- Author = {{Pr{\v{s}}a} et al.},
- Date-Modified = {2019-04-12 17:26:47 +0200},
- Journal = {The Astronomical Journal},
- Month = {August},
- Pages = {41},
- Title = {Nominal Values for Selected Solar and Planetary Quantities: IAU 2015 Resolution B3},
- Volume = {152},
- Year = {2016},
- Bdsk-Url-1 = {https://doi.org/10.3847/0004-6256/152/2/41}}
diff --git a/macros/luatex/latex/lua-physical/lua-physical.pdf b/macros/luatex/latex/lua-physical/lua-physical.pdf
index d7d4994674..577bf24f05 100644
--- a/macros/luatex/latex/lua-physical/lua-physical.pdf
+++ b/macros/luatex/latex/lua-physical/lua-physical.pdf
Binary files differ
diff --git a/macros/luatex/latex/lua-physical/lua-physical.tex b/macros/luatex/latex/lua-physical/lua-physical.tex
index 7ce00daa43..331a17d23e 100644
--- a/macros/luatex/latex/lua-physical/lua-physical.tex
+++ b/macros/luatex/latex/lua-physical/lua-physical.tex
@@ -85,7 +85,7 @@ Q = physical.Quantity
}
\lstset{
- numberstyle=\footnotesize\color{green!50!black},
+ numberstyle=\footnotesize\color{black!50!white},
keywordstyle=\ttfamily\bfseries\color{black},
basicstyle=\ttfamily\footnotesize,
commentstyle=\itshape\color{gray},
@@ -106,7 +106,7 @@ Q = physical.Quantity
frameround=tttt,
framexleftmargin=15pt,
framexrightmargin=20pt,
- rulecolor=\color{green!50!black},
+ rulecolor=\color{black!50!white},
mathescape=false,
captionpos=t,
escapechar=`,
@@ -127,7 +127,7 @@ Q = physical.Quantity
% left bar
\newenvironment{leftbar}
{%
-\begin{tcolorbox}[colframe=green!50!black, colback=white, arc=5pt, boxrule=0.5pt,]%
+\begin{tcolorbox}[colframe=black!50!white, colback=white, arc=5pt, boxrule=0.5pt,]%
}
{%
\end{tcolorbox}%
@@ -152,7 +152,7 @@ Q = physical.Quantity
\lstset{language=[LaTex]Tex}
-\title{The \textsc{lua-physical} library \\\ \\\normalsize Version 1.0.2}
+\title{The \textsc{lua-physical} library \\\ \\\normalsize Version 1.0.3}
\author{Thomas Jenni}
\date{\today}
\maketitle
@@ -170,10 +170,13 @@ Q = physical.Quantity
\newpage
\section{Introduction}
-The author of this package is a physics teacher at the high school \emph{Kantonsschule Zug}, Switzerland. The main use of this package is to write physics problem sets. \LuaLaTeX{} does make it possible to integrate physical calculations directly. The package has been in use since 2016. Many bugs have been found and fixed. Nevertheless it still is possible, that some were not found yet. Therefore the author recommends not to use this package in industry or science. If one does so, it's the responsability of the user to check results for plausability. If the user finds some bugs, they can be reported at github.com or directly to the author (\texttt{thomas.jenni (at) ksz.ch}).
+The author of this package is a physics teacher at the high school \emph{Kantonsschule Zug}, Switzerland. The main use of this package is to write physics problem sets. \LuaLaTeX{} does make it possible to integrate physical calculations directly. The package has been in use since 2016. Many bugs have been found and fixed. Nevertheless it still is possible, that some were not found yet. Therefore the author recommends not to use this package in industry or science. If one does so, it's the responsability of the user to check results for plausability. If the user finds some bugs, they can be reported at github.com.
+\subsection{Dependencies}
+
+In principle this library is standalone, but it is compatible with the |siunitx| package. Calculation results can be written to \LuaLaTeX{} directly by calling the |tosiunitx()| method. If the preamble in the next section is used, the printing is done by the |\q{}| macro.
@@ -184,40 +187,45 @@ This package is a pure Lua library. Therefore one has to require it explicitly b
The following \LaTeX{} preamble loads the |lua-physical| package and creates a macro |\q| for printing physical quantities.
\nopagebreak
\begin{lstlisting}[language=Tex, caption=basic preamble, label=lst:basic preamble]
- \usepackage{siunitx}
-
- % configure siunitx
- \sisetup{
- output-decimal-marker = {.},
- per-mode = symbol,
- separate-uncertainty = true,
- add-decimal-zero = true,
- exponent-product = \cdot,
- round-mode = off
- }
+\usepackage{luacode}
+\usepackage{siunitx}
- % load the lua-physical package
- \begin{luacode*}
- physical = require("physical")
- N = physical.Number
- \end{luacode*}
+% configure siunitx
+\sisetup{
+ output-decimal-marker = {.},
+ per-mode = symbol,
+ separate-uncertainty = true,
+ add-decimal-zero = true,
+ exponent-product = \cdot,
+ round-mode = off
+}
- % print a physical quantity
- \newcommand{\q}[1]{%
- \directlua{tex.print(physical.Quantity.tosiunitx(#1,"scientific-notation=fixed,exponent-to-prefix=false"))}%
- }
-\end{lstlisting}
+% load the lua-physical package
+\begin{luacode*}
+ physical = require("physical")
+ N = physical.Number
+\end{luacode*}
-\subsection{Dependencies}
-In principle this library is standalone, but it is compatible with the |siunitx| package. Calculation results can be written to \LuaLaTeX{} directly by calling the |tosiunitx()| method. If the preamble above is used, the printing is done by the |\q{}| macro.
+% print a physical quantity
+\newcommand{\q}[1]{%
+ \directlua{
+ tex.print(
+ physical.Quantity.tosiunitx(
+ #1,
+ "scientific-notation=fixed,exponent-to-prefix=false"
+ )
+ )
+ }%
+}
+\end{lstlisting}
\subsection{License}
This code is freely distributable under the terms of the MIT license.\\
-Copyright (c) 2019 Thomas Jenni\\
+Copyright (c) 2020 Thomas Jenni\\
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\\
@@ -243,9 +251,10 @@ Given the basic preamble, units can be used in lua code directly. By convention,
\end{luacode}
A car travels $\q{s}$ in $\q{t}$. calculate its velocity.
-\begin{align}
- v=\frac{s}{t} = \frac{\q{s}}{\q{t}} = \uuline{\q{v}}
-\end{align}
+%
+\begin{equation*}
+ v=\frac{s}{t} = \frac{\q{s}}{\q{t}} = \underline{\q{v}}
+\end{equation*}
\end{lstlisting}
\begin{luacode}
@@ -257,9 +266,10 @@ A car travels $\q{s}$ in $\q{t}$. calculate its velocity.
\leftbar
A car travels $\q{s}$ in $\q{t}$. Calculate its velocity.
-\begin{align}
- v=\frac{s}{t} = \frac{\q{s}}{\q{t}} = \uuline{\q{v}}
-\end{align}
+%
+\begin{equation*}
+ v=\frac{s}{t} = \frac{\q{s}}{\q{t}} = \underline{\q{v}}
+\end{equation*}
\endleftbar
In the above listing~\ref{lst:Car Velocity}, the variable |s| stands for displacement and has the unit meter |_m|, the variable |t| stands for time and is given in seconds |_s|. If mathematical operations are done on them, new physical quantities are created. In the problem above, the velocity |v| is calculated by dividing |s| by |t|. The instance |v| has the derived unit \si{\m\per\s}. By using the macro |\q{}| all quantities can be printed to the \LuaLaTeX{} code directly.
@@ -272,6 +282,8 @@ In the above listing~\ref{lst:Car Velocity}, the variable |s| stands for displac
Very often, the result of a calculation has to be converted to another unit. In listing~\ref{lst:Volume of Cuboid} the task is to calculate the volume of a cuboid. The length of the edges are given in different units. The volume is calculated by multipling all three lengths, the unit of the result is \si{\cm\mm\m}. If the unit \si{\cm\cubed} is preferred, it has to be converted explicitly. The conversion function is called |to()| and is available on all physical quantitiy instances. At first this looks a bit cumbersome. The reason of this behaviour is, that the software is not able to guess the unit of the result. In many cases, like in the example here, it's not clear what unit the result sould have. Therefore the user has always to give the target unit explicitly.
+\pagebreak
+
\begin{lstlisting}[caption=Volume of a cuboid.,label=lst:Volume of Cuboid]
\begin{luacode}
a = 12 * _cm
@@ -283,12 +295,13 @@ Very often, the result of a calculation has to be converted to another unit. In
Find the volume of a rectangular cuboid with lengths $\q{a}$,
$\q{b}$ and $\q{c}$.
-\begin{align}
+%
+\begin{equation*}
V= a \cdot b \cdot c
= \q{a} \cdot \q{b} \cdot \q{c}
= \q{V}
- = \uuline{\q{V:to(_dm^3)}}
-\end{align}
+ = \underline{\q{V:to(_dm^3)}}
+\end{equation*}
\end{lstlisting}
\begin{luacode}
@@ -301,12 +314,13 @@ $\q{b}$ and $\q{c}$.
\leftbar
Find the volume of a rectangular cuboid with lengths $\q{a}$, $\q{b}$ and $\q{c}$.
-\begin{align}
+%
+\begin{equation*}
V= a \cdot b \cdot c
= \q{a} \cdot \q{b} \cdot \q{c}
= \q{V}
- = \uuline{\q{V:to(_dm^3)}}
-\end{align}
+ = \underline{\q{V:to(_dm^3)}}
+\end{equation*}
\endleftbar
@@ -394,9 +408,9 @@ In the following problem, listing~\ref{lst:temperature conversion}, the task is
The package supports uncertainty propagation. To create a number with an uncertainty, an instance of |physical.Number| has to be created, see listing~\ref{lst:rectangular area}. It has to be remembered, that |N| is a alias for |physical.Number|. The first argument of the constructor |N(mean, uncertainty)| is the mean value and the second one the uncertainty of the measurement. If the proposed preamble \ref{lst:basic preamble} is used, the uncertainty is by default seperated from the mean value by a plus-minus sign.
For the uncertainty propagation the gaussian formula
-\begin{align}
+\begin{equation*}
\Delta f = \sqrt{ \left(\frac{\partial f}{x_1} \cdot \Delta x_1\right)^2 + \dots + \left(\frac{\partial f}{x_n} \cdot \Delta x_2 \right)^2 }
-\end{align}
+\end{equation*}
is used. This formula is a good estimation for the uncertainty $\Delta f$, if the quantities $x_1, \dots, x_n$ the function $f$ depends on, have no correlation. Further, the function $f$ has to change linear, if quantities $x_i$ are changed in the range of their uncertainties.
@@ -410,11 +424,12 @@ is used. This formula is a good estimation for the uncertainty $\Delta f$, if th
\end{luacode}
Calculate the area of a rectangle with lengths $\q{a}$ and $\q{b}$.
-\begin{align}
+%
+\begin{equation*}
A = a \cdot b
= \q{a} \cdot \q{b}
- = \uuline{\q{A}}
-\end{align}
+ = \underline{\q{A}}
+\end{equation*}
\end{lstlisting}
\begin{luacode}
@@ -426,11 +441,12 @@ Calculate the area of a rectangle with lengths $\q{a}$ and $\q{b}$.
\leftbar
Calculate the area of a rectangle with lengths $\q{a}$ and $\q{b}$.
-\begin{align}
+%
+\begin{equation*}
A = a \cdot b
= \q{a} \cdot \q{b}
- = \uuline{\q{A}}
-\end{align}
+ = \underline{\q{A}}
+\end{equation*}
\endleftbar
@@ -449,11 +465,12 @@ In the following problem, listing~\ref{lst:volume of ideal gas}, the task is to
\end{luacode}
An ideal gas ($\q{n}$) has a pressure of $\q{p}$ and a temperature of $\q{T}$. Calculate the volume of the gas.
-\begin{align}
+%
+\begin{equation*}
V=\frac{ \q{n} \cdot \q{_R} \cdot \q{(T + _degC_0):to(_K)} }{ \q{p} }
= \q{V}
- = \uuline{\q{V}}
-\end{align}
+ = \underline{\q{V}}
+\end{equation*}
\end{lstlisting}
@@ -468,11 +485,11 @@ An ideal gas ($\q{n}$) has a pressure of $\q{p}$ and a temperature of $\q{T}$. C
\leftbar
An ideal gas ($\q{n}$) has a pressure of $\q{p}$ and a temperature of $\q{T}$. Calculate the volume of the gas.
-
-\begin{align}
+%
+\begin{equation*}
V=\frac{ \q{n} \cdot \q{(_R*N(1,0.001)):to(_J/(_mol*_K))} \cdot \q{(T + _degC_0):to(_K)} }{ \q{p} }
- = \uuline{\q{V}}
-\end{align}
+ = \underline{\q{V}}
+\end{equation*}
\endleftbar
This example shows, that the result has only two digits. If more digits are needed, the uncertainties of the given quantities should be smaller.
@@ -698,7 +715,7 @@ length &
meter &
|_m| &
$\mathrm{L}$ &
-The SI unit of length. It is defined by taking the fixed numercial value of the speed of light in vacuum $c$ to be $\num{299792458}$ when expressed in the unit of $\q{_m/_s}$. \\
+The SI unit of length. It is defined by taking the fixed numercial value of the speed of light in vacuum $c$ to be $\num{299792458}$ when expressed in the unit of $\qu{_m/_s}$. \\
\hline
@@ -738,7 +755,7 @@ thermodynamic \newline temperature &
kelvin &
|_K| &
$\mathrm{K}$ \protect\footnotemark &
-The SI unit of the thermodynamic temperature. It is defineed by taking the fixed numerical value of the Boltzmann constant $k_B$ to be $\qs{(_k_B/(_J/_K)):to()}$ when expressed in $\q{_kg*_m^2*_s^-2*_K^-1}$\\
+The SI unit of the thermodynamic temperature. It is defineed by taking the fixed numerical value of the Boltzmann constant $k_B$ to be $\qs{(_k_B/(_J/_K)):to()}$ when expressed in $\qu{_kg*_m^2*_s^-2*_K^-1}$\\
amount of \newline substance &
mole &
@@ -1639,7 +1656,7 @@ tex.write(tostring(T:to()) )
\item |mode| : |number|
\end{description}
- If |mode| is equal |Q.siunitx_SI|, which is the default, the quantity is converted to an \textbackslash SI\{\}\{\} macro. If mode is |Q.siunitx_num|, the quantity is converted to \textbackslash num\{\} and if it is |Q.siunitx_si| the macro \textbackslash si\{\} is printed.
+ If |mode| is equal |Q.SIUNITX_SI|, which is the default, the quantity is converted to an \textbackslash SI\{\}\{\} macro. If mode is |Q.SIUNITX_num|, the quantity is converted to \textbackslash num\{\} and if it is |Q.SIUNITX_si| the macro \textbackslash si\{\} is printed.
\begin{lstlisting}
s = 1.9 * _km
@@ -1652,17 +1669,17 @@ tex.write(tostring(s:tosiunitx()) )
\end{luacode}
`
-print( s:tosiunitx(nil,Q.siunitx_num) )
+print( s:tosiunitx(nil,Q.SIUNITX_num) )
`
\begin{luacode}
-tex.write(tostring(s:tosiunitx(nil,Q.siunitx_num)) )
+tex.write(tostring(s:tosiunitx(nil,Q.SIUNITX_num)) )
\end{luacode}
`
-print( s:tosiunitx(nil,Q.siunitx_si) )
+print( s:tosiunitx(nil,Q.SIUNITX_si) )
`
\begin{luacode}
-tex.write(tostring(s:tosiunitx(nil,Q.siunitx_si)) )
+tex.write(tostring(s:tosiunitx(nil,Q.SIUNITX_si)) )
\end{luacode}
`
\end{lstlisting}
@@ -2035,9 +2052,9 @@ tex.write(tostring(x:atan():to(_deg)))
\method{Q}{sinh(q)}
\begin{quote}
Returns the value of the hyperbolic sine function of the given quantity. The quantity has to be dimensionless. Since Lua doesn't implement the hyperbolic functions, the following formula is used
- \begin{align}
+ \begin{equation*}
\sinh(x) = 0.5 \cdot e^x - 0.5 / e^x \quad.
- \end{align}
+ \end{equation*}
\begin{description}
\item |q| : |Q|, |N|, |number|\\
@@ -2066,9 +2083,9 @@ tex.write(tostring(x:sinh()))
\method{Q}{cosh(q)}
\begin{quote}
Returns the value of the hyperbolic cosine function of the given quantity. The quantity has to be dimensionless. Since Lua doesn't implement the hyperbolic functions, the following formula is used
- \begin{align}
+ \begin{equation*}
\cosh(x) = 0.5 \cdot e^x + 0.5 / e^x \quad.
- \end{align}
+ \end{equation*}
\begin{description}
\item |q| : |Q|, |N|, |number|\\
@@ -2096,9 +2113,9 @@ tex.write(tostring(x:cosh()))
\method{Q}{tanh(q)}
\begin{quote}
Returns the value of the hyperbolic tangent function of the given quantity. The quantity has to be dimensionless. Since Lua doesn't implement the hyperbolic functions, the following formula is used
- \begin{align}
+ \begin{equation*}
\tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} \quad.
- \end{align}
+ \end{equation*}
\begin{description}
\item |q| : |Q|, |N|, |number|\\
@@ -2127,9 +2144,9 @@ tex.write(tostring(x:tanh()))
\method{Q}{asinh(q)}
\begin{quote}
Returns the value of the inverse hyperbolic sine function of the given quantity. The quantity has to be dimensionless. Since Lua doesn't implement the hyperbolic functions, the following formula is used
- \begin{align}
+ \begin{equation*}
\text{asinh}(x) = \ln\left( x + \sqrt{x^2 + 1} \right) \quad.
- \end{align}
+ \end{equation*}
\begin{description}
\item |q| : |Q|, |N|, |number|\\
@@ -2158,9 +2175,9 @@ tex.write(tostring(x:asinh()))
\method{Q}{acosh(q)}
\begin{quote}
Returns the value of the inverse hyperbolic cosine function of the given quantity. The quantity has to be dimensionless. Since Lua doesn't implement the hyperbolic functions, the following formula is used
- \begin{align}
+ \begin{equation*}
\text{acosh}(x) = \ln\left( x + \sqrt{x^2 - 1} \right) \quad, x > 1 \quad.
- \end{align}
+ \end{equation*}
\begin{description}
\item |q| : |Q|, |N|, |number|\\
@@ -2189,9 +2206,9 @@ tex.write(tostring(x:acosh()))
\method{Q}{atanh(q)}
\begin{quote}
Returns the value of the inverse hyperbolic tangent function of the given quantity. The quantity has to be dimensionless. Since Lua doesn't implement the hyperbolic functions, the following formula is used
- \begin{align}
+ \begin{equation*}
\text{atanh}(x) = \ln\left( \frac{1 + x}{1 - x} \right) \quad, -1 < x < 1 \quad.
- \end{align}
+ \end{equation*}
\begin{description}
\item |q| : |Q|, |N|, |number|\\
@@ -3052,12 +3069,30 @@ tex.write(tostring(n:atanh()))
\newpage
\section{Change History}
-V1.0.2 \quad (2020/09/07) Minor release. Path issues resolved. Docs corrected.
-V1.0.1 \quad (2020/09/05) Minor release. Files renamed.
+\newcommand{\vhist}[4]{
+#1 \quad (#2) \qquad \textbf{#3} \\
+\hangindent2em
+#4
+\vspace{1em}
+}
-V1.0 \quad (2020/09/03) First official release.
+\vhist{V1.0.3}{2020/09/09}{Minor release}{
+ Changed foldername |physical| to |src|. Changed Classvariables |Q.siunitx\_SI|, |Q.siunitx\_num| and |Q.siunitx\_si| to uppercase |Q.SIUNITX\_SI|, |Q.SIUNITX\_num| and |Q.SIUNITX\_si|.
+}
+
+\vhist{V1.0.2}{2020/09/07}{Minor release}{
+ Path issues resolved. Docs corrected.
+}
+
+\vhist{V1.0.1}{2020/09/05}{Minor release}{
+ Files renamed.
+}
+
+\vhist{V1.0.1}{2020/09/03}{First official release.}{
+
+}
diff --git a/macros/luatex/latex/lua-physical/physical/physical-astronomical.lua b/macros/luatex/latex/lua-physical/src/physical-astronomical.lua
index 48ca5646b8..48ca5646b8 100644
--- a/macros/luatex/latex/lua-physical/physical/physical-astronomical.lua
+++ b/macros/luatex/latex/lua-physical/src/physical-astronomical.lua
diff --git a/macros/luatex/latex/lua-physical/physical/physical-data.lua b/macros/luatex/latex/lua-physical/src/physical-data.lua
index efc1a30ffa..efc1a30ffa 100644
--- a/macros/luatex/latex/lua-physical/physical/physical-data.lua
+++ b/macros/luatex/latex/lua-physical/src/physical-data.lua
diff --git a/macros/luatex/latex/lua-physical/physical/physical-definition.lua b/macros/luatex/latex/lua-physical/src/physical-definition.lua
index cf1576b4c5..cf1576b4c5 100644
--- a/macros/luatex/latex/lua-physical/physical/physical-definition.lua
+++ b/macros/luatex/latex/lua-physical/src/physical-definition.lua
diff --git a/macros/luatex/latex/lua-physical/physical/physical-dimension.lua b/macros/luatex/latex/lua-physical/src/physical-dimension.lua
index edd9e65997..edd9e65997 100644
--- a/macros/luatex/latex/lua-physical/physical/physical-dimension.lua
+++ b/macros/luatex/latex/lua-physical/src/physical-dimension.lua
diff --git a/macros/luatex/latex/lua-physical/physical/physical-isotope.lua b/macros/luatex/latex/lua-physical/src/physical-isotope.lua
index 0ec85f1a5e..0ec85f1a5e 100644
--- a/macros/luatex/latex/lua-physical/physical/physical-isotope.lua
+++ b/macros/luatex/latex/lua-physical/src/physical-isotope.lua
diff --git a/macros/luatex/latex/lua-physical/physical/physical-number.lua b/macros/luatex/latex/lua-physical/src/physical-number.lua
index 8c278aacfe..8c278aacfe 100644
--- a/macros/luatex/latex/lua-physical/physical/physical-number.lua
+++ b/macros/luatex/latex/lua-physical/src/physical-number.lua
diff --git a/macros/luatex/latex/lua-physical/physical/physical-quantity.lua b/macros/luatex/latex/lua-physical/src/physical-quantity.lua
index 47a02063c5..d89fdd2836 100644
--- a/macros/luatex/latex/lua-physical/physical/physical-quantity.lua
+++ b/macros/luatex/latex/lua-physical/src/physical-quantity.lua
@@ -46,9 +46,9 @@ Quantity._base = {}
Quantity._prefixes = {}
-- modes for the function tosiunitx()
-Quantity.siunitx_SI = 0
-Quantity.siunitx_num = 1
-Quantity.siunitx_si = 2
+Quantity.SIUNITX_SI = 0
+Quantity.SIUNITX_num = 1
+Quantity.SIUNITX_si = 2
-- constructor
@@ -416,20 +416,20 @@ end
-- convert quantity to an siunitx expression
function Quantity:tosiunitx(param,mode)
- mode = mode or self.siunitx_SI
+ mode = mode or self.SIUNITX_SI
param = param or ""
if param ~= "" then
param = "["..param.."]"
end
- if mode == Quantity.siunitx_SI then
+ if mode == Quantity.SIUNITX_SI then
return "\\SI"..param.."{"..tostring(self.value).."}".."{"..self.unit:tosiunitx().."}"
- elseif mode == Quantity.siunitx_num then
+ elseif mode == Quantity.SIUNITX_num then
return "\\num"..param.."{"..tostring(self.value).."}"
- elseif mode == Quantity.siunitx_si then
+ elseif mode == Quantity.SIUNITX_si then
return "\\si"..param.."{"..self.unit:tosiunitx().."}"
else
diff --git a/macros/luatex/latex/lua-physical/physical/physical-unit.lua b/macros/luatex/latex/lua-physical/src/physical-unit.lua
index 65c016449b..65c016449b 100644
--- a/macros/luatex/latex/lua-physical/physical/physical-unit.lua
+++ b/macros/luatex/latex/lua-physical/src/physical-unit.lua
diff --git a/macros/luatex/latex/lua-physical/physical.lua b/macros/luatex/latex/lua-physical/src/physical.lua
index 2af9d7677a..8c8d30171b 100755..100644
--- a/macros/luatex/latex/lua-physical/physical.lua
+++ b/macros/luatex/latex/lua-physical/src/physical.lua
@@ -3,8 +3,8 @@
lua-physical
Author: Thomas Jenni
-Version: 1.0.2
-Date: 2020-09-07
+Version: 1.0.3
+Date: 2020-09-09
License: MIT
diff --git a/macros/luatex/latex/lua-physical/test/testData.lua b/macros/luatex/latex/lua-physical/test/testData.lua
index 6af56c24f3..44db28afc3 100644
--- a/macros/luatex/latex/lua-physical/test/testData.lua
+++ b/macros/luatex/latex/lua-physical/test/testData.lua
@@ -24,7 +24,7 @@ SOFTWARE.
local lu = require("luaunit")
-package.path = "../physical/?.lua;" .. package.path
+package.path = "../src/?.lua;" .. package.path
local physical = require("physical")
diff --git a/macros/luatex/latex/lua-physical/test/testDefinition.lua b/macros/luatex/latex/lua-physical/test/testDefinition.lua
index a36d460086..b8ffe3eb56 100644
--- a/macros/luatex/latex/lua-physical/test/testDefinition.lua
+++ b/macros/luatex/latex/lua-physical/test/testDefinition.lua
@@ -24,7 +24,7 @@ SOFTWARE.
local lu = require("luaunit")
-package.path = "../physical/?.lua;" .. package.path
+package.path = "../src/?.lua;" .. package.path
local physical = require("physical")
local N = physical.Number
diff --git a/macros/luatex/latex/lua-physical/test/testDimension.lua b/macros/luatex/latex/lua-physical/test/testDimension.lua
index 8578196995..872e399544 100644
--- a/macros/luatex/latex/lua-physical/test/testDimension.lua
+++ b/macros/luatex/latex/lua-physical/test/testDimension.lua
@@ -24,7 +24,7 @@ SOFTWARE.
local lu = require("luaunit")
-package.path = "../physical/?.lua;" .. package.path
+package.path = "../src/?.lua;" .. package.path
local physical = require("physical")
local D = physical.Dimension
diff --git a/macros/luatex/latex/lua-physical/test/testNumber.lua b/macros/luatex/latex/lua-physical/test/testNumber.lua
index e41ff355e5..68c543604f 100644
--- a/macros/luatex/latex/lua-physical/test/testNumber.lua
+++ b/macros/luatex/latex/lua-physical/test/testNumber.lua
@@ -24,7 +24,7 @@ SOFTWARE.
local lu = require("luaunit")
-package.path = "../physical/?.lua;" .. package.path
+package.path = "../src/?.lua;" .. package.path
local physical = require("physical")
local N = physical.Number
diff --git a/macros/luatex/latex/lua-physical/test/testQuantity.lua b/macros/luatex/latex/lua-physical/test/testQuantity.lua
index e7e1223ab6..dd98d89572 100644
--- a/macros/luatex/latex/lua-physical/test/testQuantity.lua
+++ b/macros/luatex/latex/lua-physical/test/testQuantity.lua
@@ -24,7 +24,7 @@ SOFTWARE.
local lu = require("luaunit")
-package.path = "../physical/?.lua;" .. package.path
+package.path = "../src/?.lua;" .. package.path
local physical = require("physical")
local N = physical.Number
diff --git a/macros/luatex/latex/lua-physical/test/testUnit.lua b/macros/luatex/latex/lua-physical/test/testUnit.lua
index 1e3107ae07..34e13e2926 100644
--- a/macros/luatex/latex/lua-physical/test/testUnit.lua
+++ b/macros/luatex/latex/lua-physical/test/testUnit.lua
@@ -24,7 +24,7 @@ SOFTWARE.
local lu = require("luaunit")
-package.path = "../physical/?.lua;" .. package.path
+package.path = "../src/?.lua;" .. package.path
local physical = require("physical")
local D = physical.Dimension