diff --git a/docs/fduthesis-doc-en.tex b/docs/fduthesis-doc-en.tex new file mode 100644 index 0000000..8df62df --- /dev/null +++ b/docs/fduthesis-doc-en.tex @@ -0,0 +1,1076 @@ +\PassOptionsToPackage{scheme=plain, linespread=1.1}{ctex} +\documentclass{fdudoc} +\hypersetup{ + pdftitle = {fduthesis: LaTeX Thesis Template for Fudan University}, + pdfauthor = {Xiangdong Zeng}} +\ctexset{ + section = {name = {}, format+ = \raggedright}, + subsubsection/tocline = {\CTEXnumberline{#1}#2}} +\pagestyle{headings} +\def\FSID{{\xeCJKsetup{PunctStyle=banjiao}。}} +\def\FSFW{{\xeCJKsetup{PunctStyle=banjiao}.}} + +\title{\textcolor{MaterialIndigo800}{% + \textbf{The \textsf{fduthesis} Class \\ + \LaTeX{} Thesis Template for Fudan University}}} +\author{Xiangdong Zeng} +\date{2019/04/03\quad v0.7d% + \thanks{\url{https://github.com/stone-zeng/fduthesis}.}} + +\begin{document} + +\DeleteShortVerb\" + +\newgeometry{ + left = 1.25 in, + right = 1.25 in, + top = 1.25 in, + bottom = 1.00 in +} + +\maketitle +\vfill +\begin{center} + \includegraphics[width=8cm]{../logo/fduthesis-cover.pdf} +\end{center} +\vfill +\thispagestyle{plain} +\clearpage + +\tableofcontents + +\newgeometry{ + left = 1.65 in, + right = 0.80 in, + top = 1.25 in, + bottom = 1.00 in +} + +\section{Introduction} + +\cls{fduthesis} is a thesis template for Fudan University. +This template is mostly written in \LaTeX3 syntax, and +provides a simple interface for users. + +\subsection*{Getting started with \LaTeX{}} + +This documentation is \emph{not} a \LaTeX{} tutorial at +starter's level. If you are totally a newbie, please read some +introductions like the famous \pkg{lshort}. Of course, there +are countless \LaTeX{} tutorials on the Internet. You can +choose whatever you like. + +\subsection*{About this documentation} + +In this documentation, different typefaces are used to +represent different contents. Packages and classes are shown +in sans-serif font, e.g.\ \pkg{xeCJK} package and +\cls{fduthesis} class. Commands and file names are shown in +monospaced font, e.g.\ command \cs{fdusetup}, environment +\env{abstract} and \TeX{} document \file{thesis.tex}. +Italic-shaped font with angle brackets outside means arguments, +e.g.\ \meta{English title}. However, you do not need to type +the brackets when using these commands. The example code has +proper syntax highlighting so it will be much easier to read. + +\LaTeX{} code lines will have a blue line on their left, while +for command lines there will be a pink line. The options, +commands and environments in \cls{fduthesis} will be surrounded +by two horizontal lines. Their usages and descriptions are +provided at the same time. + +The options, commands and environments in \cls{fduthesis} can be +divided into the following three types: +\begin{itemize} + \item Those can be only used in \emph{Chinese templates} are + indicated by \rexptarget\rexpstar{}. + \item Those can be only used in \emph{English templates} are + indicated by \rexptarget\expstar{}. + \item If they do not have special characters afterwards, then + you can use them in both Chinese and English templates. +\end{itemize} + +If you want to read the implementation part, please turn to the +Chinese version. Any issues or feature requests can be submitted +in the \href{https://github.com/stone-zeng/fduthesis/issues}% +{GitHub repository}. + +\section{Installation} + +\subsection{Obtaining \cls{fduthesis}} + +\subsubsection{Standard installation} + +If there are no special reasons, it is always recommended to +install \cls{fduthesis} with a package manager. For example, +the following command will install the package in \TeXLive{} +(administrator permission may be required): +\begin{shellexample}[gobble=1,morekeywords={tlmgr,install}] + tlmgr install fduthesis +\end{shellexample} + +In \TeXLive{} and \MiKTeX{}, you can also install \cls{fduthesis} +through a graphical interface. It's rather simple and will not be +described here. + +\subsubsection{Install manually} + +If you want to download the template from CTAN and install it +manually, the recommended way is to use the TDS ZIP file: +\begin{itemize} + \item Download the \href{http://mirror.ctan.org/install/macros/latex/contrib/fduthesis.tds.zip}% + {TDS ZIP file} for \cls{fduthesis}; + \item Copy all the files in \file{fduthesis.tds.zip} into the + local TDS directory of \TeX{} distribution. + \item Run \bashcmd{mktexlsr} to update the ls-R database. +\end{itemize} +Although not recommended, you may generate the whole template +from source code as well: +\begin{itemize} + \item Open the project's \href{https://github.com/stone-zeng/fduthesis}% + {homepage}, click ``Clone or download'' and choose + ``Download ZIP'' to download \file{fduthesis-master.zip}. + If you have git program on your computer, you can also + clone the repository directly: + \begin{shellexample}[gobble=5,alsoletter={.},% + morekeywords={git,clone}] + git clone https://github.com/stone-zeng/fduthesis.git + \end{shellexample} + \item Extract files, and get into the \file{source} directory. + Run the following command to generate all the components: + \begin{shellexample}[gobble=5,morekeywords={xetex}] + xetex fduthesis.dtx + \end{shellexample} + \item Copy the generated document classes (\file{.cls}), + packages (\file{.sty}) and configuration files (\file{.def}) + into \path{texmf-local/tex/latex/fduthesis/} under the local + TDS tree of \TeX{} distribution. Then run \bashcmd{mktexlsr} + to update the ls-R database. + \item When writing your thesis with \cls{fduthesis}, you need + to copy the file \file{fudan-name.pdf} (can be found in the + \file{testfiles/support} directory of the Git repository) to + your working directory, to make sure that the logo in the + cover can be displayed correctly. +\end{itemize} + +\subsubsection{\cls{fduthesis} on the fly} + +If you don't want to install \cls{fduthesis} but need to use it +at once, you can try the installation scripts. Download the +repository from GitHub, run \file{install-win.bat} (on Windows) +or \file{install-linux.sh} (on Linux), then all the necessary +files will be found in the \file{thesis} folder. + +\subsection{Composition of the template} + +There are several parts in \cls{fduthesis}, including kernel +template classes, configuration files, affiliated packages and +user's guides. More details are listed in table~% +\ref{tab:fduthesis-components}. + +\begin{table}[ht] + \caption{The main components of \cls{fduthesis}} + \label{tab:fduthesis-components} + \centering + \begin{tabular}{lp{24em}} + \toprule + \textbf{Files} & \textbf{Descriptions} \\ + \midrule + \file{fduthesis.cls} & Document class for Chinese thesis. \\ + \file{fduthesis-en.cls} & Document class for English thesis.\\ + \file{fduthesis.def} & Configuration parameters file + for \cls{fduthesis}. Please do \emph{not} modify it. \\ + \file{fdudoc.cls} & Document class for user guides. \\ + \file{fdulogo.sty} & Fudan University's visual identity. \\ + \file{fudan-emblem.pdf} & University emblem. \\ + \file{fudan-emblem-new.pdf} & University emblem (revised version). \\ + \file{fudan-name.pdf} & Figure of university name. \\ + \file{README.md} & The brief introduction. \\ + \file{fduthesis.pdf} & User's guide in Chinese. \\ + \file{fduthesis-en.pdf} & User's guide in English (this + document). \\ + \file{fduthesis-code.pdf} & Code implementation. \\ + \file{fduthesis-template.tex} & An empty thesis template, and you can + write your thesis based on it. \\ + \bottomrule + \end{tabular} +\end{table} + +\section{User's guide} + +\subsection{Getting started} + +Here is a minimal \TeX{} file for \cls{fduthesis}: +\begin{latexexample}[gobble=1,deletetexcs={\documentclass},% + moretexcs={\chapter},morekeywords={\documentclass},% + emph={[2]document}] + % thesis.tex + \documentclass{fduthesis} + \begin{document} + \chapter{欢迎} + \section{Welcome to fduthesis!} + 你好,\LaTeX{}! + \end{document} +\end{latexexample} + +Compile this file under the instructions in subsection~% +\ref{subsec:compilation}, you will get a 5-page article. +Of course, most of it will be blank, as you may predicate. + +The English version can be used in the same way: +\begin{latexexample}[gobble=1,deletetexcs={\documentclass},% + moretexcs={\chapter},morekeywords={\documentclass},% + emph={[2]document}] + % thesis-en.tex + \documentclass{fduthesis-en} + \begin{document} + \chapter{Welcome} + \section{Welcome to fduthesis!} + Hello, \LaTeX{}! + \end{document} +\end{latexexample} +The differences between English and Chinese version only +live in the main body. Thesis cover, instructors list and +declaration page are still printed in Chinese. + +\subsection{Compilation} \label{subsec:compilation} + +\cls{fduthesis} does NOT support \pdfTeX{}. Please use +\XeLaTeX{} or \LuaLaTeX{} to compile, and \XeLaTeX{} is +recommended. To get the correct table of contents, footnotes +and cross-references, you need to compile the source file at +least twice. + +In the following example, suppose your \TeX{} source file is +\file{thesis.tex}. Please execute the following commands if +you want to use \XeLaTeX{}: +\begin{shellexample}[gobble=1,morekeywords={xelatex}] + xelatex thesis + xelatex thesis +\end{shellexample} +You can use \pkg{latexmk} as well: +\begin{shellexample}[gobble=1,morekeywords={latexmk},emph={-xelatex}] + latexmk -xelatex thesis +\end{shellexample} + +\LuaLaTeX{} can be used in a similar way: +\begin{shellexample}[gobble=1,morekeywords={lualatex}] + lualatex thesis + lualatex thesis +\end{shellexample} +or +\begin{shellexample}[gobble=1,morekeywords={latexmk},emph={-lualatex}] + latexmk -lualatex thesis +\end{shellexample} + +\subsection{Options of the template} + +You can specify some \emph{template options} when loading +\cls{fduthesis}: +\begin{latexexample}[gobble=1,deletetexcs={\documentclass},% + morekeywords={\documentclass}] + \documentclass(*\oarg{options}*){fduthesis} + \documentclass(*\oarg{options}*){fduthesis-en} +\end{latexexample} + +Some options are \emph{boolean} --- they only take the value +\opt{true} or \opt{false}. For these options, you can +abbreviate ``\kvopt{\meta{option}}{true}'' simply to +``\opt{\meta{option}}''. + +\begin{function}[added=2018-02-01]{type} + \begin{fdusyntax}[gobble=0,emph={[1]type}] + type = (**) + \end{fdusyntax} + Choose the type of your thesis. The three options represent + doctoral dissertation, master degree thesis and undergraduate + thesis, respectively. +\end{function} + +\begin{function}{oneside,twoside} + Specify whether single or double sided output should be + generated. \opt{twoside} will be chosen by default. These + option will determine where the new chapters begin and how + the headers display. The option \opt{twoside} does + \emph{not} tell the printer to actually make a two-sided + printout. +\end{function} + +If choosing \opt{twoside}, chapters will begin at the odd pages +(right hand). However, they will begin at arbitrary pages +available when choosing \opt{oneside}. Table of contents, +abstract and the list of symbols are considered as chapters and +processed in the same way. + +At two-sided mode, left headers on the even pages (left hand) +in \emph{main body} will show the title of chapters, while the +right headers on the odd pages (right hand) will show the +title of sections. Headers in \emph{front matter} have the +same style, but they will only show the title as ``Contents'', +``Abstract'', etc. + +At one-sided mode, both left and right headers on \emph{all} +pages in main body will be shown. The text is the title of +chapters and sections, respectively. In front matter, there +are only middle headers, which show the corresponding titles. + +\begin{function}{draft} + \begin{fdusyntax}[gobble=0,emph={[1]draft}] + draft = (*<\TFF>*) + \end{fdusyntax} + Enable draft mode. Default off. +\end{function} + +\opt{draft} is a global option and will affect many packages. +You may notice the following changes when using \opt{draft}: +\begin{itemize} + \item Lines with overfull \tn{hbox}'s will be marked with + a thick black square on the right margin. + \item Will not include graphics files actually, but instead + print a box of the size the graphic would take up, as well + as the file name. + \item Will not make hyperlinks and PDF bookmarks. + \item Show the page frames. +\end{itemize} + +\begin{function}[added=2018-01-31]{config} + \begin{fdusyntax}[gobble=0,emph={[1]config}] + config = (*\marg{file}*) + \end{fdusyntax} + File name of user profile. Default value is empty, so no + profile is loaded automatically. +\end{function} + +\subsection{More options} + +\begin{function}{\fdusetup} + \begin{fdusyntax}[gobble=0,morekeywords={\fdusetup}] + \fdusetup(*\marg{key-value list}*) + \end{fdusyntax} + \cls{fduthesis} has provided a number of options, which + can be given via the general command \cs{fdusetup}. +\end{function} + +The argument of \cs{fdusetup} is a set of comma-separated option +list. The options usually have the form of \kvopt{\meta{key}}% +{\meta{value}} and in some cases \meta{value} can be omitted. +For the same option, the values given later will override the +the previous ones. Default values are indicated in +\textbf{boldface} in the following descriptions. + +\cs{fdusetup} follows \LaTeX3 key-value style, and different +types as well as various levels options are supported. In the +key-value list, spaces around ``|=|'' will be trimmed; however, +blank lines should never appear in the argument. + +Similar with template options, ``\kvopt{\meta{option}}{true}'' +can be abbreviated to \opt{\meta{option}} for boolean type. + +Some options, such as \opt{style} and \opt{info}, may have +sub-options. They can be set by the following two equivalent +methods: +\begin{latexexample}[gobble=1,morekeywords={\fdusetup},% + emph={[1]style,cjk-font,font-size,info,title,title*,author,author*,department}] + \fdusetup{ + style = {cjk-font = adobe, font-size = -4}, + info = { + title = {论动体的电动力学}, + title* = {On the Electrodynamics of Moving Bodies}, + author = {阿尔伯特·爱因斯坦}, + author* = {Albert Einstein}, + department = {物理学系} + } + } +\end{latexexample} +or +\begin{latexexample}[gobble=1,morekeywords={\fdusetup},% + emph={[1]style,cjk-font,font-size,info,title,title*,author,author*,department}] + \fdusetup{ + style/cjk-font = adobe, + style/font-size = -4, + info/title = {论动体的电动力学}, + info/title* = {On the Electrodynamics of Moving Bodies}, + info/author = {阿尔伯特·爱因斯坦}, + info/author* = {Albert Einstein}, + info/department = {物理学系} + } +\end{latexexample} + +Note that you may \emph{not} put spaces around ``|/|''. + +\subsubsection{Style and format} \label{subsubsec:style-and-format} + +\begin{function}{style} + \begin{fdusyntax}[gobble=0,emph={[1]style}] + style = (*\marg{key-value list}*) + style/(*\meta{key}*) = (*\meta{value}*) + \end{fdusyntax} + This general option is for setting the thesis style and format. + See the following details. +\end{function} + +\begin{function}[updated=2019-03-05]{style/font} + \begin{fdusyntax}[gobble=0,emph={[1]font}] + font = (**) + \end{fdusyntax} + Set fonts (including math fonts). The details can be found in table~\ref{tab:font}. +\end{function} + +\begin{table}[ht] +\begin{threeparttable} + \caption{Font configuration} + \label{tab:font} + \centering + \begin{tabular}{ccccc} + \toprule + & \strong{Roman} & \strong{Sans-serif} & \strong{Monospaced} & \strong{Math} \\ + \midrule + |garamond| & EB Garamond & Libertinus Sans & LM Mono\tnote{a} & Garamond Math \\ + |libertinus| & Libertinus Serif & Libertinus Sans & LM Mono & Libertinus Math \\ + |lm| & LM Roman & LM Sans & LM Mono & LM Math \\ + |palatino| & TG Pagella\tnote{b} & Libertinus Sans & LM Mono & TG Pagella Math \\ + |times| & XITS & TG Heros & TG Cursor & XITS Math \\ + |times*|\tnote{c} & Times New Roman & Arial & Courier New & XITS Math \\ + \bottomrule + \end{tabular} + \begin{tablenotes} + \item[a] ``LM'' is the abbreviation of Latin Modern. + \item[b] ``TG'' is the abbreviation of TeX Gyre. + \item[c] Here, Times New Roman, Arial and Courier New are commercial fonts. They are + installed on Windows and macOS by default. + \end{tablenotes} +\end{threeparttable} +\end{table} +\begin{function}[rEXP,updated=2019-03-05]{style/cjk-font} + \begin{fdusyntax}[gobble=0,emph={[1]cjk-font}] + cjk-font = (**) + \end{fdusyntax} + Set CJK (Chinese, Japanese and Korean) fonts. The details can be found in + table~\ref{tab:cjk-font}. +\end{function} + +\begin{table}[ht] + \caption{CJK font configuration} + \label{tab:cjk-font} + \centering + \begin{tabular}{cccc} + \toprule + & \strong{Roman (song)} & \strong{Sans-serif (hei)} & \strong{Monospaced (fang)} \\ + \midrule + |adobe| & Adobe Song Std & Adobe Heiti Std & Adobe Fangsong Std \\ + |fandol| & FandolSong & FandolHei & FandolFang \\ + |founder| & FZShuSong-Z01 & FZHei-B01 & FZFangSong-Z02 \\ + |mac| & Songti SC & Heiti SC & STFangsong \\ + |sinotype| & STSong & STHeiti & STFangsong \\ + |sourcehan| & Source Han Serif SC & Source Han Sans SC & --- \\ + |windows| & SimSun & SimHei & FangSong \\ + \bottomrule + \end{tabular} +\end{table} + +When you choose \kvopt{font}{none} or \kvopt{cjk-font}{none}, +\cls{fduthesis} will disable the default western/CJK font +settings. You may use \cs{setmainfont}, \cs{setCJKmainfont} +and \cs{set\-math\-font}, etc.\ to configure the fonts manually. + +\begin{function}{style/font-size} + \begin{fdusyntax}[gobble=0,emph={[1]font-size}] + font-size = (*<(-4)|5>*) + \end{fdusyntax} + Specify the basic font size in your thesis. +\end{function} + +\begin{function}[rEXP,updated=2017-10-14]{style/fullwidth-stop} + \begin{fdusyntax}[gobble=0,emph={[1]fullwidth-stop}] + fullwidth-stop = (**) + \end{fdusyntax} + Let full-width full stop ``\FSFW'' as the default full stop. + Generally, this punctuation is used for scientific articles, + where ``\FSID'' is easily to be confused with subscript + ``$_o$'' or ``$_0$''. +\end{function} + +If you choose \kvopt{fullwidth-stop}{catcode}, only +\emph{explicit} ``\FSID'' will be replaced by ``\FSFW''; when +choosing \kvopt{fullwidth-stop}{mapping}, however, \emph{all} +the ``\FSID'' will be replaced. + +\opt{mapping} is valid only under \XeTeX{}. When compiling +with \LuaTeX{}, it is equivalent to \opt{catcode}. + +If you want to display ``\FSID'' temporarily after setting +\kvopt{fullwidth-stop}{mapping}, the following code snippet +will be helpful: +\begin{latexexample}[gobble=1,moretexcs={\CJKfontspec},emph={[1]Mapping}] + % Compiled with XeTeX + % The outside braces is used for group + 这是一个句号{\CJKfontspec{(*\meta{font name}*)}[Mapping=full-stop]。} +\end{latexexample} + +\begin{function}{style/footnote-style} + \begin{fdusyntax}[gobble=0,emph={[1]footnote-style}] + footnote-style = (**) + \end{fdusyntax} + Set the style of footnote numbers. Note that western fonts + will affect its default value (see table~\ref{tab:footnote-font}), + so you may put it after |font| option. The one with |sans| + is for the corresponding sans-serif version, while |*| + for white on black version. +\end{function} + +\begin{table}[ht] + \caption{Relationship between option \opt{font} and the + default value of \opt{footnote-style}} + \label{tab:footnote-font} + \centering + \begin{tabular}{ccccc} + \toprule + \textbf{Western fonts settings} & + |libertinus| & |lm| & |palatino| & |times| \\ + \midrule + \textbf{Default value of footnote number style} & + |libertinus| & |pifont| & |pifont| & |xits| \\ + \bottomrule + \end{tabular} +\end{table} + +\begin{function}[added=2017-08-13]{style/hyperlink} + \begin{fdusyntax}[gobble=0,emph={[1]hyperlink}] + hyperlink = (**) + \end{fdusyntax} + Set the style of hyperlinks. \opt{border} draws borders around + hyperlinks; \opt{color} displays hyperlinks in colorful text; + \opt{none} leads to plain text, which is useful when printing + the final document. +\end{function} + +\begin{function}[added=2017-08-13,updated=2017-12-08]{style/hyperlink-color} + \begin{fdusyntax}[gobble=0,emph={[1]hyperlink-color}] + hyperlink-color = (*<(default)|classic|elegant|fantasy|material|\\ + XXXX\mbox{}~~~~~~~~~~~~~~~~~~business|science|summer|autumn|graylevel|prl>*) + \end{fdusyntax} + Set the color of hyperlinks. It is invalid if + \kvopt{hyperlink}{none}. The related colors can be found + in table~\ref{tab:hyperlink-color}. +\end{function} + +\begin{table}[ht] +\centering +\newcommand\linkcolorexam[3]{% + {\small Fig.~\textcolor[HTML]{#1}{1-2}, + Eq.~(\textcolor[HTML]{#1}{3.4})} & + {\small \textcolor[HTML]{#2}{\texttt{http://g.cn}}} & + {\small Ref.~[\textcolor[HTML]{#3}{1}], + (\textcolor[HTML]{#3}{Knuth~1986})}} +\begin{threeparttable} +\caption{Pre-defined hyperlink color schemes} +\label{tab:hyperlink-color} +\begin{tabular}{c*{3}{>{\hspace{0.2cm}}c<{\hspace{0.2cm}}}} + \toprule + \textsf{Options} & \textsf{Cross references} & \textsf{URL} & \textsf{Citation} \\ + \midrule + \opt{default} & \linkcolorexam{990000}{0000B2}{007F00} \\ + \opt{classic} & \linkcolorexam{FF0000}{0000FF}{00FF00} \\ + \opt{elegant}\tnote{a} & \linkcolorexam{961212}{C31818}{9B764F} \\ + \opt{fantasy}\tnote{b} & \linkcolorexam{FF4A19}{FF3F94}{934BA1} \\ + \opt{material}\tnote{c} & \linkcolorexam{E91E63}{009688}{4CAF50} \\ + \opt{business}\tnote{d} & \linkcolorexam{D14542}{295497}{1F6E43} \\ + \opt{science}\tnote{e} & \linkcolorexam{CA0619}{389F9D}{FF8920} \\ + \opt{summer}\tnote{f} & \linkcolorexam{00AFAF}{5F5FAF}{5F8700} \\ + \opt{autumn}\tnote{f} & \linkcolorexam{D70000}{D75F00}{AF8700} \\ + \opt{graylevel}\tnote{c} & \linkcolorexam{616161}{616161}{616161} \\ + \opt{prl}\tnote{g} & \linkcolorexam{2D3092}{2D3092}{2D3092} \\ + \bottomrule +\end{tabular} +\begin{tablenotes} + \item[a] From \href{https://tex.stackexchange.com/}% + {\TeX{} - \LaTeX{} Stack Exchange}. + \item[b] Adobe CC. + \item[c] Material Design color palette + (See \url{https://material.io/guidelines/style/color.html}). + \item[d] Microsoft Office 2016. + \item[e] From \href{https://www.wolfram.com/}{Wolfram Research website}. + \item[f] Solarized color palette + (See \url{http://ethanschoonover.com/solarized}). + \item[g] \textit{Physical Review Letter} magazine. +\end{tablenotes} +\end{threeparttable} +\end{table} + +\begin{function}[added=2018-01-25]{style/bib-backend} + \begin{fdusyntax}[gobble=0,emph={[1]bib-backend}] + bib-backend = (**) + \end{fdusyntax} + Specify the backend or driver of bibliography processing. + \BibTeX{} and \pkg{natbib} package will be used if you choose + \opt{bibtex}, while \biber{} and \pkg{biblatex} will be used + if you choose \opt{biblatex}. +\end{function} + +\begin{function}[added=2017-10-28,updated=2018-01-25]% + {style/bib-style} + \begin{fdusyntax}[gobble=0,emph={[1]bib-style}] + bib-style = (**) + \end{fdusyntax} + Set the style of bibliography. \opt{author-year} and + \opt{numerical} will follow the standard GB/T 7714--2015. + By setting \kvopt{bib-style}{\meta{other style}}, you can use + other bibliography style (\file{.bst} file for + \kvopt{bib-backend}{bibtex} and \file{.bbx} file for + \kvopt{bib-backend}{biblatex}). Suffix is not needed. +\end{function} + +\begin{function}[added=2018-01-25]{style/cite-style} + \begin{fdusyntax}[gobble=0,emph={[1]cite-style}] + cite-style = (*\marg{style}*) + \end{fdusyntax} + Select citation style. Default value is empty, which means + the citation style will follow your bibliography style + (author-year or numeric). If you want change the citation + style, the corresponding \file{.cbx} file must be available. + This option is invalid when \kvopt{bib-backend}{bibtex}. +\end{function} + +\begin{function}[added=2018-01-25]{style/bib-resource} + \begin{fdusyntax}[gobble=0,emph={[1]bib-resource}] + bib-resource = (*\marg{bib file\symbol{"28}s\symbol{"29}}*) + \end{fdusyntax} + Specify the bibliography database (usually in \file{.bib} + format). If using more than one files, the file names should + be separated with comma. When \kvopt{bib-backend}{biblatex}, + you must type in the ``\file{.bib}'' suffix. +\end{function} + +\begin{function}[added=2017-08-10]{style/logo} + \begin{fdusyntax}[gobble=0,emph={[1]logo}] + logo = (*\marg{file}*) + \end{fdusyntax} + File name of the logo in thesis cover. Default value is + \file{fudan-name.pdf}. +\end{function} + +\begin{function}[added=2017-08-10]{style/logo-size} + \begin{fdusyntax}[gobble=0,emph={[1]logo-size}] + logo-size = (*\marg{width}*) + logo-size = {(*\meta{width}*), (*\meta{height}*)} + \end{fdusyntax} + Size of the logo. By default, only width is set to + |0.5\textwidth|. To set height only, you can put an + empty group ``|{}|'' at \meta{width}. +\end{function} + +\begin{function}[added=2017-07-06]{style/auto-make-cover} + \begin{fdusyntax}[gobble=0,emph={[1]auto-make-cover}] + auto-make-cover = (*<\TTF>*) + \end{fdusyntax} + Whether generate thesis cover, list of instructors (inside + front cover) and declaration page (inside back cover) + automatically. Entries in the cover can be specified also + via \cs{fdusetup}, and you can find more details in + subsubsection~\ref{subsubsec:information}. +\end{function} + +\begin{function}{\makecoveri,\makecoverii,\makecoveriii} + For generating thesis cover, list of instructors and + declaration page manually. These commands cannot ensure + the correct page numbers, hence you should always use the + auto-generated thesis cover unless necessary. +\end{function} + +\subsubsection{Personal information} \label{subsubsec:information} + +\begin{function}{info} + \begin{fdusyntax}[gobble=0,emph={[1]info}] + info = (*\marg{key-value list}*) + info/(*\meta{key}*) = (*\meta{value}*) + \end{fdusyntax} + This general option is for entering your personal information. + See the following details. Note that options with ``|*|'' are + the corresponding English items. +\end{function} + +\begin{function}[added=2018-02-01,updated=2019-03-12]{info/degree} + \begin{fdusyntax}[gobble=0,emph={[1]degree}] + degree = (*<(academic)|professional>*) + \end{fdusyntax} + Degree type. This option can only be used in master degree + thesis. +\end{function} + +\begin{function}{info/title,info/title*} + \begin{fdusyntax}[gobble=0,emph={[1]title,title*}] + title = (*\marg{title in Chinese}*) + title* = (*\marg{title in English}*) + \end{fdusyntax} + Title of your thesis. The line width is about \SI{30}{em} by + default, but you may break it with |\\| manually. +\end{function} + +\begin{function}{info/author,info/author*} + \begin{fdusyntax}[gobble=0,emph={[1]author,author*}] + author = (*\marg{name in Chinese}*) + author* = (*\marg{name in English \lparen or Pinyin\rparen}*) + \end{fdusyntax} + Author's name. +\end{function} + +\begin{function}{info/supervisor} + \begin{fdusyntax}[gobble=0,emph={[1]supervisor}] + supervisor = (*\marg{name}*) + \end{fdusyntax} + Supervisor's name. +\end{function} + +\begin{function}{info/department} + \begin{fdusyntax}[gobble=0,emph={[1]department}] + department = (*\marg{name}*) + \end{fdusyntax} + Name of the department. +\end{function} + +\begin{function}{info/major} + \begin{fdusyntax}[gobble=0,emph={[1]major}] + major = (*\marg{name}*) + \end{fdusyntax} + Name of the major. +\end{function} + +\begin{function}{info/student-id} + \begin{fdusyntax}[gobble=0,emph={[1]student-id}] + student-id = (*\marg{number}*) + \end{fdusyntax} + Author's student ID. +\end{function} + +In Fudan University, student ID has 11 digits. The first two +are the year of attendance; next one represents the student's +type (1 for doctor, 2 for master and 3 for bachelor); the +following five digits are major ID while the last three are +serial number. + +\begin{function}{info/school-id} + \begin{fdusyntax}[gobble=0,emph={[1]school-id}] + school-id = (*\marg{number}*) + \end{fdusyntax} + School ID. Default value is 10246 (school ID of Fudan University). +\end{function} + +\begin{function}{info/date} + \begin{fdusyntax}[gobble=0,emph={[1]date}] + date = (*\marg{date}*) + \end{fdusyntax} + Finish date of your thesis. Default value is the compilation + date (\tn{today}). +\end{function} + +\begin{function}[added=2017-07-04]{info/secret-level} + \begin{fdusyntax}[gobble=0,emph={[1]secret-level}] + secret-level = (*<(none)|i|ii|iii>*) + \end{fdusyntax} + Secret level. \opt{i}, \opt{ii} and \opt{iii} means + ``秘密'' (secret), ``机密'' (confidential) and ``绝密'' + (top secret) respectively. \opt{none} means your thesis is + not secret-related and secret level and year will not be + shown. +\end{function} + +\begin{function}[added=2017-07-04]{info/secret-year} + \begin{fdusyntax}[gobble=0,emph={[1]secret-year}] + secret-year = (*\marg{year}*) + \end{fdusyntax} + Secret year. It's recommended to use Chinese word as ``五年'' + (5 years) here. This option is invalid if you have set + \kvopt{secret-level}{none}. +\end{function} + +\begin{function}{info/instructors} + \begin{fdusyntax}[gobble=0,emph={[1]instructors}] + instructors = (*\marg{member 1, member 2, ...}*) + \end{fdusyntax} + Instructors' name. Each name should be separated with + comma. To disambiguate, you may put text containing comma + into a group ``|{...}|''. +\end{function} + +\begin{function}{info/keywords,info/keywords*} + \begin{fdusyntax}[gobble=0,emph={[1]keywords,keywords*}] + keywords = (*\marg{keywords in Chinese}*) + keywords* = (*\marg{keywords in English}*) + \end{fdusyntax} + Keywords list. Each keyword should be separated with comma. + To disambiguate, you may put text containing comma into a + group ``|{...}|''. +\end{function} + +\begin{function}{info/clc} + \begin{fdusyntax}[gobble=0,emph={[1]clc}] + clc = (*\marg{classification codes}*) + \end{fdusyntax} + Chinese Library Classification (CLC). +\end{function} + +\subsection{Writing your thesis} + +\subsubsection{Front matter} + +\begin{function}{\frontmatter} + Declare the beginning of front matter. +\end{function} + +Front matter contains table of contents, abstracts and notation +list. The page numbers in front matter will be shown in +lowercase Roman numerals, and will be counted separately with +main matter. + +\begin{function}{\tableofcontents} + Generate the table of contents (TOC). You need to compile + the source file at least \emph{twice} to get the correct TOC. + If your thesis contains many figures or tables, you may also + use \cs{listoffigures} or \cs{listoftables} to generate a list + of them. +\end{function} + +\begin{function}{abstract} + \begin{fdusyntax}[gobble=0,emph={[2]abstract}] + % fduthesis (Chinese thesis) % fduthesis-en (English thesis) + \begin{abstract} \begin{abstract} + (*\meta{Chinese abstract} \hspace{3cm} \meta{English abstract}*) + \end{abstract} \end{abstract} + \end{fdusyntax} +\end{function} +\begin{function}[rEXP]{abstract*} + \begin{fdusyntax}[gobble=0,emph={[2]abstract*}] + % Only for fduthesis + \begin{abstract*} + (*\meta{English abstract}*) + \end{abstract*} + \end{fdusyntax} + Abstract environment. In \cls{fduthesis}, \env{abstract} and + \env{abstract*} are used for Chinese and English abstract, + respectively; while in \cls{fduthesis-en}, there is no + \env{abstract*} environment and you need to write the English + abstract merely. +\end{function} + +At the end of abstract (both Chinese and English, if available), +keywords list and CLC number will be shown. They can be +specified via command \cs{fdusetup} and you may refer to +subsubsection~\ref{subsubsec:information} for more details. + +\begin{function}{notation} + \begin{fdusyntax}[gobble=0,emph={[2]notation}] + \begin{notation}(*\oarg{column format}*) + (*\meta{symbol 1}*) & (*\meta{description}*) \\ + (*\meta{symbol 2}*) & (*\meta{description}*) \\ + (*\phantom{\meta{symbol $n$}}*) (*$\vdots$*) + (*\meta{symbol \kern-0.1em$n$}*) & (*\meta{description}*) + \end{notation} + \end{fdusyntax} + Notation list (or symbol list, nomenclature) environment. + The optional argument \meta{column format} is the same as + in a standard \LaTeX{} table. The default value is + ``|lp{7.5cm}|'', which means auto-width for the first column + and fix-width (\SI{7.5}{cm}) for the second; both columns will + be left-aligned. +\end{function} + +\subsubsection{Main matter} + +\begin{function}{\mainmatter} + Declare the beginning of main matter. +\end{function} + +As the name suggests, ``main matter'' is the main body of your +thesis. When working on a big projects, it's usually a good +idea to split the source file into several parts. The page +numbers in main matter are shown in arabic numerals. + +\begin{function}[updated=2018-01-15]{\footnote} + \begin{fdusyntax}[gobble=0,deletetexcs={\footnote},% + morekeywords={\footnote}] + \footnote(*\marg{text}*) + \end{fdusyntax} + Insert a footnote. The style of footnote numbers can be set + with option \opt{style/foot\-note\-style}. See subsubsection~% + \ref{subsubsec:style-and-format} for more details. +\end{function} + +\begin{function}{axiom,corollary,definition,example,lemma, + proof,theorem} + \begin{fdusyntax}[gobble=0,emph={[2]proof}] + \begin{proof}(*\oarg{subheading}*) + (*\meta{procedure of proof}*) + \end{proof} + \end{fdusyntax} + A series of pre-defined math environments. +\end{function} + +A QED\footnote{Abbreviation of Latin phrase \emph{quod erat + demonstrandum}, means ``what was to be demonstrated''.} +symbol ``$\QED$'' will be added at the end of \env{proof} +environment. You need to compile the source file \emph{twice} +as in subsection~\ref{subsec:compilation} in order to make +the position of QED symbol correct. + +\begin{function}[updated=2017-12-12]{\newtheorem} + \begin{fdusyntax}[gobble=0,deletetexcs={\newtheorem}, + morekeywords={\newtheorem,\newtheorem*}] + \newtheorem(*\oarg{options}\marg{environment}\marg{title}*) + \newtheorem*(*\oarg{options}\marg{environment}\marg{title}*) + \begin(*\marg{environment}\oarg{subheading}*) + (*\meta{contents}*) + \end(*\marg{environment}*) + \end{fdusyntax} + Declare new math environments (theorems). If you use + \cs{newtheorem*}, then the theorem will not be numbered, and + a QED symbol ``$\QED$'' will be added at the end of the + environment. All the theorem environments defined by yourself + can be used as the pre-defined ones. +\end{function} + +Actually, the pre-defined math environments are just defined +with \cs{new\-the\-o\-rem} and \cs{new\-the\-o\-rem*}: +\begin{latexexample}[gobble=1,deletetexcs={\newtheorem}, + morekeywords={\newtheorem,\newtheorem*}] + \newtheorem*{proof}{proof} + \newtheorem{axiom}{axiom} + \newtheorem{corollary}{corollary} + ... +\end{latexexample} + +Similar with \cs{fdusetup}, the optional argument \meta{options} +of \cs{newtheorem} is a key-value list as well. The available +are described below. Note that you don't need to type in the +``|theorem/|'' prefix. + +\begin{function}{theorem/style} + \begin{fdusyntax}[gobble=0,emph={[1]style}] + style = (*<(plain)|margin|change|\\ + XXXX\mbox{}~~~~~~~~break|marginbreak|changebreak>*) + \end{fdusyntax} + The overall style of the theorem environment. +\end{function} + +\begin{function}{theorem/header-font} + \begin{fdusyntax}[gobble=0,emph={[1]header-font}] + header-font = (*\marg{font}*) + \end{fdusyntax} + Font of the theorem header. Default value is \tn{sffamily} + and |\bfseries\upshape| for Chinese and English template, + respectively. +\end{function} + +\begin{function}{theorem/body-font} + \begin{fdusyntax}[gobble=0,emph={[1]body-font}] + body-font = (*\marg{font}*) + \end{fdusyntax} + Font of the theorem body. Default value is \tn{fdu@kai} + (\textit{楷体}) and \tn{itshape} for Chinese and English + template, respectively. +\end{function} + +\begin{function}{theorem/qed} + \begin{fdusyntax}[gobble=0,emph={[1]qed}] + qed = (*\marg{symbol}*) + \end{fdusyntax} + Theorem end mark. For \cs{newtheorem}, default value is + empty; for \cs{newtheorem*}, default value is + |\ensuremath{\QED}| (i.e.\ ``$\QED$''). +\end{function} + +\begin{function}{theorem/counter} + \begin{fdusyntax}[gobble=0,emph={[1]counter}] + counter = (*\marg{counter}*) + \end{fdusyntax} + The theorem will be enumerated within \meta{counter}. For + example, the default value is |chapter|, which means with + each new \tn{chapter}, the enumeration begins again with 1. + This option is invalid for \cs{newtheorem*}. +\end{function} + +\begin{function}{\caption} + \begin{fdusyntax}[gobble=0,deletetexcs={\caption},morekeywords={\caption}] + \caption(*\marg{caption}*) + \caption(*\oarg{short caption}\marg{long caption}*) + \end{fdusyntax} + Insert the caption of figure or table. The optional argument + \meta{short caption} will be shown in the list of figures/tables. + In \meta{long caption}, you can write descriptions for several + paragraphs, but \meta{short caption} and the single + \meta{caption} will not allow multi-paragraph text (i.e.\ + text containing \tn{par}) inside. +\end{function} + +By convention, caption of a table is usually put \emph{before} +the table itself, while for figure it's the opposite. +In addition, command \tn{caption} must be put inside float +environments (e.g.\ \env{table} and \env{figure}). + +\subsubsection{Back matter} + +\begin{function}{\backmatter} + Declare the beginning of back matter. +\end{function} + +Back matter contains bibliography, declaration page, etc. + +\begin{function}[updated=2018-01-25]{\printbibliography} + \begin{fdusyntax}[gobble=0,morekeywords={\printbibliography}] + \printbibliography(*\oarg{options}*) + \end{fdusyntax} + Print the bibliography. When \kvopt{bib-backend}{bibtex}, then + \meta{options} is invalid and this command is equivalent to + \tn{bibliography} \texttt{\marg{bib files}}, where + \meta{bib files} should be specified with option + \opt{style/bib-resource} (see subsubsection~% + \ref{subsubsec:style-and-format}). When \kvopt{bib-backend}% + {bibtex}, then \tn{printbibliography} is provided by + \pkg{biblatex} and the available options can be found in its + documentation. +\end{function} + +\section{Packages dependencies} + +Different compilation methods and options will result in a +different packages dependency. Details are as follows: +\begin{itemize} + \item In any case, \cls{fduthesis} will load the following + packages \emph{explicitly}: + \begin{itemize} + \item \pkg{expl3}, \pkg{xparse}, \pkg{xtemplate} and + \pkg{l3keys2e}, belong to \pkg{l3kernel} and + \pkg{l3packages} bundles + \item \cls{ctexbook}, belongs to \CTeX{} bundle + \item \pkg{amsmath}, belongs to \AmSLaTeX{} bundle + \item \pkg{unicode-math} + \item \pkg{geometry} + \item \pkg{fancyhdr} + \item \pkg{footmisc} + \item \pkg{ntheorem} + \item \pkg{graphicx} + \item \pkg{longtable} + \item \pkg{caption} + \item \pkg{xcolor} + \item \pkg{hyperref} + \end{itemize} + \item When chosen \kvopt{style/footnote-style}{pifont}, + package \pkg{pifont} will be loaded. It belongs to + \pkg{psnfss} bundle. + \item When chosen \kvopt{style/bib-backend}{bibtex}, + package \pkg{natbib} will be loaded. Meanwhile, program + \BibTeX{} will be required for compilation. The + bibliography style is provided by \pkg{gbt7714}. + \item When chosen \kvopt{style/bib-backend}{biblatex}, + package \pkg{biblatex} will be loaded. Program \biber{} + will be required then. The bibliography style is provided + by \pkg{biblatex-gb7714-2015}. +\end{itemize} + +Only the packages loaded directly by \cls{fduthesis} are listed +here. If you need to know the dependencies of the packages +themselves, please refer to the corresponding manuals. + +\end{document} diff --git a/docs/fduthesis-doc.tex b/docs/fduthesis-doc.tex new file mode 100644 index 0000000..3e0da11 --- /dev/null +++ b/docs/fduthesis-doc.tex @@ -0,0 +1,1265 @@ +\documentclass{fdudoc} +\usepackage{multirow,xpinyin} +\hypersetup{ + pdftitle = {fduthesis: 复旦大学论文模板}, + pdfauthor = {曾祥东}} +% 全角标点放在引号中,需要改成半角式,否则间距过大,不好看 +\def\FSID{“{\xeCJKsetup{PunctStyle=banjiao}。}”} % U+3002 +\def\FSFW{“{\xeCJKsetup{PunctStyle=banjiao}.}”} % U+FF0E +\def\COFW{“{\xeCJKsetup{PunctStyle=banjiao}:}”} % U+FF1A +\def\SCFW{“{\xeCJKsetup{PunctStyle=banjiao};}”} % U+FF1B + +\title{\textcolor{MaterialIndigo800}{% + \textbf{fduthesis: 复旦大学论文\xpinyin[font=\sffamily]{模}{mu2}板}}} +\author{曾祥东} +\date{2019/04/03\quad v0.7d% + \thanks{\url{https://github.com/stone-zeng/fduthesis}.}} + +\begin{document} + +% 禁止使用 " 符号作为抄录文本缩略符 +\DeleteShortVerb\" + +% 封面与目录的页边距 +\newgeometry{ + left = 1.25 in, + right = 1.25 in, + top = 1.25 in, + bottom = 1.00 in +} + +\maketitle +\vfill +\begin{center} + \includegraphics[width=8cm]{../logo/fduthesis-cover.pdf} +\end{center} +\vfill +\thispagestyle{plain} +\clearpage + +\tableofcontents + +% 用户手册的页边距 +\newgeometry{ + left = 1.65 in, + right = 0.80 in, + top = 1.25 in, + bottom = 1.00 in +} + +\section{介绍} + +目前,在网上可以找到的复旦大学 \LaTeX{} 论文模板主要有以下这些: +\begin{itemize} + \item 数学科学学院 2001 级的何力同学和李湛同学在 2005 年根据 + 学校要求所设计的 \cls{毕业论文格式 tex04 版},以及 2008 年 + 张越同学修改之后的 \cls{毕业论文格式 tex08 版},这是专为 + 数院本科生撰写毕业论文而设计的 + \scite{数院毕业论文格式,数院毕业论文格式更新}; + \item Pandoxie 编写的 \cls{FDU-Thesis-Latex} + \scite{pandoxie2014fduthesislatex},基本满足了博士(硕士) + 毕业论文格式要求,使用人数较多; + \item richarddzh 编写的硕士论文模板 \cls{fudan-thesis} + \scite{richard2016fudanthesis}。 +\end{itemize} +以上这些模板大都没有经过系统的设计,也鲜有后续维护。相比之下, +清华大学 \scite{thuthesis}、重庆大学 \scite{cquthesis}、 +中国科学技术大学 \scite{ustcthesis} 中国科学院大学 \scite{ucasthesis} +以及友校上海交通大学 \scite{sjtuthesis}等,都有成熟、 +稳定的解决方案,值得参考。 + +本模板将借鉴前辈经验,重新设计,并使用 \LaTeX3 +\scite{source3} 编写,以适应 \TeX{} 技术发展潮流; +同时还将构建一套简洁的接口,方便用户使用。 + +\subsection*{\LaTeX{} 入门} + +本文档并非是一份 \LaTeX{} 零基础教程。如果您是完完全全的新手, +建议先阅读相关入门文档,如刘海洋编著的《\LaTeX{} 入门》 +\scite{刘海洋2013latex入门} 第一章,或大名鼎鼎的“\pkg{lshort}” +\scite{lshort} 及其中文翻译版 \scite{lshort-zh-cn}。当然, +网络上的入门教程多如牛毛,您可以自行选取。 + +\subsection*{关于本文档} + +本文采用不同字体表示不同内容。无衬线字体表示宏包名称,如 +\pkg{xeCJK} 宏包、\cls{fduthesis} 文档类等;等宽字体表示代码或 +文件名,如 \cs{fdusetup} 命令、\env{abstract} 环境、\TeX{} 文档 +\file{thesis.tex} 等;带有尖括号的楷体(或西文斜体)表示命令参数, +如 \meta{模板选项}、\meta{English title} 等。在使用时,参数两侧 +的尖括号不必输入。示例代码进行了语法高亮处理,以方便阅读。 + +在用户手册中,带有蓝色侧边线的为 \LaTeX{} 代码,而带有粉色侧边线 +的则为命令行代码,请注意区分。模板提供的选项、命令、环境等, +均用横线框起,同时给出使用语法和相关说明。 + +本模板中的选项、命令或环境可以分为以下三类: +\begin{itemize} + \item 名字后面带有 \rexptarget\rexpstar{} 的,表示只能在^^A + \emph{中文模板}中使用; + \item 名字后面带有 \exptarget\expstar{} 的,表示只能在^^A + \emph{英文模板}中使用; + \item 名字后面不带有特殊符号的,表示既可以在中文模板中使用, + 也可以在英文模板中使用。 +\end{itemize} + +代码实现主要面向对 \LaTeX{} 宏包开发感兴趣的用户。如果您有任何改进 +意见或者功能需求,欢迎前往 GitHub 仓库 +\href{https://github.com/stone-zeng/fduthesis/issues}{提交 issue}。 + +文档的最后还提供了版本历史和代码索引,以供查阅。 + +\section{安装} + +\subsection{获取 \cls{fduthesis}} + +\subsubsection{标准安装} + +如果没有特殊理由,始终建议您使用宏包管理器安装 \cls{fduthesis}。 +例如在 \TeXLive{} 中,执行(可能需要管理员权限) +\begin{shellexample}[morekeywords={tlmgr,install}] + tlmgr install fduthesis +\end{shellexample} +即可完成安装。 + +在 \TeXLive{} 和 \MiKTeX{} 中,您还可以通过图形界面进行安装, +此处不再赘述。 + +\subsubsection{手动安装} + +如果您需要从 CTAN 上自行下载并手动安装,较好的方法是使用 TDS +安装包: +\begin{itemize} + \item 从 CTAN 上下载 \cls{fduthesis} 的 + \href{http://mirror.ctan.org/install/macros/latex/contrib/fduthesis.tds.zip}{TDS 安装包}; + \item 按目录结构将 \file{fduthesis.tds.zip} 中的文件复制到 \TeX{} + 发行版的本地 TDS 根目录; + \item 执行 \bashcmd{mktexlsr} 刷新文件名数据库以完成安装。 +\end{itemize} +% +您也可以从源代码直接生成模板(不推荐): +\begin{itemize} + \item 打开 \href{https://github.com/stone-zeng/fduthesis}^^A + {项目主页},点击“Clone or download”,并选择“Download ZIP”, + 下载 \file{fduthesis-master.zip};如果您的电脑中安装有 git + 程序,也可通过以下命令直接克隆代码仓库: + \begin{shellexample}[gobble=7,alsoletter={.},^^A + morekeywords={git,clone}] + git clone https://github.com/stone-zeng/fduthesis.git + \end{shellexample} + \item 解压并进入到 \file{source} 文件夹,执行以下命令以生成 + 模板的各组件: + \begin{shellexample}[gobble=7,morekeywords={xetex}] + xetex fduthesis.dtx + \end{shellexample} + \item 将生成的文档类(\file{.cls})、宏包(\file{.sty})以及 + 参数配置文件(\file{.def})复制到 \TeX{} 发行版本地 TDS 树 + 的 \path{texmf-local/tex/latex/fduthesis/} 目录下,并执行 + \bashcmd{mktexlsr} 刷新文件名数据库,方可完成安装。 + \item 使用 \cls{fduthesis} 撰写论文时,您还需要从代码仓库下的 + \file{testfiles/support} 目录中复制 \file{fudan-name.pdf} + 文件至工作目录,以确保封面中的校名图片可以正确显示。 +\end{itemize} + +\subsubsection{扁平化安装} + +如果您不希望安装本模板,但需要立刻使用,也可以使用模板提供的安装脚本。 +从 GitHub 上获取代码仓库后,执行 \file{install-win.bat}(Windows 系统) +或 \file{install-linux.sh}(Linux 系统),所有需要的文件便会在 +\file{thesis} 文件夹中生成。 + +\subsection{模板组成} + +本模板主要包含核心文档类、配置文件、附属宏包以及用户文档等几个 +部分,其具体组成见表~\ref{tab:fduthesis-components}。 + +\begin{table}[ht] + \caption{\cls{fduthesis} 的主要组成部分} + \label{tab:fduthesis-components} + \centering + \begin{tabular}{lp{20em}} + \toprule + \textbf{文件} & \textbf{功能说明} \\ + \midrule + \file{fduthesis.cls} & 中文模板文档类 \\ + \file{fduthesis-en.cls} & 英文模板文档类 \\ + \file{fduthesis.def} & 参数配置文件,用于设定 + \cls{fduthesis} 的初始参数,不建议您自行改动 \\ + \file{fdudoc.cls} & 用户手册文档类 \\ + \file{fdulogo.sty} & 复旦大学视觉识别系统 \\ + \file{fudan-emblem.pdf} & 校徽 \\ + \file{fudan-emblem-new.pdf} & 校徽(重修版) \\ + \file{fudan-name.pdf} & 校名图片 \\ + \file{README.md} & 简要自述 \\ + \ifdefined\FDUCODEDOC + \file{fduthesis.pdf} & 中文用户手册 \\ + \file{fduthesis-en.pdf} & 英文用户手册 \\ + \file{fduthesis-code.pdf} & 模板实现代码(本文档) \\ + \else + \file{fduthesis.pdf} & 中文用户手册(本文档) \\ + \file{fduthesis-en.pdf} & 英文用户手册 \\ + \file{fduthesis-code.pdf} & 模板实现代码 \\ + \fi + \file{fduthesis-template.tex} & 空白模板,可据此为基础完成论文 + 撰写 \\ + \bottomrule + \end{tabular} +\end{table} + +\section{使用说明} + +\subsection{基本用法} + +以下是一份简单的 \TeX{} 文档,它演示了 \cls{fduthesis} +的最基本用法: +\begin{latexexample}[deletetexcs={\documentclass}, + moretexcs={\chapter},morekeywords={\documentclass}, + emph={[2]document}] + thesis.tex + \documentclass{fduthesis} + \begin{document} + \chapter{欢迎} + \section{Welcome to fduthesis!} + 你好,\LaTeX{}! + \end{document} +\end{latexexample} + +按照 \ref{subsec:编译方式}~小节中的方式编译该文档,您应当得到 +一篇 5 页的文章。当然,这篇文章的绝大部分都是空白的。 + +英文模板可以用类似的方式使用: +\begin{latexexample}[deletetexcs={\documentclass}, + moretexcs={\chapter},morekeywords={\documentclass}, + emph={[2]document}] + thesis-en.tex + \documentclass{fduthesis-en} + \begin{document} + \chapter{Welcome} + \section{Welcome to fduthesis!} + Hello, \LaTeX{}! + \end{document} +\end{latexexample} +英文模板只对正文部分进行了改动,封面、指导小组成员以及声明页仍将 +显示为中文。 + +\subsection{编译方式} \label{subsec:编译方式} + +本模板不支持 \pdfTeX{} 引擎,请使用 \XeLaTeX{} 或 \LuaLaTeX{} +编译。推荐使用 \XeLaTeX{}。为了生成正确的目录、脚注以及交叉引用, +您至少需要连续编译两次。 + +以下代码中,假设您的 \TeX{} 源文件名为 \file{thesis.tex}。 +使用 \XeLaTeX{} 编译论文,请在命令行中执行 +\begin{shellexample}[morekeywords={xelatex}] + xelatex thesis + xelatex thesis +\end{shellexample} +或使用 \pkg{latexmk}: +\begin{shellexample}[morekeywords={latexmk},emph={-xelatex}] + latexmk -xelatex thesis +\end{shellexample} + +使用 \LuaLaTeX{} 编译论文,请在命令行中执行 +\begin{shellexample}[morekeywords={lualatex}] + lualatex thesis + lualatex thesis +\end{shellexample} +或者 +\begin{shellexample}[morekeywords={latexmk},emph={-lualatex}] + latexmk -lualatex thesis +\end{shellexample} + +\subsection{模板选项} + +所谓“模板选项”,指需要在引入文档类的时候指定的选项: +\begin{latexexample}[deletetexcs={\documentclass}, + morekeywords={\documentclass}] + \documentclass(*\oarg{模板选项}*){fduthesis} + \documentclass(*\oarg{模板选项}*){fduthesis-en} +\end{latexexample} + +有些模板选项为布尔型,它们只能在 \opt{true} 和 \opt{false} +中取值。对于这些选项,\kvopt{\meta{选项}}{true} 中的“|= true|” +可以省略。 + +\begin{function}[added=2018-02-01]{type} + \begin{fdusyntax}[emph={[1]type}] + type = (**) + \end{fdusyntax} + 选择论文类型。三种选项分别代表博士学位论文、硕士学位论文和本科 + 毕业论文。 +\end{function} + +\begin{function}{oneside,twoside} + 指明论文的单双面模式,默认为 \opt{twoside}。该选项会影响每章 + 的开始位置,还会影响页眉样式。 +\end{function} + +在双面模式(\opt{twoside})下,按照通常的排版惯例,每章应只从 +奇数页(在右)开始;而在单页模式(\opt{oneside})下,则可以从 +任意页面开始。本模板中,目录、摘要、符号表等均视作章,也按相同 +方式排版。 + +双面模式下,正文部分偶数页(在左)的左页眉显示章标题,奇数页 +(在右)的右页眉显示节标题;前置部分的页眉按同样格式显示,但文字 +均为对应标题(如“目录”、“摘要”等)。 +而在单面模式下,正文部分则页面不分奇偶,均同时显示左、右页眉, +文字分别为章标题和节标题;前置部分只有中间页眉,显示对应标题。 + +\begin{function}{draft} + \begin{fdusyntax}[emph={[1]draft}] + draft = (*<\TFF>*) + \end{fdusyntax} + 选择是否开启草稿模式,默认关闭。 +\end{function} + +草稿模式为全局选项,会影响到很多宏包的工作方式。 +开启之后,主要的变化有: +\begin{itemize} + \item 把行溢出的盒子显示为黑色方块; + \item 不实际插入图片,只输出一个占位方框; + \item 关闭超链接渲染,也不再生成 PDF 书签; + \item 显示页面边框。 +\end{itemize} + +\begin{function}[added=2018-01-31]{config} + \begin{fdusyntax}[emph={[1]config}] + config = (*\marg{文件}*) + \end{fdusyntax} + 用户配置文件的文件名。默认为空,即不载入用户配置文件。 +\end{function} + +\subsection{参数设置} + +\begin{function}{\fdusetup} + \begin{fdusyntax}[morekeywords={\fdusetup}] + \fdusetup(*\marg{键值列表}*) + \end{fdusyntax} + 本模板提供了一系列选项,可由您自行配置。载入文档类之后,以下 + 所有选项均可通过统一的命令 \cs{fdusetup} 来设置。 +\end{function} + +\cs{fdusetup} 的参数是一组由(英文)逗号隔开的选项列表,列表中的 +选项通常是 \kvopt{\meta{key}}{\meta{value}} 的形式。部分选项的 +\meta{value} 可以省略。对于同一项,后面的设置将会覆盖前面的设置。 +在下文的说明中,将用\textbf{粗体}表示默认值。 + +\cs{fdusetup} 采用 \LaTeX3 风格的键值设置,支持不同类型以及多种 +层次的选项设定。键值列表中,“|=|”左右的空格不影响设置;但需注意, +参数列表中不可以出现空行。 + +与模板选项相同,布尔型的参数可以省略 \kvopt{\meta{选项}}{true} +中的“|= true|”。 + +另有一些选项包含子选项,如 \opt{style} 和 \opt{info} 等。它们可以 +按如下两种等价方式来设定: +\begin{latexexample}[morekeywords={\fdusetup}, + emph={[1]style,cjk-font,font-size,info,title,title*,author,author*,department}] + \fdusetup{ + style = {cjk-font = adobe, font-size = -4}, + info = { + title = {论动体的电动力学}, + title* = {On the Electrodynamics of Moving Bodies}, + author = {阿尔伯特·爱因斯坦}, + author* = {Albert Einstein}, + department = {物理学系} + } + } +\end{latexexample} +或者 +\begin{latexexample}[morekeywords={\fdusetup}, + emph={[1]style,cjk-font,font-size,info,title,title*,author,author*,department}] + \fdusetup{ + style/cjk-font = adobe, + style/font-size = -4, + info/title = {论动体的电动力学}, + info/title* = {On the Electrodynamics of Moving Bodies}, + info/author = {阿尔伯特·爱因斯坦}, + info/author* = {Albert Einstein}, + info/department = {物理学系} + } +\end{latexexample} + +注意 “|/|” 的前后均不可以出现空白字符。 + +\subsubsection{论文格式} \label{subsubsec:论文格式} + +\begin{function}{style} + \begin{fdusyntax}[emph={[1]style}] + style = (*\marg{键值列表}*) + style/(*\meta{key}*) = (*\meta{value}*) + \end{fdusyntax} + 该选项包含许多子项目,用于设置论文格式。具体内容见下。 +\end{function} + +\begin{function}[updated=2019-03-05]{style/font} + \begin{fdusyntax}[emph={[1]font}] + font = (**) + \end{fdusyntax} + 设置西文字体(包括数学字体)。具体配置见表~\ref{tab:font}。 +\end{function} + +\begin{table}[ht] +\begin{threeparttable} + \caption{西文字体配置} + \label{tab:font} + \centering + \begin{tabular}{ccccc} + \toprule + & \strong{正文字体} & \strong{无衬线字体} & \strong{等宽字体} & \strong{数学字体} \\ + \midrule + |garamond| & EB Garamond & Libertinus Sans & LM Mono\tnote{a} & Garamond Math \\ + |libertinus| & Libertinus Serif & Libertinus Sans & LM Mono & Libertinus Math \\ + |lm| & LM Roman & LM Sans & LM Mono & LM Math \\ + |palatino| & TG Pagella\tnote{b} & Libertinus Sans & LM Mono & TG Pagella Math \\ + |times| & XITS & TG Heros & TG Cursor & XITS Math \\ + |times*|\tnote{c} & Times New Roman & Arial & Courier New & XITS Math \\ + \bottomrule + \end{tabular} + \begin{tablenotes} + \item[a] “LM”是 Latin Modern 的缩写。 + \item[b] “TG”是 TeX Gyre 的缩写。 + \item[c] 本行中,Times New Roman、Arial 和 Courier New 是商业字体, + 在 Windows 和 macOS 系统上均默认安装。 + \end{tablenotes} +\end{threeparttable} +\end{table} + +\begin{function}[rEXP,updated=2019-03-05]{style/cjk-font} + \begin{fdusyntax}[emph={[1]cjk-font}] + cjk-font = (**) + \end{fdusyntax} + 设置中文字体。具体配置见表~\ref{tab:cjk-font}。 +\end{function} + +\begin{table}[ht] + \caption{中文字体配置} + \label{tab:cjk-font} + \centering + \begin{tabular}{cccc} + \toprule + & \strong{正文字体(宋体)} & \strong{无衬线字体(黑体)} & \strong{等宽字体(仿宋)} \\ + \midrule + \multirow{2}*{|adobe|} & Adobe 宋体 & Adobe 黑体 & Adobe 仿宋 \\ + & Adobe Song Std & Adobe Heiti Std & Adobe Fangsong Std \\ + \multirow{2}*{|fandol|} & Fandol 宋体 & Fandol 黑体 & Fandol 仿宋 \\ + & FandolSong & FandolHei & FandolFang \\ + \multirow{2}*{|founder|} & 方正书宋 & 方正黑体 & 方正仿宋 \\ + & FZShuSong-Z01 & FZHei-B01 & FZFangSong-Z02 \\ + \multirow{2}*{|mac|} & (华文)宋体-简 & (华文)黑体-简 & 华文仿宋 \\ + & Songti SC & Heiti SC & STFangsong \\ + \multirow{2}*{|sinotype|} & 华文宋体 & 华文黑体 & 华文仿宋 \\ + & STSong & STHeiti & STFangsong \\ + \multirow{2}*{|sourcehan|} & 思源宋体 & 思源黑体 & --- \\ + & Source Han Serif SC & Source Han Sans SC & --- \\ + \multirow{2}*{|windows|} & (中易)宋体 & (中易)黑体 & (中易)仿宋 \\ + & SimSun & SimHei & FangSong \\ + \bottomrule + \end{tabular} +\end{table} + +启用 \kvopt{font}{none} 或 \kvopt{cjk-font}{none} 之后,模板将关闭 +默认西文 / 中文字体设置。此时,您需要自行使用 \cs{setmainfont}、 +\cs{setCJKmainfont}、\cs{setmathfont} 等命令来配置字体。 + +\begin{function}{style/font-size} + \begin{fdusyntax}[emph={[1]font-size}] + font-size = (*<(-4)|5>*) + \end{fdusyntax} + 设置论文的基础字号。 +\end{function} + +\begin{function}[rEXP,updated=2017-10-14]{style/fullwidth-stop} + \begin{fdusyntax}[emph={[1]fullwidth-stop}] + fullwidth-stop = (**) + \end{fdusyntax} + 选择是否把全角实心句点\FSFW 作为默认的句号形状。 + 这种句号一般用于科技类文章,以避免与下标“$_o$”或“$_0$”混淆。 +\end{function} + +选择 \kvopt{fullwidth-stop}{catcode} 或 \opt{mapping} 后,都会实现 +上述效果。有所不同的是,在选择 \opt{catcode} 后,只有^^A +\emph{显式的}\FSID 会被替换为\FSFW;但在选择 \opt{mapping} 后, +\emph{所有的}\FSID 都会被替换。例如,如果您用宏保存了一些含有^^A +\FSID 的文字,那么在选择 \opt{catcode} 时,其中的\FSID 不会被 +替换为\FSFW。 + +选项 \kvopt{fullwidth-stop}{mapping} 只在 \XeTeX{} 下有效。使用 +\LuaTeX{} 编译时,该选项相当于 \kvopt{fullwidth-stop}{catcode}。 + +如果您在选择 \kvopt{fullwidth-stop}{mapping} 后仍需要临时显示^^A +\FSID,可以按如下方法操作: +\begin{latexexample}[moretexcs={\CJKfontspec},emph={[1]Mapping}] + 请使用 XeTeX 编译 + 外侧的花括号表示分组 + 这是一个句号{\CJKfontspec{(*\meta{字体名}*)}[Mapping=full-stop]。} +\end{latexexample} + +\begin{function}{style/footnote-style} +% 这里奇怪的东西是用来控制对齐的。fdusyntax 会吃掉开头的几个 +% 空格,因此这里用 X 来占位。 + \begin{fdusyntax}[emph={[1]footnote-style}] + footnote-style = (**) + \end{fdusyntax} + 设置脚注编号样式。西文字体设置会影响其默认取值(见 + 表~\ref{tab:footnote-font})。因此,要使得该选项生效,需将其 + 放置在 \opt{font} 选项之后。带有 |sans| 的为相应的无衬线字体 + 版本;带有 |*| 的为阴文样式(即黑底白字)。 +\end{function} + +\begin{table}[ht] + \caption{西文字体与脚注编号样式默认值的对应关系} + \label{tab:footnote-font} + \centering + \begin{tabular}{ccccc} + \toprule + \textbf{西文字体设置} & + |libertinus| & |lm| & |palatino| & |times| \\ + \midrule + \textbf{脚注编号样式默认值} & + |libertinus| & |pifont| & |pifont| & |xits| \\ + \bottomrule + \end{tabular} +\end{table} + +\begin{function}[added=2017-08-13]{style/hyperlink} + \begin{fdusyntax}[emph={[1]hyperlink}] + hyperlink = (**) + \end{fdusyntax} + 设置超链接样式。\opt{border} 表示在超链接四周绘制方框; + \opt{color} 表示用彩色显示超链接;\opt{none} 表示没有特殊装饰, + 可用于生成最终的打印版文稿。 +\end{function} + +\begin{function}[added=2017-08-13,updated=2017-12-08]{style/hyperlink-color} + \begin{fdusyntax}[emph={[1]hyperlink-color}] + hyperlink-color = (*<(default)|classic|elegant|fantasy|material|\\ + XXXXXX\mbox{}~~~~~~~~~~~~~~~~~~business|science|summer|autumn|graylevel|prl>*) + \end{fdusyntax} + 设置超链接颜色。该选项在 \kvopt{hyperlink}{none} 时无效。 + 各选项所代表的颜色见表~\ref{tab:hyperlink-color}。 +\end{function} + +\begin{table}[ht] +\centering +\newcommand\linkcolorexam[3]{^^A + {\small 图~\textcolor[HTML]{#1}{1-2}, + (\textcolor[HTML]{#1}{3.4})~式} & + {\small \textcolor[HTML]{#2}{\texttt{http://g.cn}}} & + {\small 文献~[\textcolor[HTML]{#3}{1}], + (\textcolor[HTML]{#3}{Knuth~1986})}} +\begin{threeparttable} +\caption{预定义的超链接颜色方案} +\label{tab:hyperlink-color} +\begin{tabular}{c*{3}{>{\hspace{0.2cm}}c<{\hspace{0.2cm}}}} + \toprule + \textsf{选项} & \textsf{链接} & \textsf{URL} & \textsf{引用} \\ + \midrule + \opt{default} & \linkcolorexam{990000}{0000B2}{007F00} \\ + \opt{classic} & \linkcolorexam{FF0000}{0000FF}{00FF00} \\ + \opt{elegant}\tnote{a} & \linkcolorexam{961212}{C31818}{9B764F} \\ + \opt{fantasy}\tnote{b} & \linkcolorexam{FF4A19}{FF3F94}{934BA1} \\ + \opt{material}\tnote{c} & \linkcolorexam{E91E63}{009688}{4CAF50} \\ + \opt{business}\tnote{d} & \linkcolorexam{D14542}{295497}{1F6E43} \\ + \opt{science}\tnote{e} & \linkcolorexam{CA0619}{389F9D}{FF8920} \\ + \opt{summer}\tnote{f} & \linkcolorexam{00AFAF}{5F5FAF}{5F8700} \\ + \opt{autumn}\tnote{f} & \linkcolorexam{D70000}{D75F00}{AF8700} \\ + \opt{graylevel}\tnote{c} & \linkcolorexam{616161}{616161}{616161} \\ + \opt{prl}\tnote{g} & \linkcolorexam{2D3092}{2D3092}{2D3092} \\ + \bottomrule +\end{tabular} +\begin{tablenotes} + \item[a] 来自 \href{https://tex.stackexchange.com/}^^A + {\TeX{} - \LaTeX{} Stack Exchange 网站}。 + \item[b] Adobe CC 产品配色。 + \item[c] 取自 Material 色彩方案 + (见 \url{https://material.io/guidelines/style/color.html})。 + \item[d] Microsoft Office 2016 产品配色。 + \item[e] 来自 \href{https://www.wolfram.com/}{Wolfram Research 网站}。 + \item[f] 均取自 Solarized 色彩方案 + (见 \url{http://ethanschoonover.com/solarized})。 + \item[g] \textit{Physical Review Letter} 杂志配色。 +\end{tablenotes} +\end{threeparttable} +\end{table} + +\begin{function}[added=2018-01-25]{style/bib-backend} + \begin{fdusyntax}[emph={[1]bib-backend}] + bib-backend = (**) + \end{fdusyntax} + 选择参考文献的支持方式。选择 \opt{bibtex} 后,将使用 \BibTeX{} + 处理文献,样式由 \pkg{natbib} 宏包负责;选择 \opt{biblatex} 后, + 将使用 \biber{} 处理文献,样式则由 \pkg{biblatex} 宏包负责。 +\end{function} + +\begin{function}[added=2017-10-28,updated=2018-01-25]^^A + {style/bib-style} + \begin{fdusyntax}[emph={[1]bib-style}] + bib-style = (**) + \end{fdusyntax} + 设置参考文献样式。\opt{author-year} 和 \opt{numerical} 分别对应 + 国家标准 GB/T 7714--2015 \scite{gb-t-7714-2015} 中的著者—出版年制 + 和顺序编码制。选择 \meta{其他样式} 时,如果 \kvopt{bib-backend}^^A + {bibtex},需保证相应的 \file{.bst} 格式文件能被调用;而如果 + \kvopt{bib-backend}{biblatex},则需保证相应的 \file{.bbx} 格式文件 + 能被调用。 +\end{function} + +\begin{function}[added=2018-01-25]{style/cite-style} + \begin{fdusyntax}[emph={[1]cite-style}] + cite-style = (*\marg{引用样式}*) + \end{fdusyntax} + 选择引用格式。默认为空,即与参考文献样式(著者—出版年制或顺序 + 编码制)保持一致。如果手动填写,需保证相应的 \file{.cbx} 格式文件 + 能被调用。该选项在 \kvopt{bib-backend}{bibtex} 时无效。 +\end{function} + +\begin{function}[added=2018-01-25]{style/bib-resource} + \begin{fdusyntax}[emph={[1]bib-resource}] + bib-resource = (*\marg{文件}*) + \end{fdusyntax} + 参考文献数据源。可以是单个文件,也可以是用英文逗号隔开的一组文件。 + 如果 \kvopt{bib-backend}{biblatex},则必须明确给出 \file{.bib} + 后缀名。 +\end{function} + +\begin{function}[added=2017-08-10]{style/logo} + \begin{fdusyntax}[emph={[1]logo}] + logo = (*\marg{文件}*) + \end{fdusyntax} + 封面中校名图片的文件名。默认值为 \file{fudan-name.pdf}。 +\end{function} + +\begin{function}[added=2017-08-10]{style/logo-size} + \begin{fdusyntax}[emph={[1]logo-size}] + logo-size = (*\marg{宽度}*) + logo-size = {(*\meta{宽度}*), (*\meta{高度}*)} + \end{fdusyntax} + 校名图片的大小。默认仅指定了宽度,为 |0.5\textwidth|\/。 + 如果仅需指定高度,可在 \meta{宽度} 处填入一个空的分组 |{}|。 +\end{function} + +\begin{function}[added=2017-07-06]{style/auto-make-cover} + \begin{fdusyntax}[emph={[1]auto-make-cover}] + auto-make-cover = (*<\TTF>*) + \end{fdusyntax} + 是否自动生成论文封面(封一)、指导小组成员名单(封二)和 + 声明页(封三)。封面中的各项信息,可通过 \cs{fdusetup} 录入, + 具体请参阅 \ref{subsubsec:信息录入}~节。 +\end{function} + +\begin{function}{\makecoveri,\makecoverii,\makecoveriii} + 用于手动生成论文封面、指导小组成员名单和声明页。这几个命令不能 + 确保页码的正确编排,因此除非必要,您应当始终使用自动生成的封面。 +\end{function} + +\subsubsection{信息录入} \label{subsubsec:信息录入} + +\begin{function}{info} + \begin{fdusyntax}[emph={[1]info}] + info = (*\marg{键值列表}*) + info/(*\meta{key}*) = (*\meta{value}*) + \end{fdusyntax} + 该选项包含许多子项目,用于录入论文信息。具体内容见下。以下带“|*|” + 的项目表示对应的英文字段。 +\end{function} + +\begin{function}[added=2018-02-01,updated=2019-03-12]{info/degree} + \begin{fdusyntax}[emph={[1]degree}] + degree = (*<(academic)|professional>*) + \end{fdusyntax} + 学位类型,仅适用于博士和硕士学位论文。\opt{academic} 和 \opt{professional} + 分别表示学术学位和专业学位。 +\end{function} + +\begin{function}{info/title,info/title*} + \begin{fdusyntax}[emph={[1]title,title*}] + title = (*\marg{中文标题}*) + title* = (*\marg{英文标题}*) + \end{fdusyntax} + 论文标题。默认会在约 20 个汉字字宽处强制断行,但为了语义的 + 连贯以及排版的美观,如果您的标题长于一行,建议使用“|\\|” + 手动断行。 +\end{function} + +\begin{function}{info/author,info/author*} + \begin{fdusyntax}[emph={[1]author,author*}] + author = (*\marg{姓名}*) + author* = (*\marg{英文姓名(或拼音)}*) + \end{fdusyntax} + 作者姓名。 +\end{function} + +\begin{function}{info/supervisor} + \begin{fdusyntax}[emph={[1]supervisor}] + supervisor = (*\marg{姓名}*) + \end{fdusyntax} + 导师姓名。 +\end{function} + +\begin{function}{info/department} + \begin{fdusyntax}[emph={[1]department}] + department = (*\marg{名称}*) + \end{fdusyntax} + 院系名称。 +\end{function} + +\begin{function}{info/major} + \begin{fdusyntax}[emph={[1]major}] + major = (*\marg{名称}*) + \end{fdusyntax} + 专业名称。 +\end{function} + +\begin{function}{info/student-id} + \begin{fdusyntax}[emph={[1]student-id}] + student-id = (*\marg{数字}*) + \end{fdusyntax} + 作者学号。 +\end{function} + +复旦大学学号共 11 位,前两位为入学年份,之后一位为学生类型 +代码(博士生为 1,硕士生为 2,本科生为 3),接下来的五位为 +专业代码,最后三位为顺序号。 + +\begin{function}{info/school-id} + \begin{fdusyntax}[emph={[1]school-id}] + school-id = (*\marg{数字}*) + \end{fdusyntax} + 学校代码。默认值为 10246(这是复旦大学的学校代码)。 +\end{function} + +\begin{function}{info/date} + \begin{fdusyntax}[emph={[1]date}] + date = (*\marg{日期}*) + \end{fdusyntax} + 论文完成日期。默认值为文档编译日期(\tn{today})。 +\end{function} + +\begin{function}[added=2017-07-04]{info/secret-level} + \begin{fdusyntax}[emph={[1]secret-level}] + secret-level = (*<(none)|i|ii|iii>*) + \end{fdusyntax} + 密级。\opt{i}、\opt{ii}、\opt{iii} 分别表示秘密、机密、绝密; + \opt{none} 表示论文不涉密,即不显示密级与保密年限。 +\end{function} + +\begin{function}[added=2017-07-04]{info/secret-year} + \begin{fdusyntax}[emph={[1]secret-year}] + secret-year = (*\marg{年限}*) + \end{fdusyntax} + 保密年限。建议您使用中文,如“五年”。该选项在设置 + \kvopt{secret-level}{none} 时无效。 +\end{function} + +\begin{function}{info/instructors} + \begin{fdusyntax}[emph={[1]instructors}] + instructors = (*\marg{成员 1, 成员 2, ...}*) + \end{fdusyntax} + 指导小组成员。各成员之间需使用英文逗号隔开。为防止歧义, + 可以用分组括号“|{...}|”把各成员字段括起来。 +\end{function} + +\begin{function}{info/keywords,info/keywords*} + \begin{fdusyntax}[emph={[1]keywords,keywords*}] + keywords = (*\marg{中文关键字}*) + keywords* = (*\marg{英文关键字}*) + \end{fdusyntax} + 关键字列表。各关键字之间需使用英文逗号隔开。为防止歧义, + 可以用分组括号“|{...}|”把各字段括起来。 +\end{function} + +\begin{function}{info/clc} + \begin{fdusyntax}[emph={[1]clc}] + clc = (*\marg{分类号}*) + \end{fdusyntax} + 中图分类号(CLC)。 +\end{function} + +\subsection{正文编写} + +\begin{quotation} + 喬孟符(吉)博學多能,以樂府稱。嘗云:「作樂府亦有法,曰^^A + \CJKunderdot{鳳頭、豬肚、豹尾}六字是也。」大概起要美麗,中要浩蕩, + 結要響亮。尤貴在首尾貫穿,意思清新。苟能若是,斯可以言樂府矣。 +\end{quotation} +\hfill ——陶宗儀《南村輟耕錄·作今樂府法》 + +\subsubsection{凤头} + +\begin{function}{\frontmatter} + 声明前置部分开始。 +\end{function} + +在本模板中,前置部分包含目录、中英文摘要以及符号表等。 +前置部分的页码采用小写罗马字母,并且与正文分开计数。 + +\begin{function}{\tableofcontents,\listoffigures,\listoftables} + 生成目录。为了生成完整、正确的目录,您至少需要编译\emph{两次}。对于图表 + 较多的论文,也可以使用 \cs{listoffigures} 和 \cs{listoftables} 生成单独的 + 插图、表格目录。 +\end{function} + +% TODO: \DescribeEnv{abstract} +% TODO: \DescribeEnv{abstract*} +\begin{function}{abstract} + \begin{fdusyntax}[emph={[2]abstract}] + 中文论文模板 (fduthesis) 英文论文模板 (fduthesis-en) + \begin{abstract} \begin{abstract} + (*\meta{中文摘要} \hspace{3.52cm} \meta{英文摘要}*) + \end{abstract} \end{abstract} + \end{fdusyntax} +\end{function} +\begin{function}[rEXP]{abstract*} + \begin{fdusyntax}[emph={[2]abstract*}] + 中文论文模板 (fduthesis) + \begin{abstract*} + (*\meta{英文摘要}*) + \end{abstract*} + \end{fdusyntax} + 摘要。中文模板中,不带星号和带星号的版本分别用来输入中文摘要 + 和英文摘要;英文模板中没有带星号的版本,您只需输入英文摘要。 +\end{function} + +摘要的最后,会显示关键字列表以及中图分类号(CLC)。 +这两项可通过 \cs{fdusetup} 录入,具体 +请参阅 \ref{subsubsec:信息录入}~节。 + +% TODO: \DescribeEnv{notation} +\begin{function}{notation} + \begin{fdusyntax}[emph={[2]notation}] + \begin{notation}(*\oarg{列格式说明}*) + (*\meta{符号 1}*) & (*\meta{说明}*) \\ + (*\meta{符号 2}*) & (*\meta{说明}*) \\ + (*\phantom{\meta{符号 $n$}}*) (*$\vdots$*) + (*\meta{符号\ \kern-0.1em$n$}*) & (*\meta{说明}*) + \end{notation} + \end{fdusyntax} + 符号表。可选参数 \meta{列格式说明}与 \LaTeX{} 中标准表格的列格 + 式说明语法一致,默认值为“|lp{7.5cm}|”,即第一列宽度自动调整, + 第二列限宽 \SI{7.5}{cm},两列均为左对齐。 +\end{function} + +\subsubsection{猪肚} + +\begin{function}{\mainmatter} + 声明主体部分开始。 +\end{function} + +主体部分是论文的核心,您可以分章节撰写。如有需求,也可以采用 +多文件编译的方式。主体部分的页码采用阿拉伯数字。 + +\begin{function}[updated=2018-01-15]{\footnote} + \begin{fdusyntax}[deletetexcs={\footnote}, + morekeywords={\footnote}] + \footnote(*\marg{脚注文字}*) + \end{fdusyntax} + 插入脚注。脚注编号样式可利用 \opt{style/footnote-style} 选项控制, + 具体见 \ref{subsubsec:论文格式}~小节。 +\end{function} + +% TODO: \DescribeEnv{proof} +\begin{function}{axiom,corollary,definition,example,lemma, + proof,theorem} + \begin{fdusyntax}[emph={[2]proof}] + \begin{proof}(*\oarg{小标题}*) + (*\meta{证明过程}*) + \end{proof} + \end{fdusyntax} + 一系列预定义的数学环境。具体含义见表~\ref{tab:theorem}。 +\end{function} + +\begin{table}[ht] + \caption{预定义的数学环境} \label{tab:theorem} + \centering + \begin{tabular}{cccccccc} + \toprule + \textbf{名称} & + \env{axiom} & \env{corollary} & \env{definition} & + \env{example} & \env{lemma} & \env{proof} & + \env{theorem} \\ + \midrule + \textbf{含义} & + 公理 & 推论 & 定义 & 例 & 引理 & 证明 & 定理 \\ + \bottomrule + \end{tabular} +\end{table} + +证明环境(\env{proof})的最后会添加证毕符号“$\QED$”。要确保 +该符号在正确的位置显示,您需要按照 \ref{subsec:编译方式}~节 +中的有关说明编译\emph{两次}。 + +\begin{function}[updated=2017-12-12]{\newtheorem} + \begin{fdusyntax}[deletetexcs={\newtheorem}, + morekeywords={\newtheorem,\newtheorem*}] + \newtheorem(*\oarg{选项}\marg{环境名}\marg{标题}*) + \newtheorem*(*\oarg{选项}\marg{环境名}\marg{标题}*) + \begin(*\marg{环境名}\oarg{小标题}*) + (*\meta{内容}*) + \end(*\marg{环境名}*) + \end{fdusyntax} + 声明新的定理类环境(数学环境)。带星号的版本表示不进行编号, + 并且会默认添加证毕符号“$\QED$”。声明后,即可同预定义的数学环境 + 一样使用。 +\end{function} + +事实上,表~\ref{tab:theorem} 中预定义的环境正是通过以下方式定义的: +\begin{latexexample}[deletetexcs={\newtheorem}, + morekeywords={\newtheorem,\newtheorem*}] + \newtheorem*{proof}{证明} + \newtheorem{axiom}{公理} + \newtheorem{corollary}{定理} + ... +\end{latexexample} + +与 \cs{fdusetup} 相同,\cs{newtheorem} 的可选参数 \meta{选项} +也为一组键值列表。可用的选项见下。注意您无需输入“|theorem/|”。 + +\begin{function}{theorem/style} + \begin{fdusyntax}[emph={[1]style}] + style = (*<(plain)|margin|change|\\ + XXXXXX\mbox{}~~~~~~~~break|marginbreak|changebreak>*) + \end{fdusyntax} + 定理类环境的总体样式。 +\end{function} + +\begin{function}{theorem/header-font} + \begin{fdusyntax}[emph={[1]header-font}] + header-font = (*\marg{字体}*) + \end{fdusyntax} + 定理头(即标题)的字体。中文模板默认为 \tn{sffamily},即无衬线体 + (黑体);英文模板默认为 |\bfseries\upshape|,即加粗直立体。 +\end{function} + +\begin{function}{theorem/body-font} + \begin{fdusyntax}[emph={[1]body-font}] + body-font = (*\marg{字体}*) + \end{fdusyntax} + 定理内容的字体。中文模板默认为 \tn{fdu@kai},即楷体;英文模板 + 默认为 \tn{itshape},即斜体。 +\end{function} + +\begin{function}{theorem/qed} + \begin{fdusyntax}[emph={[1]qed}] + qed = (*\marg{符号}*) + \end{fdusyntax} + 定理结束标记(即证毕符号)。如果用 \cs{newtheorem} 声明定理, + 则默认为空;用 \cs{newtheorem*} 声明,则默认为 + |\ensuremath{\QED}|,即“$\QED$”。 +\end{function} + +\begin{function}{theorem/counter} + \begin{fdusyntax}[emph={[1]counter}] + counter = (*\marg{计数器}*) + \end{fdusyntax} + 定理计数器,表示定理编号在 \meta{计数器} 的下一级,并会随 + \meta{计数器} 的变化而清零。\scite{刘海洋2013latex入门} + 默认为 |chapter|,表示按章编号。使用 \cs{newtheorem*} 时, + 该选项无效。 +\end{function} + +\begin{function}{\caption} + \begin{fdusyntax}[deletetexcs={\caption},morekeywords={\caption}] + \caption(*\marg{图表标题}*) + \caption(*\oarg{短标题}\marg{长标题}*) + \end{fdusyntax} + 插入图表标题。可选参数 \meta{短标题} 用于图表目录。在 + \meta{长标题} 中,您可以进行长达多段的叙述;但 \meta{短标题} + 和单独的 \meta{图表标题} 中则不允许分段。 + \scite{刘海洋2013latex入门} +\end{function} + +按照排版惯例,建议您将表格的标题放置在绘制表格的命令之前, +而将图片的标题放置在绘图或插图的命令之后。另需注意, +\tn{caption} 命令必须放置在浮动体环境(如 \env{table} 和 +\env{figure})中。 + +\subsubsection{豹尾} + +\begin{function}{\backmatter} + 声明后置部分开始。 +\end{function} + +后置部分包含参考文献、声明页等。 + +\begin{function}[updated=2018-01-25]{\printbibliography} + \begin{fdusyntax}[morekeywords={\printbibliography}] + \printbibliography(*\oarg{选项}*) + \end{fdusyntax} + 打印参考文献列表。如果 \kvopt{bib-backend}{bibtex},则 \meta{选项} + 无效,相当于 \tn{bibliography} \texttt{\marg{文献数据库}},其中的 + \meta{文献数据库} 可利用 \opt{style/bib-resource} 选项指定,具体见 + \ref{subsubsec:论文格式}~小节;而如果 \kvopt{bib-backend}^^A + {biblatex},则该命令由 \pkg{biblatex} 宏包直接提供,可用选项请 + 参阅其文档 \cite{biblatex}。 +\end{function} + +\section{宏包依赖情况} + +使用不同编译方式、指定不同选项,会导致宏包依赖情况有所不同。 +具体如下: +\begin{itemize} + \item 在任何情况下,本模板都会\emph{显式}调用以下宏包 + (或文档类): + \begin{itemize} + \item \pkg{expl3}、\pkg{xparse}、\pkg{xtemplate} 和 + \pkg{l3keys2e},用于构建 \LaTeX3 编程环境 + \scite{source3}。它们分属 \pkg{l3kernel} 和 + \pkg{l3packages} 宏集。 + \item \cls{ctexbook},提供中文排版的通用框架。属于 \CTeX{} + 宏集 \scite{CTeX}。 + \item \pkg{amsmath},对 \LaTeX{} 的数学排版功能进行了 + 全面扩展。属于 \AmSLaTeX{} 套件。 + \item \pkg{unicode-math},负责处理 Unicode 编码的 + OpenType 数学字体。 + \item \pkg{geometry},用于调整页面尺寸。 + \item \pkg{fancyhdr},处理页眉页脚。 + \item \pkg{footmisc},处理脚注。 + \item \pkg{ntheorem},提供增强版的定理类环境。 + \item \pkg{graphicx},提供图形插入的接口。 + \item \pkg{longtable},长表格(允许跨页)支持。 + \item \pkg{caption},用于设置题注。 + \item \pkg{xcolor},提供彩色支持。 + \item \pkg{hyperref},提供交叉引用、超链接、电子书签等功能。 + \end{itemize} + \item 开启 \kvopt{style/footnote-style}{pifont} 后,会调用 + \pkg{pifont} 宏包。它属于 \pkg{psnfss} 套件。 + \item 开启 \kvopt{style/bib-backend}{bibtex} 后,会调用 + \pkg{natbib} 宏包,并依赖 \BibTeX{} 程序。参考文献样式由 + \pkg{gbt7714} 宏包提供 \scite{natbib,gbt7714}。 + \item 开启 \kvopt{style/bib-backend}{biblatex} 后,会调用 + \pkg{biblatex} 宏包,并依赖 \biber{} 程序。参考文献样式由 + \pkg{biblatex-gb7714-2015} 宏包提供 + \scite{biblatex,biblatex-gb7714-2015}。 +\end{itemize} + +这里只列出了本模板直接调用的宏包。这些宏包自身的调用情况, +此处不再具体展开。如有需要,请参阅相关文档。 + +\begin{thebibliography}{99} + +\newcommand\urlprefix{\newline\hspace*{\fill}} +\let\OldUrl=\url +\renewcommand\url[2][]{{\small\textit{#1}~\OldUrl{#2}}} +\newcommand\CTANurl[2][]{{\small\textit{#1}~\href{http://mirror.ctan.org/#2}^^A + {\ttfamily CTAN://#2}}} + +\subsection{图书} + +\bibitem{knuth1986texbook} +\textsc{Knuth D E}. +\newblock \textit{The \TeX book: Computers \& Typesetting, volume A} [M]. +\newblock Boston: Addison--Wesley Publishing Company, 1986 +\urlprefix \CTANurl[源代码^^A + \footnote{此代码只可作为学习之用。未经 Knuth 本人同意,您不应当编译此文档。}:]^^A + {systems/knuth/dist/tex/texbook.tex} + +\bibitem{mittelbach2004latexcompanion} +\textsc{Mittelbach F} and \textsc{Goossens M}. +\newblock \textit{The \LaTeX{} Companion} [M]. +\newblock 2nd ed. +\newblock Boston: Addison--Wesley Publishing Company, 2004 + +\bibitem{胡伟2017latex2e} +胡伟. +\newblock \textit{\LaTeXe{} 文类和宏包学习手册} [M]. +\newblock 北京: 清华大学出版社, 2017 + +\bibitem{刘海洋2013latex入门} +刘海洋. +\newblock \textit{\LaTeX{} 入门} [M]. +\newblock 北京: 电子工业出版社, 2013 + +\subsection{标准、规范} + +\bibitem{gb-t-7713.1-2006} +国务院学位委员会办公室, 全国信息与文献标准化技术委员会. +\newblock \textit{学位论文编写规则: GB/T 7713.1--2006} [S]. +\newblock 北京: 中国标准出版社, 2007 + +\bibitem{gb-t-7714-2015} +全国信息与文献标准化技术委员会. +\newblock \textit{信息与文献\quad 参考文献著录规则: GB/T 7714--2015} [S]. +\newblock 北京: 中国标准出版社, 2015 + +\bibitem{gb-t-15834-2011} +教育部语言文字信息管理司. +\newblock \textit{标点符号用法: GB/T 15834--2011} [S/OL]. +\newblock 北京: 中国标准出版社, 2012 +\urlprefix\url{http://www.moe.gov.cn/ewebeditor/uploadfile/2015/01/13/20150113091548267.pdf} + +\bibitem{clreq} +W3C. +\newblock \textit{中文排版需求(Requirements for Chinese Text Layout)} [EB/OL]. +\newblock (2019-03-13) +\urlprefix\url{https://w3c.github.io/clreq/} + +\bibitem{复旦大学论文规范} +复旦大学图书馆, 复旦大学研究生院. +\newblock \textit{复旦大学博士、硕士学位论文规范} [EB/OL]. +\newblock 2017 年 3 月修订版. +\newblock (2017-03-27) +\urlprefix\url{http://www.gs.fudan.edu.cn/_upload/article/4c/a8/a82545ef443b9c057c14ba13782c/c883c6f3-6d7f-410c-8f30-d8bde6fcb990.doc} + +\subsection{宏包、模版} + +\bibitem{source2e} +\textsc{Braams J}, \textsc{Carlisle D}, \textsc{Jeffrey A}, et al. +\newblock \textit{The \LaTeXe{} Sources} [CP/OL]. +\newblock (2018-12-01) +\urlprefix\url{https://ctan.org/pkg/latex} +\urlprefix\CTANurl[源代码:]{macros/latex/base/source2e.pdf} + +\bibitem{CTeX} +\textsc{CTEX.ORG}. +\newblock \textit{\CTeX{} 宏集手册} [EB/OL]. +\newblock version 2.4.14, +\newblock (2018-05-02) +\urlprefix\url{https://ctan.org/pkg/ctex} +\urlprefix\CTANurl[文档及源代码:]{language/chinese/ctex/ctex.pdf} + +\bibitem{xeCJK} +\textsc{CTEX.ORG}. +\newblock \textit{\pkg{xeCJK} 宏包} [EB/OL]. +\newblock version 3.7.1, +\newblock (2018-04-30) +\urlprefix\url{https://ctan.org/pkg/xecjk} +\urlprefix\CTANurl[文档及源代码:]{macros/xetex/latex/xecjk/xeCJK.pdf} + +\bibitem{natbib} +\textsc{Daly P W}. +\newblock \textit{Natural Sciences Citations and References} [EB/OL]. +\newblock version 8.31b, +\newblock (2010-09-13) +\urlprefix\url{https://ctan.org/pkg/natbib} +\urlprefix\CTANurl[文档及源代码:]{macros/latex/contrib/natbib/natbib.pdf} + +\bibitem{source3} +\textsc{The \LaTeX3 Project}. +\newblock \textit{The \LaTeX3 Sources} [CP/OL]. +\newblock (2019-03-05) +\urlprefix\url{https://ctan.org/pkg/l3kernel} +\urlprefix\CTANurl[源代码:]{macros/latex/contrib/l3kernel/source3.pdf} + +\bibitem{biblatex} +\textsc{Lehman P}, \textsc{Kime P}, \textsc{Boruvka A}, et al. +\newblock \textit{The \pkg{biblatex} Package} [EB/OL]. +\newblock version 3.12, +\newblock (2018-10-18) +\urlprefix\url{https://ctan.org/pkg/biblatex} +\urlprefix\CTANurl[文档:]{macros/latex/contrib/biblatex/doc/biblatex.pdf} + +\bibitem{lshort} +\textsc{Oetiker T}, \textsc{Partl H}, \textsc{Hyna I}, et al. +\newblock \textit{The Not So Short Introduction to \LaTeXe{}: Or \LaTeXe{} in 139 minutes} [EB/OL]. +\newblock version 6.2, +\newblock (2018-02-28) +\urlprefix\url{https://ctan.org/pkg/lshort-english} +\urlprefix\CTANurl[文档:]{info/lshort/english/lshort.pdf} + +\bibitem{lshort-zh-cn} +\textsc{Oetiker T}, \textsc{Partl H}, \textsc{Hyna I}, et al. +\newblock \textit{一份不太简短的 \LaTeXe{} 介绍: 或 106 分钟了解 \LaTeXe{}} [EB/OL]. +\newblock \CTeX{} 开发小组, 译. +\newblock 原版版本 version 6.2, 中文版本 version 6.0, +\newblock (2018-09-01) +\urlprefix\url{https://ctan.org/pkg/lshort-zh-cn} +\urlprefix\CTANurl[文档:]{info/lshort/chinese/lshort-zh-cn.pdf} + +\bibitem{biblatex-gb7714-2015} +胡振震. +\newblock \textit{符合 GB/T 7714-2015 标准的 biblatex 参考文献样式} [EB/OL]. +\newblock version 1.0q, +\newblock (2019-02-11) +\urlprefix\url{https://ctan.org/pkg/biblatex-gb7714-2015} +\urlprefix\CTANurl[文档:]{biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf} + +\bibitem{gbt7714} +李泽平(\textsc{Zeping L}). +\newblock \textit{GB/T 7714-2015 \BibTeX{} Style} [EB/OL]. +\newblock version 1.0.9, +\newblock (2018-08-05) +\urlprefix\url{https://ctan.org/pkg/gbt7714} +\urlprefix\CTANurl[文档:]{biblio/bibtex/contrib/gbt7714/gbt7714.pdf} + +\bibitem{cquthesis} +李振楠. +\newblock \textit{\textsc{CquThesis}:重庆大学毕业论文 \LaTeX{} 模板} [EB/OL]. +\newblock version 1.30, +\newblock (2018-02-23) +\urlprefix\url{https://ctan.org/pkg/cquthesis} +\urlprefix\CTANurl[文档及源代码:]{macros/latex/contrib/cquthesis/cquthesis.pdf} + +\bibitem{thuthesis} +薛瑞尼. +\newblock \textit{\textsc{ThuThesis}:清华大学学位论文模板} [EB/OL]. +\newblock version 5.4.5, +\newblock (2018-05-17) +\urlprefix\url{https://ctan.org/pkg/thuthesis} +\urlprefix\CTANurl[文档及源代码:]{macros/latex/contrib/thuthesis/thuthesis.pdf} + +\emph{以下模版未收录至 CTAN,但仍然保持活跃更新。} + +\bibitem{sjtuthesis} +\textsc{SJTUG}. +\newblock \textit{上海交通大学 \XeLaTeX{} 学位论文及课程论文模板} [EB/OL]. +\newblock version 0.10.2, +\newblock (2018-11-05) +\urlprefix\url{https://github.com/sjtug/SJTUThesis} + +\bibitem{ustcthesis} +\textsc{USTC \TeX{} User Group}. +\newblock \textit{中国科学技术大学学位论文 \LaTeX{} 模板} [EB/OL]. +\newblock version 3.1.03, +\newblock (2019-01-01) +\urlprefix\url{https://github.com/ustctug/ustcthesis} + +\bibitem{ucasthesis} +\textsc{mohuangrui}. +\newblock \textit{\pkg{ucasthesis} 国科大学位论文 \LaTeX{} 模板} [EB/OL]. +\newblock (2019-03-14) +\urlprefix\url{https://github.com/mohuangrui/ucasthesis} + +\emph{以下模版现已停止更新。} + +\bibitem{pandoxie2014fduthesislatex} +\textsc{Pandoxie}. +\newblock \textit{Fudan University-Latex Template} [EB/OL]. +\newblock (2014-06-07) +\urlprefix\url{https://github.com/Pandoxie/FDU-Thesis-Latex} + +\bibitem{richard2016fudanthesis} +\textsc{richard}. +\newblock \textit{复旦大学硕士学位论文模板} [EB/OL]. +\newblock (2016-01-31) +\urlprefix\url{https://github.com/richarddzh/fudan-thesis} + +\bibitem{数院毕业论文格式} +复旦大学数学科学学院. +\newblock \textit{毕业论文格式 tex 版和 word 版} [EB/OL]. +\urlprefix\url{http://math.fudan.edu.cn/show.aspx?info_lb=664&flag=101&info_id=1816} + +\bibitem{数院毕业论文格式更新} +复旦大学数学科学学院. +\newblock \textit{毕业论文格式: Word、\TeX{} 模板更新} [EB/OL]. +\urlprefix\url{http://math.fudan.edu.cn/Show.aspx?info_lb=664&info_id=1855&flag=101} + +\subsection{其他} + +\bibitem{wright2009dtxfile} +\textsc{Wright J}. +\newblock \textit{A model dtx file} [EB/OL]. +\newblock (2009-10-06) +\urlprefix\url{https://www.texdev.net/2009/10/06/a-model-dtx-file/} + +\bibitem{孔雀计划} +刘庆(\textsc{Eric Q L}). +\newblock \textit{孔雀计划:中文字体排印的思路} [EB/OL]. +\urlprefix\url{https://thetype.com/kongque/} + +\end{thebibliography} + +\end{document} diff --git a/source/fduthesis-bib.dtx b/source/fduthesis-bib.dtx new file mode 100644 index 0000000..cf926af --- /dev/null +++ b/source/fduthesis-bib.dtx @@ -0,0 +1,267 @@ +% \iffalse meta-comment +% +% Copyright (C) 2017--2019 by Xiangdong Zeng +% +% This work may be distributed and/or modified under the conditions of the +% LaTeX Project Public License, either version 1.3c of this license or (at +% your option) any later version. The latest version of this license is in: +% +% http://www.latex-project.org/lppl.txt +% +% and version 1.3 or later is part of all distributions of LaTeX version +% 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Xiangdong Zeng. +% +% \fi +% +% \begin{implementation} +% +% \section{参考文献著录与引用} +% +% \changes{v0.6}{2017/10/27}{支持 \BibTeX{},以实现参考文献的著录 +% 与引用。} +% \changes{v0.7}{2018/01/25}{支持 \biber{} 与 \pkg{biblatex}。} +% +% \begin{variable}{\l_@@_bibtex_bool} +% 是否使用 \BibTeX{} 作为参考文献处理程序。若为否,则使用 +% \pkg{biblatex}/\biber{}。 +% \begin{macrocode} +\bool_new:N \l_@@_bibtex_bool +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\l_@@_bib_style_tl,\l_@@_bib_gb_style_tl, +% \l_@@_cite_style_tl} +% 保存参考文献及引用样式。 +% \begin{macrocode} +\tl_new:N \l_@@_bib_style_tl +\tl_new:N \l_@@_bib_gb_style_tl +\tl_new:N \l_@@_cite_style_tl +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\l_@@_bib_resource_tl} +% 保存参考文献数据库列表。 +% \begin{macrocode} +\tl_new:N \l_@@_bib_resource_tl +% \end{macrocode} +% \end{variable} +% +% \changes{v0.6}{2017/10/28}{新增 \opt{style/bib-style} 选项。} +% \changes{v0.7}{2018/01/25}{新增 \opt{style/bib-backend}、\opt{style/cite-style} +% 和 \opt{style/bib-resource} 选项。} +% +% \begin{macrocode} +\keys_define:nn { fdu / style } + { +% \end{macrocode} +% \begin{macro}{style/bib-backend} +% 参考文献后端。 +% \begin{macrocode} + bib-backend .choice:, + bib-backend .value_required:n = true, + bib-backend / bibtex .code:n = + { \bool_set_true:N \l_@@_bibtex_bool }, + bib-backend / biblatex .code:n = + { \bool_set_false:N \l_@@_bibtex_bool }, +% \end{macrocode} +% \end{macro} +% \begin{macro}{style/bib-style} +% 参考文献样式。 +% \begin{macrocode} + bib-style .choice:, + bib-style .value_required:n = true, + bib-style / numerical .code:n = + { + \tl_set:Nn \l_@@_bib_gb_style_tl { numerical } + \tl_clear:N \l_@@_bib_style_tl + }, + bib-style / author-year .code:n = + { + \tl_set:Nn \l_@@_bib_gb_style_tl { author-year } + \tl_clear:N \l_@@_bib_style_tl + }, + bib-style / unknown .code:n = + { \tl_set_eq:NN \l_@@_bib_style_tl \l_keys_value_tl }, +% \end{macrocode} +% \end{macro} +% \begin{macro}{style/cite-style} +% 引用样式。 +% \begin{macrocode} + cite-style .code:n = + { + \bool_if:NTF \l_@@_bibtex_bool + { \@@_warning:n { cite-style-not-available } } + { \tl_set:Nn \l_@@_cite_style_tl {#1} } + }, +% \end{macrocode} +% \end{macro} +% \begin{macro}{style/bib-resource} +% 参考文献数据源。 +% \begin{macrocode} + bib-resource .tl_set:N = \l_@@_bib_resource_tl + } +\@@_msg_new:nn { cite-style-not-available } + { Option~ "cite-style"~ is~ not~ available~ in~ BibTeX. } +% \end{macrocode} +% \end{macro} +% +% 为了保证导言区中的设置能起作用,\pkg{natbib} 或 \pkg{biblatex} 宏包均需要在 +% 导言区末尾载入(仍在 \pkg{hyperref} 之前),并做相关设置。 +% \begin{macrocode} +\ctex_at_end_preamble:n + { + \bool_if:NTF \l_@@_bibtex_bool + { + \RequirePackage [ sort & compress ] { natbib } + \@@_bibtex_setup: + } + { + \@@_biblatex_pre_setup: + \RequirePackage { biblatex } + \@@_biblatex_post_setup: + } + } +% \end{macrocode} +% +% \changes{v0.7}{2018/01/25}{统一使用 \cs{printbibliography} 命令 +% 生成参考文献列表。} +% \changes{v0.7d}{2019/03/23}{使参考文献在目录中正常显示。} +% +% \begin{macro}{\@@_bibtex_setup:,\bibsection,\printbibliography} +% \BibTeX{} 相关设置。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_bibtex_setup: + { + \tl_if_empty:NTF \l_@@_bib_style_tl + { + \tl_if_eq:VnTF \l_@@_bib_gb_style_tl { numerical } + { + \bibliographystyle { gbt7714-unsrt } + \@@_set_cite_style_numerical: + } + { + \tl_if_eq:VnT \l_@@_bib_gb_style_tl { author-year } + { + \bibliographystyle { gbt7714-plain } + \@@_set_cite_style_author_year: + \cs_set_eq:NN \cite \citep + } + } + } + { \exp_args:NV \bibliographystyle \l_@@_bib_style_tl } +% \end{macrocode} +% 修改参考文献标题。 +% \begin{macrocode} + \cs_set:Npn \bibsection { \@@_chapter:V \bibname } +% \end{macrocode} +% \BibTeX{} 下接口与 \pkg{biblatex} 保持统一。 +% \begin{macrocode} + \NewDocumentCommand \printbibliography { o } + { + \exp_args:NV \bibliography \l_@@_bib_resource_tl + \IfValueT {##1} + { \@@_warning:nn { invalid-option-in-bibtex } {##1} } + } + } +\@@_msg_new:nn { invalid-option-in-bibtex } + { Option(s)~ "#1"~ are~ invalid~ in~ BibTeX. } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{ +% \@@_biblatex_pre_setup:, +% \@@_biblatex_post_setup:, +% \@@_pass_options_to_biblatex:n} +% \pkg{biblatex} 相关设置。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_biblatex_pre_setup: + { +% \end{macrocode} +% 参考文献样式。 +% \begin{macrocode} + \tl_if_empty:NTF \l_@@_bib_style_tl + { + \tl_if_eq:VnTF \l_@@_bib_gb_style_tl { numerical } + { \@@_pass_options_to_biblatex:n { style = gb7714-2015 } } + { + \tl_if_eq:VnT \l_@@_bib_gb_style_tl { author-year } + { \@@_pass_options_to_biblatex:n { style = gb7714-2015ay } } + } + } + { \@@_pass_options_to_biblatex:n { style = \l_@@_bib_style_tl } } +% \end{macrocode} +% 引用样式。 +% \begin{macrocode} + \tl_if_empty:NF \l_@@_cite_style_tl + { \@@_pass_options_to_biblatex:n { citestyle = \l_@@_bib_style_tl } } + \@@_pass_options_to_biblatex:n { backend = biber, hyperref = manual, natbib } + } +\cs_new_protected:Npn \@@_biblatex_post_setup: + { + \exp_args:NV \addbibresource \l_@@_bib_resource_tl + \@@_biblatex_allow_url_break: +% \end{macrocode} +% 修改参考文献标题。 +% \begin{macrocode} + \defbibheading { bibliography } [ \bibname ] { \@@_chapter:n {##1} } +%<*class-en> + \exp_args:Nnx \DefineBibliographyStrings { english } + { bibliography = { \c_@@_name_bib_en_tl } } +% + } +\cs_new_protected:Npn \@@_pass_options_to_biblatex:n #1 + { \PassOptionsToPackage {#1} { biblatex } } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_biblatex_allow_url_break:} +% \pkg{biblatex} 下允许 URL 在字母、数字和一些特殊符号处断行。 +% \begin{macrocode} +\cs_new:Npn \@@_biblatex_allow_url_break: + { + \int_set_eq:NN \c@biburlucpenalty \c_one_int + \int_set_eq:NN \c@biburlnumpenalty \c_one_int + \int_set_eq:NN \c@biburllcpenalty \c_one_int + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_set_cite_style_numerical:} +% 顺序编码制下的引用样式。 +% \begin{macrocode} +\cs_new:Npn \@@_set_cite_style_numerical: + { + \NAT@numberstrue \NAT@supertrue + \cs_set:Npn \NAT@open { [ } + \cs_set:Npn \NAT@close { ] } + \cs_set:Npn \NAT@sep { ,~ } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_set_cite_style_author_year:} +% 著者—出版年制下的引用样式。 +% \begin{macrocode} +\cs_new:Npn \@@_set_cite_style_author_year: + { + \NAT@numbersfalse +%<*class> + \cs_set_eq:NN \NAT@open \c_@@_fwid_left_paren_tl + \cs_set_eq:NN \NAT@close \c_@@_fwid_right_paren_tl + \cs_set_eq:NN \NAT@sep \c_@@_fwid_semicolon_tl + \cs_set_eq:NN \NAT@aysep \c_@@_fwid_comma_tl + \cs_set_eq:NN \NAT@yrsep \c_@@_ideo_comma_tl +% + } +% \end{macrocode} +% \end{macro} +% +% \changes{v0.7}{2018/01/25}{同步 \pkg{gbt7714} v1.0,移除有关超链接 +% 的额外设置。} +% +% \end{implementation} +% diff --git a/source/fduthesis-cover.dtx b/source/fduthesis-cover.dtx new file mode 100644 index 0000000..70d7dc2 --- /dev/null +++ b/source/fduthesis-cover.dtx @@ -0,0 +1,845 @@ +% \iffalse meta-comment +% +% Copyright (C) 2017--2019 by Xiangdong Zeng +% +% This work may be distributed and/or modified under the conditions of the +% LaTeX Project Public License, either version 1.3c of this license or (at +% your option) any later version. The latest version of this license is in: +% +% http://www.latex-project.org/lppl.txt +% +% and version 1.3 or later is part of all distributions of LaTeX version +% 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Xiangdong Zeng. +% +% \fi +% +% \begin{implementation} +% +% \section{封面} +% +% \subsection{信息录入} +% +% \begin{variable}{\l_@@_info_title_tl, +% \l_@@_info_date_tl, +% \l_@@_info_author_tl, +% \l_@@_info_supervisor_tl, +% \l_@@_info_department_tl, +% \l_@@_info_major_tl, +% \l_@@_info_student_id_tl, +% \l_@@_info_school_id_tl, +% \l_@@_info_clc_tl, +% \l_@@_info_instructors_clist, +% \l_@@_info_keywords_clist} +% 封面所需的一些字段。 +% \begin{macrocode} +\clist_map_inline:nn + { + title, date, author, supervisor, department, major, student_id, + school_id, clc + } + { \tl_new:c { l_@@_info_ #1 _tl } } +\clist_new:N \l_@@_info_instructors_clist +\clist_new:N \l_@@_info_keywords_clist +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\l_@@_info_title_en_tl, +% \l_@@_info_author_en_tl, +% \l_@@_info_supervisor_en_tl, +% \l_@@_info_department_en_tl, +% \l_@@_info_major_en_tl, +% \l_@@_info_keywords_en_clist} +% 对应的英文字段。 +% \begin{macrocode} +\clist_map_inline:nn + { title, author, supervisor, department, major } + { \tl_new:c { l_@@_info_ #1 _en_tl } } +\clist_new:N \l_@@_info_keywords_en_clist +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\l_@@_info_degree_type_int} +% 学位类型。1 为学术学位,2 为专业学位。 +% \begin{macrocode} +\int_new:N \l_@@_info_degree_type_int +% \end{macrocode} +% \end{variable} +% +% 定义 |fdu/info| 键值类。 +% \begin{macrocode} +\keys_define:nn { fdu / info } + { +% \end{macrocode} +% +% \changes{v0.7}{2018/02/01}{新增 \opt{info/degree} 选项。} +% +% \begin{macro}{info/degree} +% 学位类型。只对硕士论文有效。 +% \begin{macrocode} + degree .choices:nn = + { academic, professional } + { \int_set_eq:NN \l_@@_info_degree_type_int \l_keys_choice_int }, +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{info/title,info/title*} +% 论文题目。以下带星号的项目均表示相应的英文字段。 +% \begin{macrocode} + title .tl_set:N = \l_@@_info_title_tl, + title* .tl_set:N = \l_@@_info_title_en_tl, +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{info/date} +% 论文完成日期。 +% \begin{macrocode} + date .tl_set:N = \l_@@_info_date_tl, +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{info/author,info/author*} +% 作者姓名。 +% \begin{macrocode} + author .tl_set:N = \l_@@_info_author_tl, + author* .tl_set:N = \l_@@_info_author_en_tl, +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{info/supervisor,info/supervisor*} +% 导师姓名。 +% \begin{macrocode} + supervisor .tl_set:N = \l_@@_info_supervisor_tl, +% supervisor* .tl_set:N = \l_@@_info_supervisor_en_tl, +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{info/instructors} +% 指导小组成员。 +% \begin{macrocode} + instructors .clist_set:N = \l_@@_info_instructors_clist, +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{info/department,info/department*} +% 院系。 +% \begin{macrocode} + department .tl_set:N = \l_@@_info_department_tl, +% department* .tl_set:N = \l_@@_info_department_en_tl, +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{info/major,info/major*} +% 专业。 +% \begin{macrocode} + major .tl_set:N = \l_@@_info_major_tl, +% major* .tl_set:N = \l_@@_info_major_en_tl, +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{info/student-id} +% 学号。 +% \begin{macrocode} + student-id .tl_set:N = \l_@@_info_student_id_tl, +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{info/school-id} +% 学校代码。 +% \begin{macrocode} + school-id .tl_set:N = \l_@@_info_school_id_tl, +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{info/keywords,info/keywords*} +% 论文关键字。 +% \begin{macrocode} + keywords .clist_set:N = \l_@@_info_keywords_clist, + keywords* .clist_set:N = \l_@@_info_keywords_en_clist, +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{info/clc} +% 中图分类号。 +% \begin{macrocode} + clc .tl_set:N = \l_@@_info_clc_tl + } +% \end{macrocode} +% \end{macro} +% +% \changes{v0.4}{2017/08/10}{新增 \opt{style/logo} 与 +% \opt{style/logo-size} 选项。} +% +% \begin{variable}{\l_@@_cover_logo_tl,\l_@@_cover_logo_size_clist} +% \begin{macrocode} +\tl_new:N \l_@@_cover_logo_tl +\clist_new:N \l_@@_cover_logo_size_clist +% \end{macrocode} +% \end{variable} +% +% \begin{macro}{style/logo,style/logo-size} +% 校名图片的文件名和尺寸。 +% \begin{macrocode} +\keys_define:nn { fdu / style } + { + logo .tl_set:N = \l_@@_cover_logo_tl, + logo-size .clist_set:N = \l_@@_cover_logo_size_clist + } +% \end{macrocode} +% \end{macro} +% +% \subsection{密级} +% +% \changes{v0.3}{2017/07/04}{新增 \opt{info/secret-level} 与 +% \opt{info/secret-year} 选项。} +% +% \begin{variable}{\l_@@_secret_bool} +% 是否显示密级。 +% \begin{macrocode} +\bool_new:N \l_@@_secret_bool +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\l_@@_info_secret_level_tl} +% 保存当前的密级。 +% \begin{macrocode} +\tl_new:N \l_@@_info_secret_level_tl +% \end{macrocode} +% \end{variable} +% +% \begin{macrocode} +\keys_define:nn { fdu / info } + { +% \end{macrocode} +% +% \begin{macro}{info/secret-level} +% \changes{v0.6}{2017/11/11}{不再依赖 XITS-Math 字体。} +% 密级。\opt{none} 表示不涉密,\opt{i}、\opt{ii}、\opt{iii} 分别为 +% 秘密、机密、绝密。 +% \begin{macrocode} + secret-level .choices:nn = + { none, i, ii, iii } + { + \int_compare:nTF { \l_keys_choice_int >= 2 } + { + \bool_set_true:N \l_@@_secret_bool + \tl_set:Nn \l_@@_info_secret_level_tl + { + \clist_item:Nn \c_@@_secret_clist + { \l_keys_choice_int - 1 } + } + } + { \bool_set_false:N \l_@@_secret_bool } + }, + secret-level .value_required:n = true, +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{info/secret-year} +% 保密年限。 +% \begin{macrocode} + secret-year .tl_set:N = \l_@@_info_secret_year_tl + } +% \end{macrocode} +% \end{macro} +% +% \subsection{定义内部函数} +% +% \begin{macro}{\@@_spread_box:nn} +% 分散对齐的水平盒子。 +% \begin{arguments} +% \item 宽度 +% \item 内容 +% \end{arguments} +% 利用 \cs{tl_map_inline:nn} 在字符间插入 \tn{hfil};紧随其后的 \tn{unskip} +% 将会去掉最后一个 \tn{hfil}。见 \url{https://tex.stackexchange.com/q/169689}。 +% |#2| 需要完全展开以避免 underfull 警告。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_spread_box:nn #1#2 + { + \mode_leave_vertical: + \hbox_to_wd:nn {#1} + { \tl_map_inline:xn {#2} { ##1 \hfil } \unskip } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_center_box:nn,\@@_center_box:Vn} +% 居中对齐的水平盒子。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_center_box:nn #1#2 + { + \mode_leave_vertical: + \hbox_to_wd:nn {#1} { \hfil #2 \hfil } + } +\cs_generate_variant:Nn \@@_center_box:nn { Vn } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_fixed_width_box:nn} +% 限宽盒子(允许换行)。 +% \begin{macrocode} +\cs_new:Npn \@@_fixed_width_box:nn #1#2 + { \parbox {#1} {#2} } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_fixed_width_center_box:nn} +% 居中对齐的限宽盒子(允许换行)。 +% \begin{macrocode} +\cs_new:Npn \@@_fixed_width_center_box:nn #1#2 + { \parbox {#1} { \centering #2 } } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_get_text_width:Nn,\@@_get_text_width:NV} +% 获取文本宽度,并存入 |dim| 型变量。 +% \begin{arguments} +% \item |dim| 型变量 +% \item 内容 +% \end{arguments} +% \begin{macrocode} +\cs_new:Npn \@@_get_text_width:Nn #1#2 + { + \hbox_set:Nn \l_@@_tmpa_box {#2} + \dim_set:Nn #1 { \box_wd:N \l_@@_tmpa_box } + } +\cs_generate_variant:Nn \@@_get_text_width:Nn { NV } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_get_max_text_width:NN} +% \changes{v0.6}{2017/11/24}{移除不必要的字号设置。} +% 获取多个文本中的最大宽度,并存入 |dim| 型变量。 +% \begin{arguments} +% \item |dim| 型变量 +% \item 文本 |clist| +% \end{arguments} +% 当 \cs{l_@@_tmpa_clist} 非空时,弹出最后一个元素 +% 赋给 \cs{l_@@_tmpa_tl},获取其长度后与 |#1| 进行比较, +% 二者中较大的那一个将成为 |#1| 的新值。 +% 不断循环,直至 \cs{l_@@_tmpa_clist} 为空。 +% \begin{macrocode} +\cs_new:Npn \@@_get_max_text_width:NN #1#2 + { +% \end{macrocode} +% 这里用 |group| 确保局部变量不会被污染。 +% \begin{macrocode} + \group_begin: + \clist_set_eq:NN \l_@@_tmpa_clist #2 + \bool_until_do:nn { \clist_if_empty_p:N \l_@@_tmpa_clist } + { + \clist_pop:NN \l_@@_tmpa_clist \l_@@_tmpa_tl + \@@_get_text_width:NV \l_@@_tmpa_dim \l_@@_tmpa_tl + \dim_gset:Nn #1 { \dim_max:nn {#1} { \l_@@_tmpa_dim } } + } + \group_end: + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_blank_underline:n} +% \changes{v0.4}{2017/08/14}{改用 \tn{rule} 绘制下划线,不再依赖 +% \pkg{ulem} 宏包。} +% 下划线占位符。|#1|: 长度。 +% \begin{macrocode} +\cs_new:Npn \@@_blank_underline:n #1 + { \rule [ -0.5 ex ] {#1} { 0.4 pt } } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_line_spread:N,\@@_line_spread:n} +% 设置行距。|#1|: 行距倍数 |fp| 变量。 +% \begin{macrocode} +\cs_new:Npn \@@_line_spread:N #1 + { \linespread { \fp_use:N #1 } \selectfont } +\cs_new:Npn \@@_line_spread:n #1 + { \linespread {#1} \selectfont } +% \end{macrocode} +% \end{macro} +% +% \subsection{封面各部件} +% +% \changes{v0.5}{2017/09/19}{使用 \pkg{expl3} 以及内部函数改写 +% 封面,减少对 \LaTeXe{} 的依赖。} +% +% \begin{macro}{\@@_cover_id:,\@@_cover_id_aux:n} +% 右上角的学校代码和学号。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_cover_id: + { + \@@_fixed_width_box:nn { 120 pt } + { + \bool_if:NT \l_@@_secret_bool + { + \group_begin: + \sffamily + \@@_cover_id_aux:n { secret_level } + \c_@@_name_secret_star_tl + \l_@@_info_secret_year_tl + \group_end: + \par + } + \@@_cover_id_aux:n { school_id } \par + \@@_cover_id_aux:n { student_id } + } +% \end{macrocode} +% 插入一个宽度为负的水平盒子以减少右侧边距。 +% \begin{macrocode} + \hbox_to_wd:nn { -24 pt } { } + } +\cs_new:Npn \@@_cover_id_aux:n #1 + { + \tl_use:c { c_@@_name_ #1 _tl } + \c_@@_fwid_colon_tl + \tl_use:c { l_@@_info_ #1 _tl } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_cover_logo:} +% 插入校名图片。根据参数 \opt{width} 和 \opt{height} 是否为空依次 +% 判断。\cs{l_@@_cover_logo_size_clist} 中超过两个的参数将被忽略。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_cover_logo: + { + \clist_pop:NN \l_@@_cover_logo_size_clist \l_@@_tmpa_tl + \clist_pop:NNTF \l_@@_cover_logo_size_clist \l_@@_tmpb_tl + { + \tl_if_empty:NTF \l_@@_tmpa_tl + { \includegraphics [ height = \l_@@_tmpb_tl ] } + { + \includegraphics + [ width = \l_@@_tmpa_tl, height = \l_@@_tmpb_tl ] + } + } + { \includegraphics [ width = \l_@@_tmpa_tl ] } + { \l_@@_cover_logo_tl } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_cover_type:} +% 论文类型。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_cover_type: + { + \tl_set:Nx \l_@@_tmpa_tl + { + \clist_item:Nn \c_@@_thesis_type_clist + { \g_@@_thesis_type_int } + } + \@@_spread_box:nn { 0.45 \textwidth } { \l_@@_tmpa_tl } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_cover_degree:} +% \changes{v0.7c}{2019/03/12}{允许博士学位论文使用学位类型。} +% 学位类型。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_cover_degree: + { + \int_compare:nT { \g_@@_thesis_type_int != 3 } + { + \c_@@_fwid_left_paren_tl + \clist_item:Nn \c_@@_degree_type_clist + { \l_@@_info_degree_type_int } + \c_@@_fwid_right_paren_tl + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_cover_info:} +% 信息栏。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_cover_info: + { + \begin{minipage} [ c ] { \textwidth } + \centering \zihao { 4 } +% \end{macrocode} +% 读取左侧名称字段。 +% \begin{macrocode} + \clist_set:Nx \l_@@_tmpa_clist + { + \c_@@_name_department_tl, + \c_@@_name_major_tl, + \c_@@_name_author_tl, + \c_@@_name_supervisor_tl, + \c_@@_name_date_tl, + } +% \end{macrocode} +% 设置信息栏右侧宽度。读取各字段,并将最宽者的宽度赋给 +% \cs{l_@@_tmpb_dim}。 +% \begin{macrocode} + \clist_set:Nx \l_@@_tmpb_clist + { + { \l_@@_info_department_tl }, + { \l_@@_info_major_tl }, + { \l_@@_info_author_tl }, + { \l_@@_info_supervisor_tl }, + { \l_@@_info_date_tl } + } + \@@_get_max_text_width:NN \l_@@_tmpb_dim \l_@@_tmpb_clist +% \end{macrocode} +% 用循环输出各字段。 +% \begin{macrocode} + \bool_until_do:nn + { \clist_if_empty_p:N \l_@@_tmpa_clist } + { + \clist_pop:NN \l_@@_tmpa_clist \l_@@_tmpa_tl + \clist_pop:NN \l_@@_tmpb_clist \l_@@_tmpb_tl + \@@_spread_box:nn { 6 em } { \l_@@_tmpa_tl } + \c_@@_fwid_colon_tl + \@@_center_box:Vn \l_@@_tmpb_dim { \l_@@_tmpb_tl } + \skip_vertical:n { 1 ex } + } + \end{minipage} + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_cover_signature:N} +% 签名行。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_cover_signature:N #1 + { + \clist_map_inline:Nn #1 + { + ##1 \c_@@_fwid_colon_tl + \@@_blank_underline:n { 6 em } + \@@_quad: + } + } +% \end{macrocode} +% \end{macro} +% +% \subsection{封面模板} +% +% \changes{v0.7}{2018/02/27}{使用 \pkg{xtemplate} 重构封面布局。} +% +% 声明封面对象。不需要带参数。 +% \begin{macrocode} +%<@@=fdu_cover> +\DeclareObjectType { fdu / cover } { \c_zero_int } +% \end{macrocode} +% +% \begin{macro}{\DeclareCoverTemplate,\fdu_cover_declare_template:nn} +% 声明封面模板。 +% \begin{arguments} +% \item 模板名称 +% \item 封面部件列表,以逗号分隔 +% \end{arguments} +% \begin{macrocode} +\NewDocumentCommand \DeclareCoverTemplate { m m } + { \fdu_cover_declare_template:nn {#1} {#2} } +\cs_new_protected:Npn \fdu_cover_declare_template:nn #1#2 + { + \tl_set:Nn \l_@@_template_tl {#1} +% \end{macrocode} +% 构建模板接口。 +% \begin{macrocode} + \@@_declare_template_interface:nx {#1} + { + format : tokenlist, + top-skip : skip, + bottom-skip : skip, + \clist_map_function:nN {#2} \@@_key_type:n + } +% \end{macrocode} +% 声明所用变量。 +% \begin{macrocode} + \tl_new:c { l_@@ / #1 / format_tl } + \skip_new:c { l_@@ / #1 / top_skip } + \skip_new:c { l_@@ / #1 / bottom_skip } + \clist_map_inline:nn {#2} + { + \tl_new:c { l_@@ / #1 / ##1 / content_tl } + \tl_new:c { l_@@ / #1 / ##1 / format_tl } + \skip_new:c { l_@@ / #1 / ##1 / bottom_skip } + } +% \end{macrocode} +% 声明模板代码。^^A 以下名字空间为 `fdu_cover' 而非 `fdu' +% \begin{macrocode} + \@@_declare_template_code:nxn {#1} + { + format = \exp_not:c { l_@@ / #1 / format_tl }, + top-skip = \use:c { l_@@ / #1 / top_skip }, + bottom-skip = \use:c { l_@@ / #1 / bottom_skip }, + \clist_map_function:nN {#2} \@@_key_binding:n + } + { + \AssignTemplateKeys + \tl_use:c { l_@@ / #1 / format_tl } + \__fdu_vspace:c { l_@@ / #1 / top_skip } + \clist_map_inline:nn {#2} + { + \use:c { @@ / #1 / ####1 / align:n } + { + \tl_use:c { l_@@ / #1 / ####1 / format_tl } + \tl_use:c { l_@@ / #1 / ####1 / content_tl } + \par + } + \__fdu_vspace:c { l_@@ / #1 / ####1 / bottom_skip } + } + \__fdu_vspace:c { l_@@ / #1 / bottom_skip } + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{variable}{\l_@@_template_tl} +% 保存模板名称。 +% \begin{macrocode} +\tl_new:N \l_@@_template_tl +% \end{macrocode} +% \end{variable} +% +% \begin{macro}{\@@_declare_template_interface:nn, +% \@@_declare_template_code:nnn, +% \@@_declare_template_interface:nx, +% \@@_declare_template_code:nxn} +% 为了展开的方便,这里需要封装 \pkg{xtemplate} 的一些函数。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_declare_template_interface:nn #1#2 + { \DeclareTemplateInterface { fdu / cover } {#1} { \c_zero_int } {#2} } +\cs_new_protected:Npn \@@_declare_template_code:nnn #1#2#3 + { \DeclareTemplateCode { fdu / cover } {#1} { \c_zero_int } {#2} {#3} } +\cs_generate_variant:Nn \@@_declare_template_interface:nn { nx } +\cs_generate_variant:Nn \@@_declare_template_code:nnn { nxn } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_key_type:n} +% \begin{macrocode} +\cs_new:Npn \@@_key_type:n #1 + { + #1 / content : tokenlist, + #1 / format : tokenlist, + #1 / bottom-skip : skip, + #1 / align : choice { left, right, center, normal } = normal, + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_key_binding:n} +% \begin{macrocode} +\cs_new:Npn \@@_key_binding:n #1 + { + #1 / content = + \exp_not:c + { l_@@ / \l_@@_template_tl / #1 / content_tl }, + #1 / format = + \exp_not:c + { l_@@ / \l_@@_template_tl / #1 / format_tl }, + #1 / bottom-skip = + \exp_not:c + { l_@@ / \l_@@_template_tl / #1 / bottom_skip }, + #1 / align = + { + left = + \exp_not:N \cs_set_protected:cpn + { @@ / \l_@@_template_tl / #1 / align:n } + \exp_not:n {##1} + { + \exp_not:n + { + \group_begin: + \flushleft ##1 \endflushleft + \group_end: + } + }, + right = + \exp_not:N \cs_set_protected:cpn + { @@ / \l_@@_template_tl / #1 / align:n } + \exp_not:n {##1} + { + \exp_not:n + { + \group_begin: + \flushright ##1 \endflushright + \group_end: + } + }, + center = + \exp_not:N \cs_set_protected:cpn + { @@ / \l_@@_template_tl / #1 / align:n } + \exp_not:n {##1} + { + \exp_not:n + { + \group_begin: + \center ##1 \endcenter + \group_end: + } + }, + normal = + \exp_not:N \cs_set_protected:cpn + { @@ / \l_@@_template_tl / #1 / align:n } + \exp_not:n {##1} + { \exp_not:n { \group_begin: ##1 \group_end: } } + }, + } +%<@@=fdu> +% \end{macrocode} +% \end{macro} +% +% \subsection{绘制封面} +% +% \begin{macro}{\makecoveri,\makecoverii,\makecoveriii} +% 使用实例(instance)构建封一、封二、封三。 +% \begin{macrocode} +\NewDocumentCommand \makecoveri { } + { + \thispagestyle { empty } + \UseInstance { fdu / cover } { cover-i-default } + } +\NewDocumentCommand \makecoverii { } + { + \thispagestyle { empty } + \UseInstance { fdu / cover } { cover-ii-default } + } +\NewDocumentCommand \makecoveriii { } + { + \cleardoublepage + \thispagestyle { empty } + \UseInstance { fdu / cover } { cover-iii-default } + } +% \end{macrocode} +% \end{macro} +% +% 声明各封面模板组成部分。 +% \begin{macrocode} +\DeclareCoverTemplate { cover-i } + { id, logo, type, degree, title, title-en, info } +\DeclareCoverTemplate { cover-ii } { title, name-list } +\DeclareCoverTemplate { cover-iii } + { + originality-decl-name, + originality-decl-text, + originality-decl-sig, + authorization-decl-name, + authorization-decl-text, + authorization-decl-sig + } +% \end{macrocode} +% +% \changes{v0.7d}{2019/03/29}{封面中文标题改为加粗宋体(可能使用伪粗)。} +% +% 定义封面的具体配置参数。 +% \begin{macrocode} +\DeclareInstance { fdu / cover } { cover-i-default } { cover-i } + { +% format = \@@_line_spread:N \c_@@_line_spread_fp, + bottom-skip = 0 pt plus 1.5 fill, + id / content = \@@_cover_id:, + logo / content = \@@_cover_logo:, + type / content = \@@_cover_type:, + degree / content = \@@_cover_degree:, + title / content = + \@@_fixed_width_center_box:nn + { 0.9 \textwidth } { \l_@@_info_title_tl }, + title-en / content = + \@@_fixed_width_center_box:nn + { 0.9 \textwidth } { \l_@@_info_title_en_tl }, + info / content = \@@_cover_info:, + id / format = \zihao { -5 }, + type / format = \zihao { 2 }, + degree / format = \zihao { 4 }, + title / format = \zihao { -2 } \bfseries, + title-en / format = \@@_line_spread:n { 1.2 } \zihao { 4 } \bfseries, + id / bottom-skip = 0 pt plus 1.6 fill, + logo / bottom-skip = 0 pt plus 0.3 fill, + type / bottom-skip = -18 pt, + degree / bottom-skip = 0 pt plus 0.8 fill, + title-en / bottom-skip = 0 pt plus 2.5 fill, + id / align = right, + logo / align = center, + type / align = center, + degree / align = center, + title / align = center, + title-en / align = center, + info / align = center, + } +\DeclareInstance { fdu / cover } { cover-ii-default } { cover-ii } + { +% format = \@@_line_spread:N \c_@@_line_spread_fp, + title / content = + \@@_spread_box:nn { 7 em } { \c_@@_name_instructors_tl }, + name-list / content = + \clist_use:Nn \l_@@_info_instructors_clist { \par }, + title / format = \zihao { 2 } \sffamily, + name-list / format = \large, + title / align = center, + name-list / align = center, + } +\DeclareInstance { fdu / cover } { cover-iii-default } { cover-iii } + { + format = +% \@@_line_spread:n { 1.8 }, +% \@@_line_spread:n { 1.8 } \dim_set:Nn \parindent { 2 \ccwd }, + top-skip = 0 pt plus 0.2 fill, + bottom-skip = 0 pt plus 2.5 fill, + originality-decl-name / content = \c_@@_name_orig_decl_tl, + originality-decl-text / content = \c_@@_orig_decl_text_tl, + originality-decl-sig / content = + \@@_cover_signature:N \c_@@_orig_decl_sign_clist, + authorization-decl-name / content = \c_@@_name_auth_decl_tl, + authorization-decl-text / content = \c_@@_auth_decl_text_tl, + authorization-decl-sig / content = + \@@_cover_signature:N \c_@@_auth_decl_sign_clist, + originality-decl-name / format = + \@@_line_spread:n { 1.2 } \zihao { -2 } \bfseries, + authorization-decl-name / format = + \@@_line_spread:n { 1.2 } \zihao { -2 } \bfseries, + originality-decl-name / bottom-skip = 0.4 cm, + originality-decl-text / bottom-skip = 0.4 cm, + originality-decl-sig / bottom-skip = 0 pt plus 2.5 fill, + authorization-decl-name / bottom-skip = 0.4 cm, + authorization-decl-text / bottom-skip = 0.4 cm, + originality-decl-name / align = center, + originality-decl-sig / align = right, + authorization-decl-name / align = center, + authorization-decl-sig / align = right, + } +% \end{macrocode} +% +% \begin{macro}{style/auto-make-cover} +%^^A \begin{variable}{\l_@@_auto_make_cover_bool} +% 是否自动生成封面。 +% \begin{macrocode} +\bool_new:N \l_@@_auto_make_cover_bool +\keys_define:nn { fdu / style } + { + auto-make-cover .bool_set:N = \l_@@_auto_make_cover_bool, + auto-make-cover .default:n = true + } +% \end{macrocode} +%^^A \end{variable} +% \end{macro} +% +% 在 \env{document} 开始位置添加封面以及指导小组成员名单。 +% \begin{macrocode} +\AtBeginDocument + { + \bool_if:NT \l_@@_auto_make_cover_bool + { + \begin{titlepage} + \makecoveri \newpage \makecoverii + \end{titlepage} + } + } +% \end{macrocode} +% +% 在 \env{document} 结束位置添加声明页。 +% \begin{macrocode} +\AtEndDocument + { \bool_if:NT \l_@@_auto_make_cover_bool { \makecoveriii } } +% \end{macrocode} +% +% \end{implementation} +% diff --git a/source/fduthesis-doc.dtx b/source/fduthesis-fdudoc.dtx similarity index 97% rename from source/fduthesis-doc.dtx rename to source/fduthesis-fdudoc.dtx index 0e1f58f..528f55c 100644 --- a/source/fduthesis-doc.dtx +++ b/source/fduthesis-fdudoc.dtx @@ -2,15 +2,14 @@ % % Copyright (C) 2017--2019 by Xiangdong Zeng % -% This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either -% version 1.3c of this license or (at your option) any later -% version. The latest version of this license is in: +% This work may be distributed and/or modified under the conditions of the +% LaTeX Project Public License, either version 1.3c of this license or (at +% your option) any later version. The latest version of this license is in: % % http://www.latex-project.org/lppl.txt % -% and version 1.3 or later is part of all distributions of -% LaTeX version 2005/12/01 or later. +% and version 1.3 or later is part of all distributions of LaTeX version +% 2005/12/01 or later. % % This work has the LPPL maintenance status `maintained'. % @@ -18,8 +17,6 @@ % % \fi % -% \EnableImplementation -% % \begin{implementation} % %^^A 代码部分的页边距 @@ -31,7 +28,7 @@ % marginpar = 2.25 in % } % -% \subsection{模板文档样式 \cls{fdudoc}} +% \section{模板文档样式 \cls{fdudoc}} % % \changes{v0.4}{2017/07/29}{在 \cls{ctxdoc} 的基础上完成 % \cls{fdudoc} 文档类,用于模板手册的编写。} @@ -73,7 +70,7 @@ % % 以下为 \cls{fdudoc} 的具体实现。 % -% \subsubsection{载入宏包、文档类} +% \subsection{载入宏包、文档类} % % \begin{macrocode} %<*doc> @@ -116,9 +113,9 @@ } % \end{macrocode} % -% \subsubsection{\env{macrocode} 环境} +% \subsection{\env{macrocode} 环境} % -% \paragraph{继承的代码} +% \subsubsection{继承的代码} % % \begin{macro}[int]{\macro@code} % 在 \pkg{doc} 宏包中,\env{macrocode} 环境的核心功能由命令 @@ -211,7 +208,7 @@ % \end{macrocode} % \end{macro} % -% \paragraph{代码行处理} +% \subsubsection{代码行处理} % % \begin{macro}[int]{\xmacro@code,\sxmacro@code} % 重新实现 \env{macrocode} 与 \env{macrocode*} 环境的核心功能, @@ -464,7 +461,7 @@ % \end{macrocode} % \end{macro} % -% \paragraph{模块标记处理} +% \subsubsection{模块标记处理} % % \begin{macro}{\CheckModules,\DontCheckModules} % 选择是否检查模块标记。这两个命令在 \pkg{doc} 宏包中已有定义, @@ -809,7 +806,7 @@ \zref@addprop { fdudoc } { guard@end } % \end{macrocode} % -% \paragraph{格式处理} +% \subsubsection{格式处理} % % \begin{macro}{\MacroFont} % 代码部分的字体。 @@ -976,7 +973,7 @@ % \end{macrocode} % \end{macro} % -% \subsubsection{\env{function} 环境} +% \subsection{\env{function} 环境} % % \begin{macro}{\@@_verb_addon:, % \@@_disable_ecglue:, @@ -1057,7 +1054,7 @@ % \end{environment} % \end{environment} % -% \subsubsection{修订记录索引项} +% \subsection{修订记录索引项} % % \begin{macro}{\@@_ltx_changes:nnn} % 保存 \pkg{doc} 中 \tn{changes@} 的定义。 @@ -1240,9 +1237,9 @@ % \end{macrocode} % \end{macro} % -% \subsubsection{命令补丁} +% \subsection{命令补丁} % -% \paragraph{\LaTeXe{} 补丁} +% \subsubsection{\LaTeXe{} 补丁} % % \begin{macro}[int]{\@addtocurcol} % 调整浮动体、代码等与文字的间距。 @@ -1372,12 +1369,26 @@ % \end{macrocode} % \end{macro} % -% \paragraph{\cls{l3doc} 补丁} +% \subsubsection{\cls{l3doc} 补丁} % % \begin{macrocode} %<@@=codedoc> % \end{macrocode} % +% \begin{macro}{\@@_input:n} +% 不再清空 \cs{g_@@_module_name_tl}。 +% \begin{macrocode} +\cs_set_protected:Npn \@@_input:n #1 + { + \part{#1} + \MakePercentIgnore + \input{#1} + \MakePercentComment + % \__fdudoc_end_input:n {#1} + } +% \end{macrocode} +% \end{macro} +% % \begin{macro}{\list} % \cls{l3doc} 会设置列表环境中 \tn{listparindent} |=| \tn{z@}, % 这里将其恢复。 @@ -1435,10 +1446,10 @@ % \begin{macro}{\@@_meta_original:n} % 改用文本模式显示尖括号。 % \begin{macrocode} -\__fdudoc_patch_cmd:Nnn \@@_meta_original:n - { \ensuremath \langle } { \textlangle } -\__fdudoc_patch_cmd:Nnn \@@_meta_original:n - { \ensuremath \rangle } { \textrangle } +% \__fdudoc_patch_cmd:Nnn \@@_meta_original:n +% { \ensuremath \langle } { \textlangle } +% \__fdudoc_patch_cmd:Nnn \@@_meta_original:n +% { \ensuremath \rangle } { \textrangle } % \end{macrocode} % \end{macro} % @@ -1606,7 +1617,7 @@ % \end{macrocode} % \end{macro} % -% \subsubsection{杂项} +% \subsection{杂项} % % \begin{macro}{\StopSpecialIndexModule, % \@@_special_index_module:nnnnN} @@ -1647,7 +1658,7 @@ \ExplSyntaxOff % \end{macrocode} % -% \subsubsection{排版样式设置} +% \subsection{排版样式设置} % % 目录中禁止对 \cs{cs} 和 \cs{tn} 等的索引。 % \begin{macrocode} @@ -1761,7 +1772,6 @@ % 版式排版格式。 % \begin{macrocode} \ctexset{% - section/name = {第,节}, section/format+ = \raggedright, paragraph/runin = false, paragraph/numbering = false, @@ -1889,7 +1899,7 @@ \RecordChanges % \end{macrocode} % -% \subsubsection{文档层命令} +% \subsection{文档层命令} % % \begin{macro}{\exptarget,\rexptarget,\expstar,\rexpstar, % \__codedoc_typeset_exp:,\__codedoc_typeset_rexp:} @@ -2047,7 +2057,7 @@ % \end{macrocode} % \end{macro} % -% \paragraph{示例代码环境} +% \subsubsection{示例代码环境} % % \pkg{listings} 宏包中连字符 |-| 原本以数学模式输出,此处改为普通文本。 % 见 \url{https://tex.stackexchange.com/a/33188}。 @@ -2150,7 +2160,5 @@ % % \changes{v0.7c}{2019/03/15}{不再附带 \pkg{latexmk} 配置文件。} % -% \clearpage -% % \end{implementation} % diff --git a/source/fduthesis-logo.dtx b/source/fduthesis-fdulogo.dtx similarity index 99% rename from source/fduthesis-logo.dtx rename to source/fduthesis-fdulogo.dtx index 46edb6a..2b1e99a 100644 --- a/source/fduthesis-logo.dtx +++ b/source/fduthesis-fdulogo.dtx @@ -2,15 +2,14 @@ % % Copyright (C) 2017--2019 by Xiangdong Zeng % -% This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either -% version 1.3c of this license or (at your option) any later -% version. The latest version of this license is in: +% This work may be distributed and/or modified under the conditions of the +% LaTeX Project Public License, either version 1.3c of this license or (at +% your option) any later version. The latest version of this license is in: % % http://www.latex-project.org/lppl.txt % -% and version 1.3 or later is part of all distributions of -% LaTeX version 2005/12/01 or later. +% and version 1.3 or later is part of all distributions of LaTeX version +% 2005/12/01 or later. % % This work has the LPPL maintenance status `maintained'. % @@ -18,8 +17,6 @@ % % \fi % -% \EnableImplementation -% % \begin{implementation} % %^^A 代码部分的页边距 @@ -31,7 +28,7 @@ % marginpar = 2.25 in % } % -% \subsection{视觉识别系统 \pkg{fdulogo}} +% \section{视觉识别系统 \pkg{fdulogo}} % % \changes{v0.5}{2017/08/30}{将视觉识别系统移入 \pkg{fdulogo} % 宏包,并添加重修版校徽。} @@ -47,7 +44,7 @@ \RequirePackage { xparse } % \end{macrocode} % -% \subsubsection{用户接口} +% \subsection{用户接口} % % \begin{macro}{\fduname} % 复旦大学校名(復旦大學),由毛泽东题写。原始图片来源: @@ -145,7 +142,7 @@ % \end{macrocode} % \end{macro} % -% \subsubsection{内部命令} +% \subsection{内部命令} % % \begin{macrocode} %<@@=> @@ -313,7 +310,7 @@ % \end{macrocode} % \end{macro} % -% \subsubsection{生成文件} +% \subsection{生成文件} % % 以下两个文件用于生成各图案。 % \DoNotIndex{\FIG,\BG} @@ -387,20 +384,18 @@ % % \end{macrocode} % -% \subsubsection{路径} +% \subsection{路径} % % 各图案的路径均使用 Bézier 曲线生成。曲线的具体数据参见源代码, % 此处从略。 % -% \clearpage -% % \end{implementation} % % \DisableImplementation % % \begin{implementation} % -% \paragraph{校名} +% \subsubsection{校名} % % 复。 % \begin{macrocode} @@ -737,7 +732,7 @@ .. controls ( 657.8875, 130.6700) and ( 656.2475, 133.8833) .. ( 654.7142, 137.1500)} % \end{macrocode} % -% \paragraph{校名(毛泽东原版)} +% \subsubsection{校名(毛泽东原版)} % % 复。 % \begin{macrocode} @@ -1378,7 +1373,7 @@ .. controls ( 786.0537, 642.1103) and ( 785.4892, 642.8955) .. cycle} % \end{macrocode} % -% \paragraph{校名(重修版)} +% \subsubsection{校名(重修版)} % % 复。 % \begin{macrocode} @@ -1716,7 +1711,7 @@ .. controls ( 786.0537, 642.1103) and ( 785.4892, 642.8955) .. cycle} % \end{macrocode} % -% \paragraph{校徽} +% \subsubsection{校徽} % % 核心图案。 % \begin{macrocode} @@ -2293,7 +2288,7 @@ .. controls ( 466.7857, 713.1127) and ( 410.0523, 721.1661) .. ( 354.5323, 717.8461)} % \end{macrocode} % -% \paragraph{校徽(重修版)} +% \subsubsection{校徽(重修版)} % % 核心图案。 % \begin{macrocode} @@ -2792,7 +2787,7 @@ ( 427.2847, 410.4046) circle [radius=343.93732473]} % \end{macrocode} % -% \paragraph{校训} +% \subsubsection{校训} % % 博。 % \begin{macrocode} diff --git a/source/fduthesis-font.dtx b/source/fduthesis-font.dtx new file mode 100644 index 0000000..13464ae --- /dev/null +++ b/source/fduthesis-font.dtx @@ -0,0 +1,721 @@ +% \iffalse meta-comment +% +% Copyright (C) 2017--2019 by Xiangdong Zeng +% +% This work may be distributed and/or modified under the conditions of the +% LaTeX Project Public License, either version 1.3c of this license or (at +% your option) any later version. The latest version of this license is in: +% +% http://www.latex-project.org/lppl.txt +% +% and version 1.3 or later is part of all distributions of LaTeX version +% 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Xiangdong Zeng. +% +% \fi +% +% \begin{implementation} +% +% \section{字体} +% +% \subsection{预定义字体配置} +% +% \changes{v0.7c}{2019/03/05}{重构字体配置,并兼容 macOS。} +% +% \begin{variable}{\g_@@_fontset_tl, \g_@@_cjk_fontset_tl} +% 存放字体选项值。 +% \begin{macrocode} +\tl_new:N \g_@@_fontset_tl +%\tl_new:N \g_@@_cjk_fontset_tl +% \end{macrocode} +% \end{variable} +% +% \begin{macro}{style/font} +% \changes{v0.7c}{2019/03/05}{新增 \opt{garamond} 和 \opt{times*} 样式。} +% 预定义西文字体。 +% \begin{macrocode} +\keys_define:nn { fdu / style } + { + font .choices:nn = + { garamond, libertinus, lm, palatino, times, times*, none } + { \tl_set_eq:NN \g_@@_fontset_tl \l_keys_choice_tl } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{style/cjk-font} +% \changes{v0.7c}{2019/03/05}{新增 \opt{sinotype} 和 \opt{sourcehan} 样式。} +% 预定义中文字体。 +% \begin{macrocode} +%<*class> +\keys_define:nn { fdu / style } + { + cjk-font .choices:nn = + { adobe, fandol, founder, mac, sinotype, sourcehan, windows, none } + { \tl_set_eq:NN \g_@@_cjk_fontset_tl \l_keys_choice_tl } + } +% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{ +% \@@_setmainfont:nn, +% \@@_setsansfont:nn, +% \@@_setmonofont:nn, +% \@@_setmathfont:nn} +% 用于设置西文字体的辅助函数,来源于 \pkg{fontspec} 和 \pkg{unicode-math}。 +% \begin{arguments} +% \item 字体名 +% \item 选项 +% \end{arguments} +% \begin{macrocode} +\cs_new_protected:Npn \@@_setmainfont:nn #1#2 + { \__fontspec_main_setmainfont:nn {#2} {#1} } +\cs_new_protected:Npn \@@_setsansfont:nn #1#2 + { \__fontspec_main_setsansfont:nn {#2} {#1} } +\cs_new_protected:Npn \@@_setmonofont:nn #1#2 + { \__fontspec_main_setmonofont:nn {#2} {#1} } +\cs_new_protected:Npn \@@_setmathfont:nn #1#2 + { \__um_setmathfont:nn {#2} {#1} } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{ +% \@@_setCJKmainfont:nn, +% \@@_setCJKsansfont:nn, +% \@@_setCJKmonofont:nn} +% 用于设置中文字体的辅助函数,来源于 \pkg{xeCJK} 和 \pkg{ctex} 宏包。 +% \begin{macrocode} +%<*class> +\cs_new_protected:Npn \@@_setCJKmainfont:nn #1#2 + { \@@_set_family:nnn { \CJKrmdefault } {#2} {#1} } +\cs_new_protected:Npn \@@_setCJKsansfont:nn #1#2 + { \@@_set_family:nnn { \CJKsfdefault } {#2} {#1} } +\cs_new_protected:Npn \@@_setCJKmonofont:nn #1#2 + { \@@_set_family:nnn { \CJKttdefault } {#2} {#1} } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_set_cjk_font_kai:nn,\fdu@kai} +% 楷体需要单独设置。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_set_cjk_font_kai:nn #1#2 + { \@@_set_family:nnn { fdu@kai } {#2} {#1} } +\cs_new_protected:Npn \fdu@kai + { \@@_switch_family:n { fdu@kai } } +% \end{macrocode} +% \end{macro} +% +% \changes{v0.7d}{2019/03/29}{在字体未提供对应粗体的情况下,允许使用伪粗。} +% +% \begin{macro}{ +% \@@_cjk_font_options:, +% \@@_setCJKmainfont:n, +% \@@_setCJKsansfont:n, +% \@@_setCJKmonofont:n, +% \@@_set_cjk_font_kai:n} +% 将 bold、italic 和 bold italic 统一按照 roman 设置。 +% \begin{macrocode} +\tl_const:Nn \@@_cjk_font_options: + { UprightFont = *, ItalicFont = *, AutoFakeBold = true } +\cs_new_protected:Npx \@@_setCJKmainfont:n #1 + { \@@_setCJKmainfont:nn {#1} { \@@_cjk_font_options: } } +\cs_new_protected:Npx \@@_setCJKsansfont:n #1 + { \@@_setCJKsansfont:nn {#1} { \@@_cjk_font_options: } } +\cs_new_protected:Npx \@@_setCJKmonofont:n #1 + { \@@_setCJKmonofont:nn {#1} { \@@_cjk_font_options: } } +\cs_new_protected:Npx \@@_set_cjk_font_kai:n #1 + { \@@_set_cjk_font_kai:nn {#1} { \@@_cjk_font_options: } } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_set_family:nnn,\@@_switch_family:n} +% 封装 CJK 字体族的设定和切换命令。 +% \begin{macrocode} +\sys_if_engine_xetex:TF + { + \cs_new_eq:NN \@@_set_family:nnn \xeCJK_set_family:nnn + \cs_new_eq:NN \@@_switch_family:n \xeCJK_switch_family:n + } + { + \cs_new_eq:NN \@@_set_family:nnn \ctex_ltj_set_family:nnn + \cs_new_eq:NN \@@_switch_family:n \ctex_ltj_switch_family:n + } +% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{ +% \setmainfont, +% \setsansfont, +% \setmonofont, +% \setmathfont, +% \setCJKmainfont, +% \setCJKsansfont, +% \setCJKmonofont, +% \@@_set_font:n} +% 重新定义以上宏包提供的字体选择命令。我们把它放在导言区末尾,使得用户配置不被 +% 模板配置覆盖。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_set_font_helper:n #1 + { + \exp_args:Nc \RenewDocumentCommand { set #1 font } { O { } m O { } } + { + \ctex_at_end_preamble:n + { \use:c { @@_set #1 font:nn } {##2} { ##1, ##3 } } + } + } +\clist_map_inline:nn { main, sans, mono, math } { \@@_set_font_helper:n {#1} } +%\clist_map_inline:nn { CJKmain, CJKsans, CJKmono } { \@@_set_font_helper:n {#1} } +% \end{macrocode} +% \end{macro} +% +% \changes{v0.7e}{2019/04/10}{兼容 Libertinus 和 XITS 字体的文件名变动。} +% \begin{macro}{ +% \g_@@_font_family_libertinus_serif_tl, +% \g_@@_font_family_libertinus_sans_tl, +% \g_@@_font_style_libertinus_rm_tl, +% \g_@@_font_style_libertinus_bf_tl, +% \g_@@_font_style_libertinus_it_tl, +% \g_@@_font_style_libertinus_bfit_tl, +% \g_@@_font_style_libertinus_bfsl_tl, +% \g_@@_font_family_xits_tl, +% \g_@@_font_style_xits_rm_tl, +% \g_@@_font_style_xits_bf_tl, +% \g_@@_font_style_xits_it_tl, +% \g_@@_font_style_xits_bfit_tl, +% \g_@@_font_name_libertinus_serif_tl, +% \g_@@_font_name_libertinus_sans_tl, +% \g_@@_font_name_libertinus_math_tl, +% \g_@@_font_name_xits_tl, +% \g_@@_font_name_xits_math_rm_tl, +% \g_@@_font_name_xits_math_bf_tl} +% Libertinus 和 XITS 字体的文件名做过变动,需要特殊处理。 +% \begin{macrocode} +\tl_new:N \g_@@_font_family_libertinus_serif_tl +\tl_new:N \g_@@_font_family_libertinus_sans_tl +\tl_new:N \g_@@_font_style_libertinus_rm_tl +\tl_new:N \g_@@_font_style_libertinus_bf_tl +\tl_new:N \g_@@_font_style_libertinus_it_tl +\tl_new:N \g_@@_font_style_libertinus_bfit_tl +\tl_new:N \g_@@_font_style_libertinus_bfsl_tl +\tl_new:N \g_@@_font_family_xits_tl +\tl_new:N \g_@@_font_style_xits_rm_tl +\tl_new:N \g_@@_font_style_xits_bf_tl +\tl_new:N \g_@@_font_style_xits_it_tl +\tl_new:N \g_@@_font_style_xits_bfit_tl +\tl_new:N \g_@@_font_name_libertinus_serif_tl +\tl_new:N \g_@@_font_name_libertinus_sans_tl +\tl_new:N \g_@@_font_name_libertinus_math_tl +\tl_new:N \g_@@_font_name_xits_tl +\tl_new:N \g_@@_font_name_xits_math_rm_tl +\tl_new:N \g_@@_font_name_xits_math_bf_tl +\fontspec_font_if_exist:nTF { LibertinusSerif-Regular.otf } + { + \tl_set:Nn \g_@@_font_family_libertinus_serif_tl { LibertinusSerif } + \tl_set:Nn \g_@@_font_family_libertinus_sans_tl { LibertinusSans } + \tl_set:Nn \g_@@_font_family_libertinus_math_tl { LibertinusMath } + \tl_set:Nn \g_@@_font_style_libertinus_rm_tl { Regular } + \tl_set:Nn \g_@@_font_style_libertinus_bf_tl { Bold } + \tl_set:Nn \g_@@_font_style_libertinus_it_tl { Italic } + \tl_set:Nn \g_@@_font_style_libertinus_bfit_tl { BoldItalic } + \tl_set:Nn \g_@@_font_style_libertinus_bfsl_tl { BoldOblique } + } + { + \tl_set:Nn \g_@@_font_family_libertinus_serif_tl { libertinusserif } + \tl_set:Nn \g_@@_font_family_libertinus_sans_tl { libertinussans } + \tl_set:Nn \g_@@_font_family_libertinus_math_tl { libertinusmath } + \tl_set:Nn \g_@@_font_style_libertinus_rm_tl { regular } + \tl_set:Nn \g_@@_font_style_libertinus_bf_tl { bold } + \tl_set:Nn \g_@@_font_style_libertinus_it_tl { italic } + \tl_set:Nn \g_@@_font_style_libertinus_bfit_tl { bolditalic } + \tl_set:Nn \g_@@_font_style_libertinus_bfsl_tl { bolditalic } + } +\fontspec_font_if_exist:nTF { XITS-Regular.otf } + { + \tl_set:Nn \g_@@_font_family_xits_tl { XITS } + \tl_set:Nn \g_@@_font_style_xits_rm_tl { Regular } + \tl_set:Nn \g_@@_font_style_xits_bf_tl { Bold } + \tl_set:Nn \g_@@_font_style_xits_it_tl { Italic } + \tl_set:Nn \g_@@_font_style_xits_bfit_tl { BoldItalic } + \tl_set:Nn \g_@@_font_name_xits_math_rm_tl { XITSMath-Regular } + \tl_set:Nn \g_@@_font_name_xits_math_bf_tl { XITSMath-Bold } + } + { + \tl_set:Nn \g_@@_font_family_xits_tl { xits } + \tl_set:Nn \g_@@_font_style_xits_rm_tl { regular } + \tl_set:Nn \g_@@_font_style_xits_bf_tl { bold } + \tl_set:Nn \g_@@_font_style_xits_it_tl { italic } + \tl_set:Nn \g_@@_font_style_xits_bfit_tl { bolditalic } + \tl_set:Nn \g_@@_font_name_xits_math_rm_tl { xits-math } + \tl_set:Nn \g_@@_font_name_xits_math_bf_tl { xits-mathbold } + } +\tl_set:Nx \g_@@_font_name_libertinus_serif_tl + { \g_@@_font_family_libertinus_serif_tl - \g_@@_font_style_libertinus_rm_tl } +\tl_set:Nx \g_@@_font_name_libertinus_sans_tl + { \g_@@_font_family_libertinus_sans_tl - \g_@@_font_style_libertinus_rm_tl } +\tl_set:Nx \g_@@_font_name_libertinus_math_tl + { \g_@@_font_family_libertinus_math_tl - \g_@@_font_style_libertinus_rm_tl } +\tl_set:Nx \g_@@_font_name_xits_tl + { \g_@@_font_family_xits_tl - \g_@@_font_style_xits_rm_tl } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_font_garamond:} +% EB Garamond 系列。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_font_garamond: + { + \@@_setmainfont:nn { EBGaramond } + { + Extension = .otf, + UprightFont = *-Regular, + BoldFont = *-Bold, + ItalicFont = *-Italic, + BoldItalicFont = *-BoldItalic + } + \@@_setsansfont:nn { \g_@@_font_family_libertinus_sans_tl } + { + Extension = .otf, + UprightFont = *-\g_@@_font_style_libertinus_rm_tl, + BoldFont = *-\g_@@_font_style_libertinus_bf_tl, + ItalicFont = *-\g_@@_font_style_libertinus_it_tl, + BoldItalicFont = *-\g_@@_font_style_libertinus_bfsl_tl + } + \@@_setmonofont:nn { lmmonolt10 } + { + Extension = .otf, + UprightFont = *-regular, + BoldFont = *-bold, + ItalicFont = *-oblique, + BoldItalicFont = *-boldoblique + } + \@@_setmathfont:nn { Garamond-Math.otf } { } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_font_libertinus:} +% Libertinus 系列。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_font_libertinus: + { + \@@_setmainfont:nn { \g_@@_font_family_libertinus_serif_tl } + { + Extension = .otf, + UprightFont = *-\g_@@_font_style_libertinus_rm_tl, + BoldFont = *-\g_@@_font_style_libertinus_bf_tl, + ItalicFont = *-\g_@@_font_style_libertinus_it_tl, + BoldItalicFont = *-\g_@@_font_style_libertinus_bfit_tl + } + \@@_setsansfont:nn { \g_@@_font_family_libertinus_sans_tl } + { + Extension = .otf, + UprightFont = *-\g_@@_font_style_libertinus_rm_tl, + BoldFont = *-\g_@@_font_style_libertinus_bf_tl, + ItalicFont = *-\g_@@_font_style_libertinus_it_tl, + BoldItalicFont = *-\g_@@_font_style_libertinus_bfsl_tl + } + \@@_setmonofont:nn { lmmonolt10 } + { + Extension = .otf, + UprightFont = *-regular, + BoldFont = *-bold, + ItalicFont = *-oblique, + BoldItalicFont = *-boldoblique + } + \@@_setmathfont:nn { \g_@@_font_name_libertinus_math_tl .otf } { } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_font_lm:} +% Latin Modern 系列。在 \XeLaTeX{} 和 \LuaLaTeX{} 中已作为默认字体,所以仅需 +% 额外处理数学部分。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_font_lm: + { \@@_setmathfont:nn { latinmodern-math.otf } { } } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_font_palatino:} +% Palatino 系列。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_font_palatino: + { + \@@_setmainfont:nn { texgyrepagella } + { + Extension = .otf, + UprightFont = *-regular, + BoldFont = *-bold, + ItalicFont = *-italic, + BoldItalicFont = *-bolditalic + } + \@@_setsansfont:nn { \g_@@_font_family_libertinus_sans_tl } + { + Extension = .otf, + UprightFont = *-\g_@@_font_style_libertinus_rm_tl, + BoldFont = *-\g_@@_font_style_libertinus_bf_tl, + ItalicFont = *-\g_@@_font_style_libertinus_it_tl, + BoldItalicFont = *-\g_@@_font_style_libertinus_bfsl_tl, + Scale = MatchUppercase + } + \@@_setmonofont:nn { lmmonolt10 } + { + Extension = .otf, + UprightFont = *-regular, + BoldFont = *-bold, + ItalicFont = *-oblique, + BoldItalicFont = *-boldoblique + } + \@@_setmathfont:nn { texgyrepagella-math.otf } { } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_font_times:} +% Times 系列。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_font_times: + { + \@@_setmainfont:nn { \g_@@_font_family_xits_tl } + { + Extension = .otf, + UprightFont = *-\g_@@_font_style_xits_rm_tl, + BoldFont = *-\g_@@_font_style_xits_bf_tl, + ItalicFont = *-\g_@@_font_style_xits_it_tl, + BoldItalicFont = *-\g_@@_font_style_xits_bfit_tl + } + \@@_setsansfont:nn { texgyreheros } + { + Extension = .otf, + UprightFont = *-regular, + BoldFont = *-bold, + ItalicFont = *-italic, + BoldItalicFont = *-bolditalic + } + \@@_setmonofont:nn { texgyrecursor } + { + Extension = .otf, + UprightFont = *-regular, + BoldFont = *-bold, + ItalicFont = *-italic, + BoldItalicFont = *-bolditalic, + Ligatures = CommonOff + } + \@@_setmathfont:nn { \g_@@_font_name_xits_math_rm_tl .otf } + { BoldFont = \g_@@_font_name_xits_math_bf_tl .otf } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_font_times*:} +% Times* 系列,出数学部分外采用系统字体。 +% \begin{macrocode} +\cs_new_protected:cpn { @@_load_font_ times* : } + { + \@@_setmainfont:nn { Times~ New~ Roman } { } + \@@_setsansfont:nn { Arial } { } + \@@_setmonofont:nn { Courier~ New } { } + \@@_setmathfont:nn { \g_@@_font_name_xits_math_rm_tl .otf } + { BoldFont = \g_@@_font_name_xits_math_bf_tl .otf } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_cjk_font_adobe:} +% Adobe 字库。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_cjk_font_adobe: + { + \@@_setCJKmainfont:n { AdobeSongStd-Light } + \@@_setCJKsansfont:n { AdobeHeitiStd-Regular } + \@@_setCJKmonofont:n { AdobeFangsongStd-Regular } + \@@_set_cjk_font_kai:n { AdobeKaitiStd-Regular } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_cjk_font_fandol:} +% Fandol 字库。注意它是安装在 TeX 发行版中的,所以使用文件名调用。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_cjk_font_fandol: + { + \@@_setCJKmainfont:nn { FandolSong } + { + Extension = .otf, + UprightFont = *-Regular, + BoldFont = *-Bold, + ItalicFont = *-Regular, + BoldItalicFont = *-Bold + } + \@@_setCJKsansfont:nn { FandolHei } + { + Extension = .otf, + UprightFont = *-Regular, + BoldFont = *-Bold, + ItalicFont = *-Regular, + BoldItalicFont = *-Bold + } + \@@_setCJKmonofont:nn { FandolFang } + { + Extension = .otf, + UprightFont = *-Regular, + BoldFont = *-Regular, + ItalicFont = *-Regular, + BoldItalicFont = *-Regular + } + \@@_set_cjk_font_kai:nn { FandolKai } + { + Extension = .otf, + UprightFont = *-Regular, + BoldFont = *-Regular, + ItalicFont = *-Regular, + BoldItalicFont = *-Regular + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_cjk_font_founder:} +% 方正字库。虽然有粗体(方正小标宋)等,但并非免费,故这里不做处理。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_cjk_font_founder: + { + \@@_setCJKmainfont:n { FZShuSong-Z01 } + \@@_setCJKsansfont:n { FZHei-B01 } + \@@_setCJKmonofont:n { FZFangSong-Z02 } + \@@_set_cjk_font_kai:n { FZKai-Z03 } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_cjk_font_mac:} +% macOS 自带中文字体。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_cjk_font_mac: + { + \@@_setCJKmainfont:nn { STSongti-SC } + { + UprightFont = *-Light, + BoldFont = *-Bold, + ItalicFont = *-Light, + BoldItalicFont = *-Bold + } + \@@_setCJKsansfont:nn { STHeitiSC } + { + UprightFont = *-Medium, + BoldFont = *-Medium, + ItalicFont = *-Medium, + BoldItalicFont = *-Medium + } + \@@_setCJKmonofont:n { STFangsong } + \@@_set_cjk_font_kai:nn { STKaitiSC } + { + UprightFont = *-Regular, + BoldFont = *-Bold, + ItalicFont = *-Regular, + BoldItalicFont = *-Bold + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_cjk_font_sinotype:} +% 华文字库。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_cjk_font_sinotype: + { + \@@_setCJKmainfont:n { STSong } + \@@_setCJKsansfont:n { STHeiti } + \@@_setCJKmonofont:n { STFangsong } + \@@_set_cjk_font_kai:n { STKaiti } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_cjk_font_sourcehan:} +% 思源宋体、思源黑体。由于没有对应的楷体和仿宋,这里直接给出警告。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_cjk_font_sourcehan: + { + \@@_setCJKmainfont:nn { SourceHanSerifSC } + { + UprightFont = *-Regular, + BoldFont = *-Bold, + ItalicFont = *-Regular, + BoldItalicFont = *-Bold + } + \@@_setCJKsansfont:nn { SourceHanSansSC } + { + UprightFont = *-Regular, + BoldFont = *-Bold, + ItalicFont = *-Regular, + BoldItalicFont = *-Bold + } + \@@_warning:n { source-han } + } +\@@_msg_new:nn { source-han } + { Font~ set~ `sourcehan'~ does~ not~ contain~ kaiti~ and~ fangsong. } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_cjk_font_windows:} +% Windows 自带中文字体。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_cjk_font_windows: + { + \@@_setCJKmainfont:n { SimSun } + \@@_setCJKsansfont:n { SimHei } + \@@_setCJKmonofont:n { FangSong } + \@@_set_cjk_font_kai:n { KaiTi } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_load_font:} +% 字体加载命令。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_load_font: + { + \use:c { @@_load_font_ \g_@@_fontset_tl : } +% \use:c { @@_load_cjk_font_ \g_@@_cjk_fontset_tl : } + } +\ctex_at_end_preamble:n { \@@_load_font: } +% \end{macrocode} +% \end{macro} +% +%^^A 以下相关代码已在 v0.7c 中移除。 +% \changes{v0.5}{2017/09/09}{重新实现字体调用。核心内容是分离字体的声明与设定, +% 并按照宋、黑、仿、楷划分中文字体。} +% \changes{v0.6}{2017/11/11}{额外处理 XITS 字体的小型大写字母。} +% \changes{v0.5}{2017/09/23}{新增 \kvopt{font}{none} 选项。} +% \changes{v0.5}{2017/09/23}{新增 \kvopt{cjk-font}{none} 选项。} +% \changes{v0.5}{2017/09/23}{同步 \pkg{fontspec} v2.6e。} +% \changes{v0.6}{2017/10/11}{同步 \pkg{unicode-math} v0.8h。} +% +% \subsection{数学字体设置} +% +% 根据 GB 3102.11--93 以及 ISO 80000-2:2009 的规定,数学表达式中 +% 表示变量的拉丁字母和希腊字母均应当使用斜体。 +% 这里的 |\keys_set:nn{unicode-math}| 实际相当于 \cs{unimathsetup}。 +% \begin{macrocode} +% TODO: (2018-01-19) Do we need `mathrm=sym`? +\keys_set:nn { unicode-math } + { + math-style = ISO, + bold-style = ISO, +% mathrm = sym + } +% \end{macrocode} +% +% \subsection{字号} +% +% \begin{macrocode} +\keys_define:nn { fdu / style } + { +% \end{macrocode} +% +% \begin{macro}{style/font-size} +% |font-size| 不是文档类选项,不能传给 \cls{ctexbook} 文档类,因此 +% 只能手动重定义字号命令。 +% \begin{macrocode} + font-size .choice:, + font-size .value_required:n = true, + font-size / -4 .code:n = { }, +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\tiny,\scriptsize,\footnotesize,\small, +% \normalsize,\large,\Large,\LARGE,\huge,\Huge} +% 默认使用小四号字,所以只有五号字需要重新设置。 +% \begin{macrocode} + font-size / 5 .code:n = + { + \RenewDocumentCommand \tiny { } { \zihao { 7 } } + \RenewDocumentCommand \scriptsize { } { \zihao { -6 } } + \RenewDocumentCommand \footnotesize { } { \zihao { 6 } } + \RenewDocumentCommand \small { } { \zihao { -5 } } + \RenewDocumentCommand \normalsize { } { \zihao { 5 } } + \RenewDocumentCommand \large { } { \zihao { -4 } } + \RenewDocumentCommand \Large { } { \zihao { -3 } } + \RenewDocumentCommand \LARGE { } { \zihao { -2 } } + \RenewDocumentCommand \huge { } { \zihao { 2 } } + \RenewDocumentCommand \Huge { } { \zihao { 1 } } +% } +% } +%<*class> + }, +% \end{macrocode} +% \end{macro} +% +% \subsection{句号} +% +% \begin{macro}{style/fullwidth-stop} +% \changes{v0.6}{2017/10/14}{支持类别码和 TECKit 映射两种机制。} +% 设置句号形状(圆圈或是圆点)。 +% \begin{macrocode} + fullwidth-stop .choice:, + fullwidth-stop .value_required:n = true, +% \end{macrocode} +% 利用类别码机制切换,只有显式的\FSID 会被替换。 +% \begin{macrocode} + fullwidth-stop / catcode .code:n = + { \@@_set_fullwidth_stop_catcode: }, +% \end{macrocode} +% 利用 TECKit 映射机制切换,相当于设置了 \tn{defaultCJKfontfeatures} +% |{|\kvopt{Map\-ping}{fullwidth-stop}|}|。这种手段会替换所有出现的\FSID, +% 并且将影响所有字体。只在 \XeTeX{} 下可用。 +% \begin{macrocode} + fullwidth-stop / mapping .code:n = + { + \sys_if_engine_xetex:TF + { + \clist_gset:Nn \g__xeCJK_default_features_clist + { Mapping = fullwidth-stop } + } + { +% \end{macrocode} +% \LuaTeX{} 下改用类别码机制代替,并给出警告。 +% \begin{macrocode} + \sys_if_engine_luatex:T + { + \@@_warning:n { mapping-not-available } + \@@_set_fullwidth_stop_catcode: + } + } + }, + fullwidth-stop / false .code:n = { } + } +% \end{macrocode} +% \end{macro} +% +% 提示信息。 +% \begin{macrocode} +\@@_msg_new:nn { mapping-not-available } + { + Option~ "fullwidth-stop = mapping"~ is~ not~ available~ in~ LuaTeX. \\ + "fullwidth-stop = catcode"~ will~ be~ set~ instead. + } +% \end{macrocode} +% +% \begin{macro}{\@@_set_fullwidth_stop_catcode:} +% 将\FSID 设置为活动符,并定义为句点\FSFW。 +% \begin{macrocode} +\cs_new:Npn \@@_set_fullwidth_stop_catcode: + { + \char_set_active_eq:nN { "3002 } \c_@@_fwid_full_stop_tl + \char_set_catcode_active:n { "3002 } + } +% +% \end{macrocode} +% \end{macro} +% +% \changes{v0.6}{2017/10/28}{优化 \LuaTeX{} 下希腊字母、西里尔字母和带圈数字的 +% 显示(\pkg{ctex} v2.4.11 已默认进行处理)。} +% +% \end{implementation} +% diff --git a/source/fduthesis-footnote.dtx b/source/fduthesis-footnote.dtx new file mode 100644 index 0000000..b4408e3 --- /dev/null +++ b/source/fduthesis-footnote.dtx @@ -0,0 +1,290 @@ +% \iffalse meta-comment +% +% Copyright (C) 2017--2019 by Xiangdong Zeng +% +% This work may be distributed and/or modified under the conditions of the +% LaTeX Project Public License, either version 1.3c of this license or (at +% your option) any later version. The latest version of this license is in: +% +% http://www.latex-project.org/lppl.txt +% +% and version 1.3 or later is part of all distributions of LaTeX version +% 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Xiangdong Zeng. +% +% \fi +% +% \begin{implementation} +% +% \section{脚注} +% +% \changes{v0.3}{2017/02/21}{支持脚注。} +% +% \subsection{编号样式} +% +% 各种脚注编号样式的名称。 +% \begin{macrocode} +\clist_map_inline:nn + { + { plain } { plain }, + { libertinus } { libertinus }, + { libertinus_neg } { libertinus* }, + { libertinus_sans } { libertinus-sans }, + { pifont } { pifont }, + { pifont_neg } { pifont* }, + { pifont_sans } { pifont-sans }, + { pifont_sans_neg } { pifont-sans* }, + { xits } { xits }, + { xits_sans } { xits-sans }, + { xits_sans_neg } { xits-sans* } + } + { \@@_define_fn_style:nn #1 } +% \end{macrocode} +% +% \begin{variable}{\l_@@_fn_style_tl} +% 保存当前使用的脚注编号样式。 +% \begin{macrocode} +\tl_new:N \l_@@_fn_style_tl +% \end{macrocode} +% \end{variable} +% +% \begin{macrocode} +\keys_define:nn { fdu / style } + { +% \end{macrocode} +% +% \begin{macro}{style/footnote-style} +% 脚注类型共分四大类: +% \begin{itemize} +% \item \opt{plain}:使用当前字体; +% \item \opt{libertinus}:取自 Libertinus Serif 和 Libertinus Sans +% 字体; +% \item \opt{pifont}:使用 \pkg{pifont} 宏包; +% \item \opt{xits}:取自 XITS 字体。 +% \end{itemize} +% 不带任何修饰的为衬线阳文符号,带“|sans|”的为无衬线符号,带“|*|”的 +% 为阴文版本。 +% \begin{macrocode} + footnote-style .choices:nn = + { + plain, + libertinus, libertinus*, libertinus-sans, + pifont, pifont*, pifont-sans, pifont-sans*, + xits, xits-sans, xits-sans* + } +% \end{macrocode} +% \changes{v0.6}{2017/11/12}{不再依赖 XITS-Math 字体。} +% 若使用 \opt{pifont} 类型,则需引入 \pkg{pifont} 宏包。 +% \begin{macrocode} + { + \tl_gset_eq:NN \l_@@_fn_style_tl \l_keys_choice_tl + \int_compare:nT { 5 <= \l_keys_choice_int <= 8 } + { \RequirePackage { pifont } } + }, + footnote-style .value_required:n = true + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_fn_symbol_libertinus:n} +% \opt{libertinus} 普通版。\numrange{1}{20} 为数字,\numrange{21}{46} +% 为小写英文字母,\numrange{47}{72} 为大写英文字母。 +% \begin{macrocode} +\cs_new:Npn \@@_fn_symbol_libertinus:n #1 + { + \int_compare:nTF { #1 >= 21 } + { + \int_compare:nTF { #1 >= 47 } + { \@@_symbol:n { \int_eval:n { "24B6 - 47 + #1 } } } + { \@@_symbol:n { \int_eval:n { "24D0 - 21 + #1 } } } + } + { \@@_symbol:n { \int_eval:n { "2460 - 1 + #1 } } } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_fn_symbol_libertinus_neg:n} +% \opt{libertinus} 阴文衬线版。只含 \numrange{1}{20}。 +% \begin{macrocode} +\cs_new:Npn \@@_fn_symbol_libertinus_neg:n #1 + { + \int_compare:nTF { #1 >= 11 } + { \@@_symbol:n { \int_eval:n { "24EB - 11 + #1 } } } + { \@@_symbol:n { \int_eval:n { "2776 - 1 + #1 } } } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_fn_symbol_libertinus_sans:n} +% \opt{libertinus} 阳文无衬线版。符号排列与普通版相同。 +% \begin{macrocode} +\cs_new_eq:NN \@@_fn_symbol_libertinus_sans:n \@@_fn_symbol_libertinus:n +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_fn_symbol_pifont:n} +% \opt{pifont} 普通版。以下四种都只包含 \numrange{1}{10}。 +% \begin{macrocode} +\cs_new:Npn \@@_fn_symbol_pifont:n #1 + { \ding { \int_eval:n { 171 + #1 } } } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_fn_symbol_pifont_neg:n} +% \opt{pifont} 阴文衬线版。 +% \begin{macrocode} +\cs_new:Npn \@@_fn_symbol_pifont_neg:n #1 + { \ding { \int_eval:n { 181 + #1 } } } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_fn_symbol_pifont_sans:n} +% \opt{pifont} 阳文无衬线版。 +% \begin{macrocode} +\cs_new:Npn \@@_fn_symbol_pifont_sans:n #1 + { \ding { \int_eval:n { 191 + #1 } } } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_fn_symbol_pifont_sans_neg:n} +% \opt{pifont} 阴文无衬线版。 +% \begin{macrocode} +\cs_new:Npn \@@_fn_symbol_pifont_sans_neg:n #1 + { \ding { \int_eval:n { 201 + #1 } } } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_fn_symbol_xits:n} +% \opt{xits} 普通版。\numrange{1}{9} 为数字,\numrange{10}{35} +% 为小写英文字母,\numrange{36}{61} 为大写英文字母。 +% \begin{macrocode} +\cs_new:Npn \@@_fn_symbol_xits:n #1 + { + \int_compare:nTF { #1 >= 10 } + { + \int_compare:nTF { #1 >= 36 } + { \@@_symbol:n { \int_eval:n { "24B6 - 36 + #1 } } } + { \@@_symbol:n { \int_eval:n { "24D0 - 10 + #1 } } } + } + { \@@_symbol:n { \int_eval:n { "2460 - 1 + #1 } } } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_fn_symbol_xits_sans:n} +% \opt{xits} 阳文无衬线版。只包含 \numrange{1}{10}。 +% \begin{macrocode} +\cs_new:Npn \@@_fn_symbol_xits_sans:n #1 + { \@@_symbol:n { \int_eval:n { "2780 - 1 + #1 } } } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_fn_symbol_xits_sans_neg:n} +% \opt{xits} 阴文无衬线版。也只包含 \numrange{1}{10}。 +% \begin{macrocode} +\cs_new:Npn \@@_fn_symbol_xits_sans_neg:n #1 + { \@@_symbol:n { \int_eval:n { "278A - 1 + #1 } } } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\thefootnote} +% \changes{v0.7}{2018/01/17}{改为可完全展开的命令。} +% 重定义脚注编号。 +% \begin{macrocode} +\cs_set:Npn \thefootnote { \fdu_footnote_number:N \c@footnote } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fdu_footnote_number:N} +% 脚注编号样式。 +% \begin{macrocode} +\cs_new:Npn \fdu_footnote_number:N #1 + { + \tl_case:NnF \l_@@_fn_style_tl + { +% \end{macrocode} +% \opt{plain} 类型直接使用计数器 |footnote| 的值。 +% \begin{macrocode} + \c_@@_fn_style_plain_tl + { \int_use:N #1 } +% \end{macrocode} +% \opt{libertinus} 类型需要使用 Libertinus Serif 或 +% Libertinus Sans 字体。 +% \begin{macrocode} + \c_@@_fn_style_libertinus_tl + { + \fontspec { \g_@@_font_name_libertinus_serif_tl .otf } + \@@_fn_symbol_libertinus:n {#1} + } + \c_@@_fn_style_libertinus_neg_tl + { + \fontspec { \g_@@_font_name_libertinus_serif_tl .otf } + \@@_fn_symbol_libertinus_neg:n {#1} + } + \c_@@_fn_style_libertinus_sans_tl + { + \fontspec { \g_@@_font_name_libertinus_sans_tl .otf } + \@@_fn_symbol_libertinus_sans:n {#1} + } +% \end{macrocode} +% \opt{pifont} 类型无需进行额外的操作。 +% \begin{macrocode} + \c_@@_fn_style_pifont_tl + { \@@_fn_symbol_pifont:n {#1} } + \c_@@_fn_style_pifont_neg_tl + { \@@_fn_symbol_pifont_neg:n {#1} } + \c_@@_fn_style_pifont_sans_tl + { \@@_fn_symbol_pifont_sans:n {#1} } + \c_@@_fn_style_pifont_sans_neg_tl + { \@@_fn_symbol_pifont_sans_neg:n {#1} } +% \end{macrocode} +% \opt{xits} 类型需要临时切换数学字体。 +% \begin{macrocode} + \c_@@_fn_style_xits_tl + { + \fontspec { \g_@@_font_name_xits_tl .otf } + \@@_fn_symbol_xits:n {#1} + } + \c_@@_fn_style_xits_sans_tl + { + \fontspec { \g_@@_font_name_xits_tl .otf } + \@@_fn_symbol_xits_sans:n {#1} + } + \c_@@_fn_style_xits_sans_neg_tl + { + \fontspec { \g_@@_font_name_xits_tl .otf } + \@@_fn_symbol_xits_sans_neg:n {#1} + } + } +% \end{macrocode} +% 变量 \cs{l_@@_fn_style_tl} 保存的类型未知时,默认使用 \opt{plain} +% 类型。 +% \begin{macrocode} + { \int_use:N #1 } + } +% \end{macrocode} +% \end{macro} +% +% \subsection{整体样式} +% +% \begin{macro}[int]{\@makefntext} +% \changes{v0.7}{2018/01/18}{简化实现,兼容 \pkg{fancyvrb} 宏包。 +% 不再使用悬挂缩进。} +% 重定义内部脚注文字命令,使脚注编号不使用上标,宽度为 \SI{1.5}{em}。 +% 见 \url{http://tex.stackexchange.com/q/19844} 和 +% \url{https://www.zhihu.com/question/53030087}。 +% \begin{macrocode} +\cs_set:Npn \@makefntext #1 + { + \mode_leave_vertical: + \hbox_to_wd:nn { 1.5 em } { \@thefnmark \hfil } + #1 + } +% \end{macrocode} +% \end{macro} +% +% \end{implementation} +% diff --git a/source/fduthesis-front.dtx b/source/fduthesis-front.dtx new file mode 100644 index 0000000..9aee545 --- /dev/null +++ b/source/fduthesis-front.dtx @@ -0,0 +1,230 @@ +% \iffalse meta-comment +% +% Copyright (C) 2017--2019 by Xiangdong Zeng +% +% This work may be distributed and/or modified under the conditions of the +% LaTeX Project Public License, either version 1.3c of this license or (at +% your option) any later version. The latest version of this license is in: +% +% http://www.latex-project.org/lppl.txt +% +% and version 1.3 or later is part of all distributions of LaTeX version +% 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Xiangdong Zeng. +% +% \fi +% +% \begin{implementation} +% +% \section{目录} +% +% 设置目录标题。 +% \begin{macrocode} +\keys_set:nn { ctex } + { +% contentsname = \c_@@_name_toc_tl, +% listfigurename = \c_@@_name_lof_tl, +% listtablename = \c_@@_name_lot_tl, +% \end{macrocode} +% +% 设置目录中章节标题的样式。 +% \begin{macrocode} + chapter / tocline = + { +% \normalfont \sffamily +% \bfseries + \CTEXnumberline {#1} #2 + }, + section / tocline = + { +% \bfseries + \CTEXnumberline {#1} #2 + }, + subsection / tocline = + { +% \fdu@kai + \CTEXnumberline {#1} #2 + } + } +% \end{macrocode} +% +% \changes{v0.7e}{2019/05/12}{增加对插图、表格目录的处理。} +% +% \begin{macro}{\tableofcontents,\listoffigures,\listoftables} +% 修改 \cs{tableofcontents}、\cs{listoffigures} 和 \cs{listoftables} 的定义, +% 使得页眉正确显示,并出现在目录及 PDF 书签中。来自于 \LaTeXe{} 标准文档类 +% \file{book.cls} +% \footnote{原代码中只有 \cs{tableofcontents} 的 \cs{@mkboth} 出现在 +% \cs{chapter*} 内部,这是出于兼容性的考虑而非 typo。}。 +% \begin{macrocode} +\@@_patch_cmd:Nnn \tableofcontents + { + \chapter*{\contentsname + \@mkboth{\MakeUppercase\contentsname} + {\MakeUppercase\contentsname}} + } + { \@@_chapter_no_toc:V \contentsname } +\@@_patch_cmd:Nnn \listoffigures + { + \chapter*{\listfigurename} + \@mkboth{\MakeUppercase\listfigurename} + {\MakeUppercase\listfigurename} + } + { \@@_chapter:V \listfigurename } +\@@_patch_cmd:Nnn \listoftables + { + \chapter*{\listtablename} + \@mkboth{\MakeUppercase\listtablename} + {\MakeUppercase\listtablename} + } + { \@@_chapter:V \listtablename } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}[int]{\@starttoc} +% 修改 \tn{@starttoc} 的定义以调整英文模板中的目录行距。 +% \begin{macrocode} +%<*class-en> +\@@_patch_cmd:Nnn \@starttoc + { \begingroup } + { + \begingroup + \@@_line_spread:N \c_@@_line_spread_fp + } +% +% \end{macrocode} +% \end{macro} +% +% \section{摘要} +% +% \begin{environment}{abstract} +% \begin{environment}{abstract*} +% \changes{v0.7}{2018/03/05}{整理代码。} +% 摘要环境。在中文模板定义了中英文双语摘要,但在英文模板中则没有 +% 定义中文摘要。 +% \begin{macrocode} +\NewDocumentEnvironment { abstract } { } +% { \@@_abstract_begin: } { \@@_abstract_end: } +% { \@@_abstract_en_begin: } { \@@_abstract_en_end: } +%<*class> +\NewDocumentEnvironment { abstract* } { } + { \@@_abstract_en_begin: } { \@@_abstract_en_end: } +% +% \end{macrocode} +% \end{environment} +% \end{environment} +% +% \begin{macro}{\@@_abstract_begin:,\@@_abstract_en_begin:} +% 摘要页标题。 +% \begin{macrocode} +%<*class> +\cs_new_protected:Npn \@@_abstract_begin: + { \@@_chapter:V \c_@@_name_abstract_tl } +% +\cs_new_protected:Npn \@@_abstract_en_begin: + { \@@_chapter:V \c_@@_name_abstract_en_tl } +% \end{macrocode} +% \end{macro} +% +% \changes{v0.7d}{2019/03/28}{优化关键字列表的显示。} +% +% \begin{macro}{\@@_abstract_end:,\@@_abstract_en_end:} +% 摘要正文完成后,输出关键字列表和中图分类号(CLC)。 +% \begin{macrocode} +%<*class> +\cs_new_protected:Npn \@@_abstract_end: + { + \@@_keywords:nNn + { \sffamily \c_@@_name_keywords_tl \c_@@_fwid_colon_tl } + \l_@@_info_keywords_clist { \c_@@_fwid_semicolon_tl } + \@@_clc:nn + { \sffamily \c_@@_name_clc_tl \c_@@_fwid_colon_tl } + { \l_@@_info_clc_tl } + } +% +\cs_new_protected:Npn \@@_abstract_en_end: + { + \@@_keywords:nNn + { \bfseries \c_@@_name_keywords_en_tl \@@_quad: } + \l_@@_info_keywords_en_clist { ; ~ } + \@@_clc:nn + { \bfseries \c_@@_name_clc_en_tl \@@_quad: } + { \l_@@_info_clc_tl } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_keywords:nNn,\@@_keywords_prevdepth:,\@@_clc:nn} +% 关键字列表前要空一行,使用悬挂缩进;中图分类号不缩进。|\parbox| 之后的间距 +% 需要调整,见 \url{https://tex.stackexchange.com/a/34982}。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_keywords:nNn #1#2#3 + { + \par \mode_leave_vertical: \par \noindent + \@@_get_text_width:Nn \l_@@_tmpa_dim {#1} + \group_begin: #1 \group_end: + \parbox [t] { \dim_eval:n { \textwidth - \l_@@_tmpa_dim } } + { + \clist_use:Nn #2 {#3} \par + \cs_gset:Npx \@@_keywords_prevdepth: { \dim_use:N \tex_prevdepth:D } + } + } +\cs_new_protected:Npn \@@_clc:nn #1#2 + { + \par \tex_prevdepth:D \@@_keywords_prevdepth: \noindent + \group_begin: #1 \group_end: + #2 + } +% \end{macrocode} +% \end{macro} +% +% \section{符号表} +% +% \begin{environment}{notation} +% \changes{v0.7}{2018/03/05}{整理代码。} +% 符号表环境,利用 \env{longtable} 封装。可选参数为表格列格式说明符。 +% \begin{macrocode} +\NewDocumentEnvironment { notation } { O { l p { 7.5 cm } } } + { + \@@_notation_begin: + \group_begin: + \@@_notation_long_table_setup: + \longtable {#1} + } + { + \endlongtable + \group_end: + } +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\@@_notation_begin:} +% 符号表页标题。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_notation_begin: + { +% \@@_chapter:V \c_@@_name_notation_tl +% \@@_chapter:V \c_@@_name_notation_en_tl + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_notation_long_table_setup:} +% 调整 \cs{LTpre} 和 \cs{LTpost},以删去 \env{longtable} 前后的空白。 +% 英文模板中还需要调整表格的行距。注意 \tn{arraystretch} 只是一个简单 +% 宏,不能使用 \cs{fp_set:Nn}。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_notation_long_table_setup: + { +% \tl_set:Nn \arraystretch { 1.3 } + \dim_set_eq:NN \LTpre \c_zero_dim + \dim_set_eq:NN \LTpost \c_zero_dim + } +% \end{macrocode} +% \end{macro} +% +% \end{implementation} +% diff --git a/source/fduthesis-hyperref.dtx b/source/fduthesis-hyperref.dtx new file mode 100644 index 0000000..77ff9e6 --- /dev/null +++ b/source/fduthesis-hyperref.dtx @@ -0,0 +1,208 @@ +% \iffalse meta-comment +% +% Copyright (C) 2017--2019 by Xiangdong Zeng +% +% This work may be distributed and/or modified under the conditions of the +% LaTeX Project Public License, either version 1.3c of this license or (at +% your option) any later version. The latest version of this license is in: +% +% http://www.latex-project.org/lppl.txt +% +% and version 1.3 or later is part of all distributions of LaTeX version +% 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Xiangdong Zeng. +% +% \fi +% +% \begin{implementation} +% +% \section{\pkg{hyperref} 相关配置} +% +% \changes{v0.4}{2017/08/13}{新增 \pkg{hyperref} 相关配置,包括超链接 +% 样式(\opt{style/hyperlink} 与 \opt{style/hyperlink-color} 选项) +% 及 PDF 元信息等。} +% \changes{v0.7}{2018/01/23}{将 \pkg{hyperref} 相关配置移至模板末尾, +% 以减少冲突。} +% +% \begin{macro}{\hypersetup,\fdu_hyperref_setup:n} +% \pkg{hyperref} 宏包是在导言区之后才引入的。若要在导言区中使用 +% \tn{hypersetup} 命令,必须另行定义。 +% \begin{macrocode} +\NewDocumentCommand \hypersetup { m } + { \fdu_hyperref_setup:n {#1} } +\cs_new_protected:Npn \fdu_hyperref_setup:n #1 + { \clist_gput_right:Nn \g_@@_to_hyperref_clist {#1} } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_set_hyperlink_color_key:n} +% 设置超链接颜色选项。最后的逗号用于确保 \pkg{l3keys} 可以正确解析,不能省去。 +% \begin{macrocode} +\cs_new:Npn \@@_set_hyperlink_color_key:n #1 + { + hyperlink-color / \clist_item:nn {#1} {1} .code:n = + { + \@@_define_hyperlink_color:nnn + { \clist_item:nn {#1} {2} } + { \clist_item:nn {#1} {3} } + { \clist_item:nn {#1} {4} } + \fdu_hyperref_setup:n + { + linkcolor = fdu@link, linkbordercolor = fdu@link, + urlcolor = fdu@url, urlbordercolor = fdu@url, + citecolor = fdu@cite, citebordercolor = fdu@cite + } + }, + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_define_hyperlink_color:nnn} +% 定义超链接颜色。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_define_hyperlink_color:nnn #1#2#3 + { + \definecolorset { HTML } { fdu@ } { } + { link, #1; url, #2; cite, #3 } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\keys_define:nx { fdu / style } + { +% \end{macrocode} +% +% \begin{macro}{style/hyperlink} +% 超链接样式。 +% \begin{macrocode} + hyperlink .choice:, + hyperlink .value_required:n = true, + hyperlink / border .code:n = { }, + hyperlink / color .code:n = + { \fdu_hyperref_setup:n { colorlinks = true } }, + hyperlink / none .code:n = + { \fdu_hyperref_setup:n { hidelinks = true } }, +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{style/hyperlink-color} +% 超链接颜色。 +% \begin{macrocode} + hyperlink-color .choice:, + hyperlink-color .value_required:n = true, + \clist_map_function:nN + { + { autumn, D70000, D75F00, AF8700 }, + { business, D14542, 295497, 1F6E43 }, + { classic, FF0000, 0000FF, 00FF00 }, + { default, 990000, 0000B2, 007F00 }, + { elegant, 961212, C31818, 9B764F }, + { fantasy, FF4A19, FF3F94, 934BA1 }, + { material, E91E63, 009688, 4CAF50 }, + { science, CA0619, 389F9D, FF8920 }, + { summer, 00AFAF, 5F5FAF, 5F8700 }, + { graylevel, 616161, 616161, 616161 }, + { prl, 2D3092, 2D3092, 2D3092 } + } + \@@_set_hyperlink_color_key:n + } +% \end{macrocode} +% \end{macro} +% +% \changes{v0.6}{2017/10/29}{优化 URL 断行设置。} +% +% \begin{macro}{\fdu_allow_url_break:,\@@_add_url_break_points:} +% 允许 URL 在字母、数字和一些特殊符号处断行。见 +% \url{https://bit.ly/2hhIjLW}。 +% \begin{macrocode} +\cs_new:Npn \fdu_allow_url_break: + { + \cs_new:Npn \@@_add_url_break_points: + { \tl_map_function:NN \c_@@_url_break_points_tl \do } + \@@_appto_cmd:Nn \UrlBreaks + { \UrlOrds \@@_add_url_break_points: } + } +% \end{macrocode} +% \end{macro} +% +% \begin{variable}{\c_@@_url_break_points_tl} +% 额外的断行位置是 26 个英文字母(大小写)以及 10 个阿拉伯数字。 +% \pkg{url} 提供的宏 \tn{UrlBreaks} 还包含了特殊符号 |*|、|-|、 +% |~|、|'|、|"|、|-|,也被设置为允许断行。 +% \begin{macrocode} +\tl_const:Nn \c_@@_url_break_points_tl + { + abcdefghijklmnopqrstuvwxyz + ABCDEFGHIJKLMNOPQRSTUVWXYZ + 0123456789 + } +% \end{macrocode} +% \end{variable} +% +% \changes{v0.7e}{2019/04/23}{处理 \pkg{hyperref} 与 \pkg{unicode-math} 的兼容性问题。} +% +% 在导言区末尾引入 \pkg{hyperref} 宏包。 +% \begin{macrocode} +\ctex_at_end_preamble:n + { + \RequirePackage { hyperref } +% \end{macrocode} +% 此后 \tn{hypersetup} 命令由 \pkg{hyperref} 宏包接管。 +% \begin{macrocode} + \hypersetup + { + bookmarksnumbered = true, + psdextra = true, + unicode = true, +% \end{macrocode} +% 填写 PDF 元信息。 +% \begin{macrocode} +%<*class> + pdftitle = \l_@@_info_title_tl, + pdfauthor = \l_@@_info_author_tl, + pdfkeywords = \l_@@_info_keywords_clist, +% +%<*class-en> + pdftitle = \l_@@_info_title_en_tl, + pdfauthor = \l_@@_info_author_en_tl, + pdfkeywords = \l_@@_info_keywords_en_clist, +% +% pdfsubject = , + pdfcreator = \c_@@_name_pdf_creator_tl + } +% \end{macrocode} +% 将导言区中通过 \cs{fdu_hyperref_setup:n} 进行的设置传入 +% \tn{hypersetup}。 +% \begin{macrocode} + \exp_args:NV \hypersetup \g_@@_to_hyperref_clist +% \end{macrocode} +% URL 断行处理。 +% \begin{macrocode} + \fdu_allow_url_break: +% \end{macrocode} +% 手动开启 \pkg{biblatex} 的 \pkg{hyperref} 支持。 +% \begin{macrocode} + \bool_if:NF \l_@@_bibtex_bool { \BiblatexManualHyperrefOn } + } +% \end{macrocode} +% +% 在 PDF 字符串中设置 \tn{fdu@kai} 命令为空,以抑制 \pkg{hyperref} +% 的警告信息。 +% \begin{macrocode} +\ctex_at_end_package:nn { hyperref } + { + \pdfstringdefDisableCommands + { + \cs_set_eq:NN \fdu@kai \prg_do_nothing: + \cs_set_eq:NN \quad \c_space_tl + \cs_set_eq:NN \qquad \c_space_tl + } + } +% \end{macrocode} +% +% \end{implementation} +% diff --git a/source/fduthesis-interface.dtx b/source/fduthesis-interface.dtx new file mode 100644 index 0000000..d4542ae --- /dev/null +++ b/source/fduthesis-interface.dtx @@ -0,0 +1,294 @@ +% \iffalse meta-comment +% +% Copyright (C) 2017--2019 by Xiangdong Zeng +% +% This work may be distributed and/or modified under the conditions of the +% LaTeX Project Public License, either version 1.3c of this license or (at +% your option) any later version. The latest version of this license is in: +% +% http://www.latex-project.org/lppl.txt +% +% and version 1.3 or later is part of all distributions of LaTeX version +% 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Xiangdong Zeng. +% +% \fi +% +% \begin{implementation} +% +% \begin{macrocode} +%<@@=fdu> +%<*class|class-en> +% \end{macrocode} +% +% \section{用户接口} +% +% \begin{macro}{info,style} +% 定义元(meta)键值对。 +% \begin{macrocode} +\keys_define:nn { fdu } + { + info .meta:nn = { fdu / info } {#1}, + style .meta:nn = { fdu / style } {#1} + } +% \end{macrocode} +% \end{macro} +% +% 文档类初始设置。 +% \begin{macrocode} +\keys_set:nn { fdu } + { + style / font = times, +% style / cjk-font = fandol, + style / font-size = -4, +% style / fullwidth-stop = false, + style / auto-make-cover = true, + style / logo = { fudan-name.pdf }, + style / logo-size = { 0.5 \textwidth }, + style / hyperlink = color, + style / hyperlink-color = default, + style / bib-style = numerical, + info / degree = academic, + info / secret-level = none, + info / school-id = { 10246 }, + info / date = { \zhtoday }, +% theorem / header-font = { \sffamily }, +% theorem / header-font = { \bfseries \upshape }, +% theorem / body-font = { \fdu@kai }, +% theorem / body-font = { \itshape }, + theorem / counter = { chapter } + } +% \end{macrocode} +% +% \begin{macro}{\fdusetup} +% 用户设置接口。 +% \begin{macrocode} +\NewDocumentCommand \fdusetup { m } + { \keys_set:nn { fdu } {#1} } +% \end{macrocode} +% \end{macro} +% +% \begin{environment}{proof} +% \begin{environment}{axiom} +% \begin{environment}{corollary} +% \begin{environment}{definition} +% \begin{environment}{example} +% \begin{environment}{lemma} +% \begin{environment}{theorem} +% 模板预定义的常用数学环境。 +% 其中的“证明”比较特殊,它不编号,但会添加证毕符号。 +% \begin{macrocode} +%<*class> +\newtheorem* { proof } { \c_@@_name_proof_tl } +\newtheorem { axiom } { \c_@@_name_axiom_tl } +\newtheorem { corollary } { \c_@@_name_corollary_tl } +\newtheorem { definition } { \c_@@_name_definition_tl } +\newtheorem { example } { \c_@@_name_example_tl } +\newtheorem { lemma } { \c_@@_name_lemma_tl } +\newtheorem { theorem } { \c_@@_name_theorem_tl } +% +%<*class-en> +\newtheorem* { proof } { \c_@@_name_proof_en_tl } +\newtheorem { axiom } { \c_@@_name_axiom_en_tl } +\newtheorem { corollary } { \c_@@_name_corollary_en_tl } +\newtheorem { definition } { \c_@@_name_definition_en_tl } +\newtheorem { example } { \c_@@_name_example_en_tl } +\newtheorem { lemma } { \c_@@_name_lemma_en_tl } +\newtheorem { theorem } { \c_@@_name_theorem_en_tl } +% +% +% \end{macrocode} +% \end{environment} +% \end{environment} +% \end{environment} +% \end{environment} +% \end{environment} +% \end{environment} +% \end{environment} +% +% \section{模板参数配置文件} +% +% \changes{v0.3}{2017/06/27}{分离文档类与参数配置文件。} +% +% \begin{macrocode} +%<*definition> +% \end{macrocode} +% +% \subsection{通用配置} +% +% \begin{variable}{\c_@@_name_simp_tl,\c_@@_name_trad_tl, +% \c_@@_name_en_tl} +% 学校名称。 +% \begin{macrocode} +\tl_const:Nn \c_@@_name_simp_tl { 复旦大学 } +\tl_const:Nn \c_@@_name_trad_tl { 復旦大學 } +\tl_const:Nn \c_@@_name_en_tl { Fudan~ University } +% \end{macrocode} +% \end{variable} +% +% 常用标点符号,见表~\ref{tab:punctuations}。 +% \begin{macrocode} +\clist_map_inline:nn + { + { ideo_comma } { "3001 }, + { ideo_full_stop } { "3002 }, + { fwid_comma } { "FF0C }, + { fwid_full_stop } { "FF0E }, + { fwid_colon } { "FF1A }, + { fwid_semicolon } { "FF1B }, + { fwid_left_paren } { "FF08 }, + { fwid_right_paren } { "FF09 } + } + { \@@_define_punct:nn #1 } +% \end{macrocode} +% +% \begin{table}[ht] +% \caption{常用标点符号} +% \label{tab:punctuations} +% \centering +% \begin{tabular}{cccc} +% \toprule +% \textbf{中文名称} & \textbf{英文名称} & \textbf{符号} & \textbf{Unicode} \\ +% \midrule +% 中文顿号 & Ideographic comma & \symbol{"3001} & U+3001 \\ +% 中文句号 & Ideographic full stop & \symbol{"3002} & U+3002 \\ +% 中文逗号 & Fullwidth comma & \symbol{"FF0C} & U+FF0C \\ +% 全角西文句点 & Fullwidth full stop & \symbol{"FF0E} & U+FF0E \\ +% 中文冒号 & Fullwidth colon & \symbol{"FF1A} & U+FF1A \\ +% 中文分号 & Fullwidth semicolon & \symbol{"FF1B} & U+FF1B \\ +% 中文左圆括号 & Fullwidth left parenthesis & \symbol{"FF08} & U+FF08 \\ +% 中文右圆括号 & Fullwidth right parenthesis & \symbol{"FF09} & U+FF09 \\ +% \bottomrule +% \end{tabular} +% \end{table} +% +% \begin{variable}{\c_@@_line_spread_fp} +% 行距倍数。行距倍数 $k$ 由下式确定: +% \begin{equation*} +% \num{1.2} \times k \times \SI{12}{bp} = \SI{20}{pt}. +% \end{equation*} +% 式中,\num{1.2} 是基本行距与文字大小之比,\SI{12}{bp} 是小四号字 +% 的大小,\SI{20}{pt} 是行距固定值。 +% \begin{macrocode} +\fp_const:Nn \c_@@_line_spread_fp + { \dim_ratio:nn { 20 pt } { 12 bp } / 1.2 } +% \end{macrocode} +% \end{variable} +% +% \subsection{声明页} +% +% \begin{variable}{\c_@@_orig_decl_text_tl} +% 论文独创性声明。 +% \begin{macrocode} +\tl_const:Nn \c_@@_orig_decl_text_tl + { + 本人郑重声明:所呈交的学位论文,是本人在导师的指导下,独立进行研究 + 工作所取得的成果。论文中除特别标注的内容外,不包含任何其他个人或机 + 构已经发表或撰写过的研究成果。对本研究做出重要贡献的个人和集体,均 + 已在论文中作了明确的声明并表示了谢意。本声明的法律结果由本人承担。 + } +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\c_@@_auth_decl_text_tl} +% 论文使用授权声明。 +% \begin{macrocode} +\tl_const:Nn \c_@@_auth_decl_text_tl + { + 本人完全了解复旦大学有关收藏和利用博士、硕士学位论文的规定,即:学 + 校有权收藏、使用并向国家有关部门或机构送交论文的印刷本和电子版本; + 允许论文被查阅和借阅;学校可以公布论文的全部或部分内容,可以采用影 + 印、缩印或其它复制手段保存论文。涉密学位论文在解密后遵守此规定。 + } +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\c_@@_orig_decl_sign_clist, +% \c_@@_auth_decl_sign_clist} +% 声明页签名项目。 +% \begin{macrocode} +\clist_const:Nn \c_@@_orig_decl_sign_clist + { 作者签名, 日期 } +\clist_const:Nn \c_@@_auth_decl_sign_clist + { 作者签名, 导师签名, 日期 } +% \end{macrocode} +% \end{variable} +% +% \subsection{杂项} +% +% \begin{variable}{\c_@@_thesis_type_clist, +% \c_@@_degree_type_clist} +% 论文类型与学位类型。 +% \begin{macrocode} +\clist_const:Nn \c_@@_thesis_type_clist + { 博士学位论文, 硕士学位论文, 本科毕业论文 } +\clist_const:Nn \c_@@_degree_type_clist + { 学术学位, 专业学位 } +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\c_@@_secret_clist} +% 三种密级。 +% \begin{macrocode} +\clist_const:Nn \c_@@_secret_clist { 秘密, 机密, 绝密 } +% \end{macrocode} +% \end{variable} +% +% 默认名称。注意空格是忽略掉的。 +% \begin{macrocode} +\clist_map_inline:nn + { + { secret_level } { 密 \qquad 级 }, + { secret_star } { \textrm { \bigstar } }, + { school_id } { 学校代码 }, + { student_id } { 学 \qquad 号 }, + { department } { 院系 }, + { major } { 专业 }, + { author } { 姓名 }, + { supervisor } { 指导教师 }, + { date } { 完成日期 }, + { instructors } { 指导小组成员 }, + { author_sign } { 作者签名 }, + { supervisor_sign } { 导师签名 }, + { sign_date } { 日期 }, + { toc } { 目 \quad 录 }, + { lof } { 插图目录 }, + { lot } { 表格目录 }, + { bib_en } { Bibliography }, + { pdf_creator } { LaTeX~ with~ fduthesis~ class }, + { orig_decl } { \c_@@_name_simp_tl \\ 学位论文独创性声明 }, + { auth_decl } { \c_@@_name_simp_tl \\ 学位论文使用授权声明 } + } + { \@@_define_name:nn #1 } +\clist_map_inline:nn + { + { abstract } { 摘 \quad 要 } { Abstract }, + { keywords } { 关键字 } { Keywords: }, + { clc } { 中图分类号 } { CLC~ number: }, + { notation } { 符号表 } { List~ of~ Symbols } + } + { \@@_define_name:nnn #1 } +% \end{macrocode} +% +% 默认定理头名称。 +% \begin{macrocode} +\clist_map_inline:nn + { + { proof } { 证明 } { Proof }, + { axiom } { 公理 } { Axiom }, + { corollary } { 推论 } { Corollary }, + { definition } { 定义 } { Definition }, + { example } { 例 } { Example }, + { lemma } { 引理 } { Lemma }, + { theorem } { 定理 } { Theorem } + } + { \@@_define_name:nnn #1 } +% +%<@@=> +% \end{macrocode} +% +% \end{implementation} +% diff --git a/source/fduthesis-layout.dtx b/source/fduthesis-layout.dtx new file mode 100644 index 0000000..2a42612 --- /dev/null +++ b/source/fduthesis-layout.dtx @@ -0,0 +1,367 @@ +% \iffalse meta-comment +% +% Copyright (C) 2017--2019 by Xiangdong Zeng +% +% This work may be distributed and/or modified under the conditions of the +% LaTeX Project Public License, either version 1.3c of this license or (at +% your option) any later version. The latest version of this license is in: +% +% http://www.latex-project.org/lppl.txt +% +% and version 1.3 or later is part of all distributions of LaTeX version +% 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Xiangdong Zeng. +% +% \fi +% +% \begin{implementation} +% +% \begin{macrocode} +% Template +\DeclareObjectType { fdu / layout } { \c_zero_int } + +\DeclareTemplateInterface { fdu / layout } { main } { \c_zero_int } + { + geometry : code = + { + paper = a4paper, + vmargin = 2.54 cm, + hmargin = 3.18 cm, + headheight = 15 pt, + % showframe = true, + }, + + page-style-twoside : code = + { + \fancyhf { } + \fancyhead [ EL ] { \small \nouppercase { \fdu@kai \leftmark } } + \fancyhead [ OR ] { \small \nouppercase { \fdu@kai \rightmark } } + \fancyfoot [ C ] { \small \thepage } + }, + page-style-oneside : code = + { + \fancyhf { } + \fancyhead [ C ] { \small \nouppercase { \fdu@kai \leftmark } } + \fancyfoot [ C ] { \small \thepage } + }, + page-style-chapter-twoside : code = + { + \fancyhf { } + \fancyfoot [ C ] { \small \thepage } + \cs_set:Npn \headrulewidth { 0 pt } + }, + page-style-chapter-oneside : code = + \KeyValue { page-style-chapter-twoside }, + + chapter : code = + { + format = \huge \normalfont \sffamily \centering, + beforeskip = 50 pt, + afterskip = 40 pt, + number = \@@_arabic:n { chapter }, + fixskip = true + }, + section : code = + { + format = \Large \normalfont \sffamily \raggedright, + beforeskip = 3.5 ex plus 1.0 ex minus 0.2 ex, + afterskip = 2.7 ex plus 0.5 ex, + fixskip = true + }, + subsection : code = + { + format = \large \normalfont \sffamily \raggedright, + beforeskip = 3.25 ex plus 1.0 ex minus 0.2 ex, + afterskip = 2.5 ex plus 0.3 ex, + fixskip = true + }, + subsubsection : code, + paragraph : code, + subparagraph : code, + + figure-caption : code = + { + font = small, + labelsep = quad + }, + table-caption : code = + { + font = { small, sf }, + labelsep = quad + }, + algorithm-caption : code, + figure-number : code = + { \@@_arabic:n { chapter } - \@@_arabic:n { figure } }, + table-number : code = + { \@@_arabic:n { chapter } - \@@_arabic:n { table } }, + algorithm-number : code, + } + +\cs_new_protected:Npn \@@_def_page_style:nn #1#2 + { \fancypagestyle { fdu-page-style-#1 } {#2} } + +\DeclareTemplateCode { fdu / layout } { main } { \c_zero_int } + { + geometry = \geometry {#1}, + page-style-twoside = \@@_def_page_style:nn { twoside } {#1}, + page-style-oneside = \@@_def_page_style:nn { oneside } {#1}, + page-style-chapter-twoside = \@@_def_page_style:nn { chapter-twoside } {#1}, + page-style-chapter-oneside = \@@_def_page_style:nn { chapter-oneside } {#1}, + chapter = \ctexset { chapter = {#1} }, + section = \ctexset { section = {#1} }, + subsection = \ctexset { subsection = {#1} }, + subsubsection = \ctexset { subsubsection = {#1} }, + paragraph = \ctexset { paragraph = {#1} }, + subparagraph = \ctexset { subparagraph = {#1} }, + figure-caption = \captionsetup {#1}, + table-caption = \captionsetup {#1}, + algorithm-caption = \captionsetup {#1}, + figure-number = \cs_set:Npn \thefigure {#1}, + table-number = \cs_set:Npn \thetable {#1}, + algorithm-number = \cs_set:Npn \thealgorithm {#1}, + } + { + \AssignTemplateKeys + \cs_show:N \fdu_if_draft:TF + \pagestyle { fdu-page-style-twoside } + \keys_set:nn { ctex } { chapter / pagestyle = fdu-page-style-chapter-twoside } + } + +\DeclareInstance { fdu / layout } { default } { main } { } +\UseInstance { fdu / layout } { default } +\debug_off:n { all } + +% \end{macrocode} +% +%^^A % \section{页面布局} +%^^A % +%^^A % 利用 \pkg{geometry} 宏包设置纸张大小、页面边距以及页眉高度。这里, +%^^A % $\SI{2.54}{\centi\meter}=\SI{1}{in}$, +%^^A % $\SI{3.18}{\centi\meter}=\SI{1.25}{in}$。 +%^^A % \begin{macrocode} +%^^A \geometry +%^^A { +%^^A paper = a4paper, +%^^A vmargin = 2.54 cm, +%^^A hmargin = 3.18 cm, +%^^A headheight = 15 pt +%^^A } +%^^A % \end{macrocode} +%^^A % +%^^A % 草稿模式下显示页面边框及页眉、页脚线 。 +%^^A % \begin{macrocode} +%^^A \bool_if:NT \g_@@_draft_bool { \geometry { showframe } } +%^^A % \end{macrocode} +%^^A % +%^^A % \section{页眉页脚} +%^^A % +%^^A % 清除默认页眉页脚格式。 +%^^A % \begin{macrocode} +%^^A \fancyhf { } +%^^A % \end{macrocode} +%^^A % +%^^A % \begin{variable}{\l_@@_header_center_mark_tl} +%^^A % 保存中间页眉的文字。正文中设置为空,目录、摘要、符号表等设置为相应标题。 +%^^A % \begin{macrocode} +%^^A \tl_new:N \l_@@_header_center_mark_tl +%^^A % \end{macrocode} +%^^A % \end{variable} +%^^A % +%^^A % 构建页眉,要在单面或双面下分别设置。 +%^^A % +%^^A % \cs{fancyhead} 的选项中,\opt{E} 和 \opt{O} 分别表示偶数(even) +%^^A % 和奇数(odd), 而 \opt{L}、\opt{R} 和 \opt{C} 则分别表示左 +%^^A % (left)、右(right)和中间(center)。按照通常的排版规则, +%^^A % 在双面模式下,偶数页的中间页眉文字在左,奇数页则在右。单面模式下, +%^^A % 左右页眉都要显示。 +%^^A % \begin{macrocode} +%^^A \bool_if:NTF \g_@@_twoside_bool +%^^A %<*class> +%^^A { +%^^A \fancyhead [ EL ] { \small \nouppercase { \fdu@kai \leftmark } } +%^^A \fancyhead [ OR ] { \small \nouppercase { \fdu@kai \rightmark } } +%^^A } +%^^A { +%^^A \fancyhead [ L ] { \small \nouppercase { \fdu@kai \leftmark } } +%^^A \fancyhead [ R ] { \small \nouppercase { \fdu@kai \rightmark } } +%^^A \fancyhead [ C ] +%^^A { +%^^A \small \nouppercase +%^^A { \fdu@kai \l_@@_header_center_mark_tl } +%^^A } +%^^A } +%^^A % +%^^A %<*class-en> +%^^A { +%^^A \fancyhead [ EL ] { \small \nouppercase { \itshape \leftmark } } +%^^A \fancyhead [ OR ] { \small \nouppercase { \itshape \rightmark } } +%^^A } +%^^A { +%^^A \fancyhead [ L ] { \small \nouppercase { \itshape \leftmark } } +%^^A \fancyhead [ R ] { \small \nouppercase { \itshape \rightmark } } +%^^A \fancyhead [ C ] +%^^A { +%^^A \small \nouppercase +%^^A { \itshape \l_@@_header_center_mark_tl } +%^^A } +%^^A } +%^^A % +%^^A % \end{macrocode} +%^^A % +%^^A % 构建页脚,用来显示页码。选项 \opt{C} 表示居中(center)。 +%^^A % \begin{macrocode} +%^^A \fancyfoot [ C ] { \small \thepage } +%^^A % \end{macrocode} +%^^A % +%^^A % 关闭横线显示(未启用)。 +%^^A % \begin{macrocode} +%^^A % \RenewDocumentCommand \headrulewidth { } { 0 pt } +%^^A % \end{macrocode} +%^^A % +%^^A % \begin{macro}{\cleardoublepage} +%^^A % 重定义 \tn{cleardoublepage},使得偶数页面在没有内容时也不显示页眉页脚,见 +%^^A % \url{https://tex.stackexchange.com/a/1683}。最后清空中间页眉,确保正文部分 +%^^A % 页眉显示正确。 +%^^A % \begin{macrocode} +%^^A \RenewDocumentCommand \cleardoublepage { } +%^^A { +%^^A \clearpage +%^^A \bool_if:NT \g_@@_twoside_bool +%^^A { +%^^A \int_if_odd:nF \c@page +%^^A { \hbox:n { } \thispagestyle { empty } \newpage } +%^^A } +%^^A \tl_gset:Nn \l_@@_header_center_mark_tl { } +%^^A } +%^^A % \end{macrocode} +%^^A % \end{macro} +%^^A % +%^^A % \pkg{ctex} 宏包使用 \opt{heading} 选项后,会把页面格式设置为 |headings|。 +%^^A % 因此必须在 \pkg{ctex} 调用之后重新设置 \cs{pagestyle} 为 |fancy|。 +%^^A % \begin{macrocode} +%^^A \pagestyle { fancy } +%^^A % \end{macrocode} +%^^A % +%^^A % \section{章节标题结构} +%^^A % +%^^A % |\keys_set:nn{ctex}| 实际相当于 \cs{ctexset}。 +%^^A % \begin{macrocode} +%^^A \keys_set:nn { ctex } +%^^A { +%^^A % \end{macrocode} +%^^A % 设置章(chapter)、节(section)与小节(sub-section)标题样式。 +%^^A % 此处使用 \kvopt{fixskip}{true} 选项来抑制前后的多余间距。 +%^^A % \begin{macrocode} +%^^A chapter = +%^^A { +%^^A % format = \huge \normalfont \sffamily \centering, +%^^A %<*class-en> +%^^A format = \centering, +%^^A nameformat = \LARGE \bfseries, +%^^A titleformat = \huge \bfseries, +%^^A aftername = \par \nobreak \vskip 10 pt, +%^^A % +%^^A beforeskip = 50 pt, +%^^A afterskip = 40 pt, +%^^A number = \@@_arabic:n { chapter }, +%^^A fixskip = true +%^^A }, +%^^A section = +%^^A { +%^^A % format = \Large \normalfont \sffamily \raggedright, +%^^A % format = \Large \bfseries \raggedright, +%^^A beforeskip = 3.5 ex plus 1.0 ex minus 0.2 ex, +%^^A afterskip = 2.7 ex plus 0.5 ex, +%^^A fixskip = true +%^^A }, +%^^A subsection = +%^^A { +%^^A % format = \large \normalfont \sffamily \raggedright, +%^^A % format = \large \bfseries \raggedright, +%^^A beforeskip = 3.25 ex plus 1.0 ex minus 0.2 ex, +%^^A afterskip = 2.5 ex plus 0.3 ex, +%^^A fixskip = true +%^^A } +%^^A } +%^^A % \end{macrocode} +%^^A % +% \changes{v0.7d}{2019/03/24}{优化目录、摘要、参考文献等的标题实现。} +% +% \begin{macro}{\@@_chapter:n,\@@_chapter:V} +% 手动生成章的标题,用于摘要、参考文献等。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_chapter:n #1 + { + \group_begin: + \ctexset { chapter / numbering = false } + \chapter {#1} + \@@_chapter_header:n {#1} + \group_end: + } +\cs_generate_variant:Nn \@@_chapter:n { V } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_chapter_no_toc:n,\@@_chapter_no_toc:V} +% 目录自身不出现在目录中,需特别处理。参考 +% \url{https://tex.stackexchange.com/a/1821}。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_chapter_no_toc:n #1 + { + \chapter * {#1} + \@@_chapter_header:n {#1} + \pdfbookmark [0] {#1} { toc } + } +\cs_generate_variant:Nn \@@_chapter_no_toc:n { V } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_chapter_header:n} +% 单页模式下,目录、摘要、符号表等的页眉中间为相应标题,左右为空。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_chapter_header:n #1 + { + \bool_if:NTF \g_@@_twoside_bool + { \markboth {#1} {#1} } + { + \markboth { } { } + \tl_gset:Nn \l_@@_header_center_mark_tl {#1} + } + } +% \end{macrocode} +% \end{macro} +%^^A % +%^^A % \section{图表绘制;浮动体} +%^^A % +%^^A % \changes{v0.3}{2017/07/09}{支持浮动体。} +%^^A % +%^^A % 分别设置浮动体 \env{figure} 和 \env{table} 的标题样式。 +%^^A % \begin{macrocode} +%^^A \captionsetup [ figure ] +%^^A { +%^^A font = small, +%^^A labelsep = quad +%^^A } +%^^A \captionsetup [ table ] +%^^A { +%^^A font = { small, sf }, +%^^A labelsep = quad +%^^A } +%^^A % \end{macrocode} +%^^A % +%^^A % \begin{macro}{\thefigure,\thetable} +%^^A % \changes{v0.7}{2018/01/17}{改为可完全展开的命令。} +%^^A % 重定义图表编号。 +%^^A % \begin{macrocode} +%^^A \cs_set:Npn \thefigure +%^^A { \@@_arabic:n { chapter } - \@@_arabic:n { figure } } +%^^A \cs_set:Npn \thetable +%^^A { \@@_arabic:n { chapter } - \@@_arabic:n { table } } +%^^A % \end{macrocode} +%^^A % \end{macro} +% +% \end{implementation} +% diff --git a/source/fduthesis-opening.dtx b/source/fduthesis-opening.dtx new file mode 100644 index 0000000..fc5d634 --- /dev/null +++ b/source/fduthesis-opening.dtx @@ -0,0 +1,549 @@ +% \iffalse meta-comment +% +% Copyright (C) 2017--2019 by Xiangdong Zeng +% +% This work may be distributed and/or modified under the conditions of the +% LaTeX Project Public License, either version 1.3c of this license or (at +% your option) any later version. The latest version of this license is in: +% +% http://www.latex-project.org/lppl.txt +% +% and version 1.3 or later is part of all distributions of LaTeX version +% 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Xiangdong Zeng. +% +% \fi +% +% \begin{implementation} +% +% \section{准备} +% +% \begin{macrocode} +%<@@=fdu> +%<*class|class-en> +% \end{macrocode} +% +% \subsection{环境检查} +% +% 检查 \LaTeX3 编程环境。 +% \begin{macrocode} +\debug_on:n { all } +\RequirePackage { xparse, xtemplate, l3keys2e } +\msg_new:nnn { fduthesis } { l3-too-old } + { + Package~ "#1"~ is~ too~ old. \\\\ + Please~ update~ an~ up-to-date~ version~ of~ the~ bundles~ "l3kernel"~ and~ + "l3packages"~ using~ your~ TeX~ package~ manager~ or~ from~ CTAN. + } +\clist_map_inline:nn { expl3, xparse, xtemplate, l3keys2e } + { + \@ifpackagelater {#1} { 2018/05/12 } + { } { \msg_error:nnn { fduthesis } { l3-too-old } {#1} } + } +% \end{macrocode} +% +% \begin{macro}[TF]{\@@_if_engine_xetex_luatex:} +% 检测是否为 \XeTeX{} 或 \LuaTeX{}。 +% \begin{macrocode} +\exp_args:NNnx \prg_new_conditional:Npnn \@@_if_engine_xetex_luatex: { T, F, TF } + { + \bool_lazy_or:nnTF { \sys_if_engine_xetex_p: } { \sys_if_engine_luatex_p: } + { \exp_not:N \prg_return_true: } + { \exp_not:N \prg_return_false: } + } +% \end{macrocode} +% \end{macro} +% +% \begin{variable}[int]{\c_sys_engine_str} +% \LaTeX3 不检测 \ApTeX{},因此需更新引擎名称。 +% \begin{macrocode} +\cs_if_exist:NT \ngostype + { \str_set:Nn \c_sys_engine_str { aptex } } +% \end{macrocode} +% \end{variable} +% +% 目前 \cls{fduthesis} 仅支持 \XeTeX{} 和 \LuaTeX{}。 +% \begin{macrocode} +\msg_new:nnn { fduthesis } { unsupported-engine } + { + The~ fduthesis~ class~ requires~ either~ XeTeX~ or~ LuaTeX. \\\\ + "#1"~ is~ not~ supported~ at~ present.~ You~ must~ change~ your~ + typesetting~ engine~ to~ "xelatex"~ or~ "lualatex". + } +\@@_if_engine_xetex_luatex:F + { \msg_warning:nnx { fduthesis } { unsupported-engine } { \c_sys_engine_str } } +% \end{macrocode} +% +% \subsection{内部变量声明} +% +% \begin{variable} +% { +% \l_@@_tmpa_box, +% \l_@@_tmpa_clist, +% \l_@@_tmpb_clist, +% \l_@@_tmpa_dim, +% \l_@@_tmpb_dim, +% \l_@@_tmpa_skip, +% \l_@@_tmpa_tl, +% \l_@@_tmpb_tl +% } +% 临时变量。 +% \begin{macrocode} +\box_new:N \l_@@_tmpa_box +\clist_new:N \l_@@_tmpa_clist +\clist_new:N \l_@@_tmpb_clist +\dim_new:N \l_@@_tmpa_dim +\dim_new:N \l_@@_tmpb_dim +\skip_new:N \l_@@_tmpa_skip +\tl_new:N \l_@@_tmpa_tl +\tl_new:N \l_@@_tmpb_tl +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\g_@@_thesis_type_int} +% 论文类型。取值 1、2、3 分别对应博士、硕士、本科(学士),这与学号 +% 第三位是一致的。 +% \begin{macrocode} +\int_new:N \g_@@_thesis_type_int +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\g_@@_to_ctex_clist,\g_@@_to_hyperref_clist} +% 分别保存由 \cls{fduthesis} 传入 \cls{ctexbook} 文档类和 +% \pkg{hyperref} 宏包的选项列表。 +% \begin{macrocode} +\clist_new:N \g_@@_to_ctex_clist +\clist_new:N \g_@@_to_hyperref_clist +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\g_@@_twoside_bool} +% \begin{macrocode} +\bool_new:N \g_@@_twoside_bool +\bool_new:N \g_@@_draft_bool +\bool_new:N \g_@@_print_bool +\bool_new:N \g_@@_text_fonts_bool +\bool_new:N \g_@@_math_fonts_bool +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\g_@@_config_file_tl} +% 保存配置文件名称。默认为空。 +% \begin{macrocode} +\tl_new:N \g_@@_config_file_tl +% \end{macrocode} +% \end{variable} +% +% \subsection{内部函数} +% +% \begin{macro}[int]{\cs_generate_variant:cn, +% \file_input:V, +% \int_to_arabic:v, +% \keys_define:nx, +% \tl_map_inline:xn} +% \begin{macro}[int,TF]{\tl_if_eq:Vn} +% \LaTeX3{} 函数变体。 +% \begin{macrocode} +\cs_generate_variant:Nn \cs_generate_variant:Nn { cn } +\cs_generate_variant:Nn \file_input:n { V } +\cs_generate_variant:Nn \int_to_arabic:n { v } +\cs_generate_variant:Nn \keys_define:nn { nx } +\cs_generate_variant:Nn \tl_map_inline:nn { xn } +\prg_generate_conditional_variant:Nnn \tl_if_eq:nn { Vn } { T, TF } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@@_quad:,\@@_qquad:} +% 等价于 \LaTeXe{} 中的 \tn{quad} 和 \tn{qquad}。 +% \begin{macrocode} +\cs_new:Npn \@@_quad: { \skip_horizontal:n { 1 em } } +\cs_new:Npn \@@_qquad: { \skip_horizontal:n { 2 em } } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_vspace:N,\@@_vspace:n,\@@_vspace:c} +% 类似 \LaTeXe{} 中的 \tn{vspace*}。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_vspace:N #1 + { + \dim_set_eq:NN \l_@@_tmpa_dim \prevdepth + \tex_hrule:D height \c_zero_dim + \nobreak + \skip_vertical:N #1 + \skip_vertical:N \c_zero_skip + \dim_set_eq:NN \prevdepth \l_@@_tmpa_dim + } +\cs_new_protected:Npn \@@_vspace:n #1 + { + \skip_set:Nn \l_@@_tmpa_skip {#1} + \@@_vspace:N \l_@@_tmpa_skip + } +\cs_generate_variant:Nn \@@_vspace:N { c } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_symbol:n} +% 等价于 \LaTeXe{} 中的 \tn{symbol}。 +% \begin{macrocode} +\cs_new:Npn \@@_symbol:n #1 { \tex_char:D #1 \scan_stop: } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_arabic:n} +% 等价于 \LaTeXe{} 中的 \tn{arabic}。 +% \begin{macrocode} +\cs_new:Npn \@@_arabic:n #1 { \int_to_arabic:v { c@ #1 } } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_patch_cmd:Nnn,\@@_appto_cmd:Nn} +% 补丁工具,来自 \pkg{ctexpatch} 宏包。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_patch_cmd:Nnn #1#2#3 + { + \ctex_patch_cmd_once:NnnnTF #1 { } {#2} {#3} + { } { \ctex_patch_failure:N #1 } + } +\cs_new_protected:Npn \@@_appto_cmd:Nn #1#2 + { + \ctex_appto_cmd:NnnTF #1 { } {#2} + { } { \ctex_patch_failure:N #1 } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_define_fn_style:nn, +% \@@_define_punct:nn, +% \@@_define_sep:nn, +% \@@_define_format:nn, +% \@@_define_name:nn, +% \@@_define_name:nnn} +% 用来定义脚注样式、标点、默认名称的辅助函数。 +% \begin{macrocode} +\cs_new_protected:Npn \@@_define_fn_style:nn #1#2 + { \tl_const:cn { c_@@_fn_style_ #1 _tl } {#2} } +\cs_new_protected:Npn \@@_define_punct:nn #1#2 + { \tl_const:cn { c_@@_ #1 _tl } { \@@_symbol:n {#2} } } +% \cs_new_protected:Npn \@@_define_sep:nn #1#2 +% { \tl_const:cn { c_@@_ #1 _sep_tl } {#2} } +% \cs_new_protected:Npn \@@_define_format:nn #1#2 +% { \tl_const:cn { c_@@_ #1 _format_tl } {#2} } +\cs_new_protected:Npn \@@_define_name:nn #1#2 + { \tl_const:cn { c_@@_name_ #1 _tl } {#2} } +\cs_new_protected:Npn \@@_define_name:nnn #1#2#3 + { + \tl_const:cn { c_@@_name_ #1 _tl } {#2} + \tl_const:cn { c_@@_name_ #1 _en_tl } {#3} + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_msg_new:nn, +% \@@_error:n,\@@_error:nn,\@@_error:nx,\@@_error:nnn, +% \@@_warning:n,\@@_warning:nn,\@@_warning:nxx, +% \@@_info:nx} +% 各种信息函数的缩略形式。 +% \begin{macrocode} +\cs_new:Npn \@@_msg_new:nn { \msg_new:nnn { fduthesis } } +\cs_new:Npn \@@_error:n { \msg_error:nn { fduthesis } } +\cs_new:Npn \@@_error:nn { \msg_error:nnn { fduthesis } } +\cs_new:Npn \@@_error:nx { \msg_error:nnx { fduthesis } } +\cs_new:Npn \@@_error:nnn { \msg_error:nnnn { fduthesis } } +\cs_new:Npn \@@_warning:n { \msg_warning:nn { fduthesis } } +\cs_new:Npn \@@_warning:nn { \msg_warning:nnn { fduthesis } } +\cs_new:Npn \@@_warning:nxx { \msg_warning:nnxx { fduthesis } } +\cs_new:Npn \@@_info:nx { \msg_info:nnx { fduthesis } } +% \end{macrocode} +% \end{macro} +% +% \section{选项处理} +% +% 定义 |fdu/option| 键值类。 +% \begin{macrocode} +\keys_define:nn { fdu / option } + { +% \end{macrocode} +% +% \changes{v0.7}{2018/02/01}{新增 \opt{type} 选项。} +% +% \begin{macro}{type} +% 设置论文类型。设为模板选项主要是为了以后的兼容性。论文类型可能会 +% 影响很多设置,只是暂时还不考虑。默认为本科毕业论文。 +% \begin{macrocode} + type .tl_gset:N = \g_@@_thesis_type_tl, + % TODO: remove the following + % type .choice:, + % type .value_required:n = true, + % type .choices:nn = + % { doctor, master, bachelor } + % { \int_set_eq:NN \g_@@_thesis_type_int \l_keys_choice_int }, + % type .initial:n = bachelor, +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{oneside,twoside} +% 设置页面类型为单面或双面。 +% \begin{macrocode} + oneside .value_forbidden:n = true, + twoside .value_forbidden:n = true, + oneside .code:n = + { + \bool_gset_false:N \g_@@_twoside_bool + \@@_appto_ctex_options:n { oneside, openany } + }, + twoside .code:n = + { + \bool_gset_true:N \g_@@_twoside_bool + \@@_appto_ctex_options:n { twoside, openright } + }, +% \end{macrocode} +% \end{macro} +% +% \changes{v0.5}{2017/09/23}{移除 \opt{nofonts} 选项。} +% +% \begin{macro}{draft} +% 是否开启草稿模式(默认关闭)。 +% \begin{macrocode} + draft .choice:, + draft / true .code:n = + { + \bool_gset_true:N \g_@@_draft_bool + \@@_appto_ctex_options:n { draft } + }, + draft / false .code:n = + { \bool_gset_false:N \g_@@_draft_bool }, + draft .default:n = true, +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{print} +% 是否开启打印模式(默认关闭)。 +% \begin{macrocode} + print .bool_gset:N = \g_@@_print_bool, + print .default:n = true, +% \end{macrocode} +% \end{macro} +% +% \changes{v0.7}{2019/06/01}{新增 \opt{config} 选项。} +% +% \begin{macro}{config} +% \begin{macrocode} + set-fonts .choice:, + set-fonts / true .code:n = + { + \bool_gset_true:N \g_@@_text_fonts_bool + \bool_gset_true:N \g_@@_math_fonts_bool + }, + set-fonts / false .code:n = + { + \bool_gset_false:N \g_@@_text_fonts_bool + \bool_gset_false:N \g_@@_math_fonts_bool + }, + set-fonts .default:n = true, + set-text-fonts .bool_gset:N = \g_@@_text_fonts_bool, + set-text-fonts .default:n = true, + set-math-fonts .bool_gset:N = \g_@@_math_fonts_bool, + set-math-fonts .default:n = true, +% \end{macrocode} +% \end{macro} +% +% \changes{v0.7}{2018/01/31}{新增 \opt{config} 选项。} +% +% \begin{macro}{config} +% 配置文件名。 +% \begin{macrocode} + config .tl_gset:N = \g_@@_config_file_tl, +% \end{macrocode} +% \end{macro} +% +% 处理未知选项。 +% \begin{macrocode} + unknown .code:n = { \@@_error:n { unknown-option } } + } +\cs_new_protected:Npn \@@_appto_ctex_options:n #1 + { \clist_gput_right:Nn \g_@@_to_ctex_clist {#1} } +\@@_msg_new:nn { unknown-option } + { Class~ option~ "\l_keys_key_tl"~ is~ unknown. } +% \end{macrocode} +% +% 模版初始选项。 +% \begin{macrocode} +\keys_set:nn { fdu / option } + { + oneside, + draft = false, + print = false, + set-fonts = true + } +% \end{macrocode} +% +% 将选项传给 |fdu/option|。 +% \begin{macrocode} +\ProcessKeysOptions { fdu / option } +% \end{macrocode} +% +% 载入参数配置文件。 +% \begin{macrocode} +\file_input:n { fduthesis.def } +\tl_if_empty:NF \g_@@_config_file_tl + { + \file_input:n { \g_@@_config_file_tl } + \@@_info:nx { load-config-file } { \g_@@_config_file_tl } + } +\@@_msg_new:nn { load-config-file } + { You~ are~ loading~ config~ file~ '#1'. } +% \end{macrocode} +% +% 在 \XeTeX{}、\LuaTeX{} 之外的引擎下关闭字体配置。 +% \begin{macrocode} +\@@_if_engine_xetex_luatex:F + { + \bool_gset_false:N \g_@@_text_fonts_bool + \bool_gset_false:N \g_@@_math_fonts_bool + } +% \exp_args:NNnx \prg_new_conditional:Npnn \fdu_if_set_text_fonts: { T, F, TF } +% { +% \bool_if:NTF \g_@@_text_fonts_bool +% { \exp_not:N \prg_return_true: } +% { \exp_not:N \prg_return_false: } +% } +% \exp_args:NNnx \prg_new_conditional:Npnn \fdu_if_set_math_fonts: { T, F, TF } +% { +% \bool_if:NTF \g_@@_math_fonts_bool +% { \exp_not:N \prg_return_true: } +% { \exp_not:N \prg_return_false: } +% } +% \end{macrocode} +% +% Define: +% - \fdu_if_twoside:TF +% - \fdu_if_draft:TF +% - \fdu_if_print:TF +% - \fdu_if_set_text_fonts:TF +% - \fdu_if_set_math_fonts:TF +% etc. +% \begin{macrocode} +\cs_set:Npn \@@_tmp:w #1#2 + { + \exp_args:NNnx \prg_new_conditional:Npnn #1 { T, F, TF } + { + \bool_if:NTF #2 + { \exp_not:N \prg_return_true: } + { \exp_not:N \prg_return_false: } + } + } +\clist_map_inline:nn + { + \fdu_if_twoside: \g_@@_twoside_bool , + \fdu_if_draft: \g_@@_draft_bool , + \fdu_if_print: \g_@@_print_bool , + \fdu_if_set_text_fonts: \g_@@_text_fonts_bool , + \fdu_if_set_math_fonts: \g_@@_math_fonts_bool , + } + { \@@_tmp:w #1 } +\cs_undefine:N \@@_tmp:w +% \end{macrocode} +% +% \section{载入宏包、文档类} +% +% \changes{v0.7}{2018/01/19}{使用 \cls{ctexbook} 文档类,而非直接使用 +% 标准文档类 \cls{book}。} +% +% 将选项传入 \cls{ctexbook} 文档类。 +% \begin{macrocode} +\PassOptionsToClass + { + UTF8, +% scheme = plain, + heading = true, +% fontset = none, +% fontset = fandol, + \g_@@_to_ctex_clist + } + { ctexbook } +% \end{macrocode} +% +% 传入各宏包选项。 +% \begin{macrocode} +\PassOptionsToPackage { no-math } { fontspec } +\PassOptionsToPackage { perpage } { footmisc } +\PassOptionsToPackage { amsmath, thmmarks } { ntheorem } +% \end{macrocode} +% +% 本模板会在 \pkg{ctexhook} 提供的钩子 \cs{ctex_at_end_preamble:n} +% 中调用 \pkg{biblatex},而 \pkg{biblatex} 自身又会使用 \pkg{etoolbox} +% 的钩子 \tn{AtEndPreamble},因此需要在载入 \cls{ctexbook} 之前调用 +% \pkg{etoolbox}。钩子的顺序为: +% \[ \text{\tn{CTEX@document@left@hook}} +% \prec \text{\tn{@endpreamblehook}} +% \prec \text{\texttt{\textbackslash begin\{document\}}}. \] +% \begin{macrocode} +\debug_off:n { all } +\RequirePackage { etoolbox } +% \end{macrocode} +% +% 载入 \cls{ctexbook} 文档类。 +% 在使用 \XeLaTeX{} 编译时,\cls{ctexbook} 的底层将调用 \pkg{xeCJK} +% 宏包;而在使用 \LuaLaTeX{} 编译时,则将调用 \pkg{LuaTeX-ja} 宏包。 +% 两种情况下 \cls{ctexbook} 均会调用 \pkg{fontspec} 宏包。 +% \begin{macrocode} +\LoadClass { ctexbook } +% \end{macrocode} +% +% \changes{v0.4}{2017/08/13}{提供彩色支持。} +% +% 载入各宏包。其中,\pkg{amsmath} 必须在 \pkg{unicode-math} 之前引入。 +% \begin{macrocode} +\RequirePackage + { + amsmath, + caption, + fancyhdr, + footmisc, + geometry, + graphicx, + ntheorem, + unicode-math, % TODO + xcolor + } +% \end{macrocode} +% +% \begin{macro}{\@@_check_package:nnn} +% 检查过时宏包。 +% \begin{macrocode} +\debug_on:n { all } +\cs_new_protected:Npn \@@_check_package:nnn #1#2#3 + { + \@ifpackageloaded {#1} + { + \@ifpackagelater {#1} {#2} + { } { \@@_error:nnn { package-too-old } {#1} {#3} } + } + { } + } +\@@_msg_new:nn { package-too-old } + { + Package~ "#1"~ is~ too~ old. \\\\ + The~ fduthesis~ class~ only~ supports~ "#1"~ with~ a~ version~ higher~ + than~ v#2. Please~ update~ an~ up-to-date~ version~ of~ it~ using~ your~ + TeX~ package~ manager~ or~ from~ CTAN. + } +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\@@_check_package:nnn { ctex } { 2017/08/07 } { 2.4.10 } +\@@_check_package:nnn { fontspec } { 2017/09/22 } { 2.6e } +\@@_check_package:nnn { unicode-math } { 2017/11/18 } { 0.8i } +\sys_if_engine_xetex:T + { \@@_check_package:nnn { xeCJK } { 2017/08/07 } { 3.5.0 } } +\sys_if_engine_luatex:T + { \@@_check_package:nnn { xunicode-addon } { 2018/04/30 } { 3.7.1 } } +% \end{macrocode} +% +% \end{implementation} +% diff --git a/source/fduthesis-theorem.dtx b/source/fduthesis-theorem.dtx new file mode 100644 index 0000000..5b05509 --- /dev/null +++ b/source/fduthesis-theorem.dtx @@ -0,0 +1,233 @@ +% \iffalse meta-comment +% +% Copyright (C) 2017--2019 by Xiangdong Zeng +% +% This work may be distributed and/or modified under the conditions of the +% LaTeX Project Public License, either version 1.3c of this license or (at +% your option) any later version. The latest version of this license is in: +% +% http://www.latex-project.org/lppl.txt +% +% and version 1.3 or later is part of all distributions of LaTeX version +% 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Xiangdong Zeng. +% +% \fi +% +% \begin{implementation} +% +% \section{定理环境} +% +% \changes{v0.3}{2017/05/07}{新增定理环境。} +% +% \begin{variable}{\c_@@_thm_style_plain_clist, +% \c_@@_thm_style_break_clist} +% 保存 \opt{plain}、\opt{break} 两种类型的定理样式名称。 +% \begin{macrocode} +\clist_const:Nn \c_@@_thm_style_plain_clist + { plain, margin, change } +\clist_const:Nn \c_@@_thm_style_break_clist + { break, marginbreak, changebreak } +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\l_@@_thm_style_tl, +% \l_@@_thm_header_font_tl, +% \l_@@_thm_body_font_tl, +% \l_@@_thm_qed_tl, +% \l_@@_thm_counter_tl} +% 定理所需的一些字段。 +% \begin{macrocode} +\tl_new:N \l_@@_thm_style_tl +\tl_new:N \l_@@_thm_header_font_tl +\tl_new:N \l_@@_thm_body_font_tl +\tl_new:N \l_@@_thm_qed_tl +\tl_new:N \l_@@_thm_counter_tl +% \end{macrocode} +% \end{variable} +% +% \begin{macro}{theorem/style, +% theorem/header-font, +% theorem/body-font, +% theorem/qed, +% theorem/counter} +% 定义 |fdu/theorem| 键值类。 +% \begin{macrocode} +\keys_define:nn { fdu / theorem } + { + style .tl_set:N = \l_@@_thm_style_tl, + header-font .tl_set:N = \l_@@_thm_header_font_tl, + body-font .tl_set:N = \l_@@_thm_body_font_tl, + qed .tl_set:N = \l_@@_thm_qed_tl, + counter .tl_set:N = \l_@@_thm_counter_tl + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_thm_ntheorem_style:n,\@@_thm_ntheorem_new:w} +% 拷贝 \pkg{ntheorem} 命令。 +% \begin{macrocode} +\cs_new_eq:NN \@@_thm_ntheorem_style:n \theoremstyle +\cs_new_eq:NN \@@_thm_ntheorem_new:w \newtheorem +% \end{macrocode} +% \end{macro} +% +% \changes{v0.7}{2017/12/12}{原 \cs{fdunewtheorem} 命令更名为 +% \cs{new\-the\-orem}。} +% +% \begin{macro}{\newtheorem} +% 定义新的定理环境。 +% \begin{macrocode} +\RenewDocumentCommand \newtheorem { s o m m } + { +% \end{macrocode} +% 默认情况下,由 \cs{newtheorem*} 创建的定理其证毕符号为 \cs{QED}, +% 而由 \cs{new\-the\-orem} 创建的则不带证毕符号。符号 \cs{QED} 由 +% \pkg{unicode-math} 宏包提供。 +% \begin{macrocode} + \IfBooleanTF {#1} + { \tl_set:Nn \l_@@_thm_qed_tl { \ensuremath { \QED } } } + { \tl_set:Nn \l_@@_thm_qed_tl { } } +% \end{macrocode} +% 设置默认样式为 \opt{plain}。 +% \begin{macrocode} +% TODO: (2017-12-07) Move to interface + \tl_set:Nn \l_@@_thm_style_tl { plain } +% \end{macrocode} +% 处理可选参数。利用 |fdu/theorem| 键值对设置,并按此修改证毕符号、 +% 定理头字体和定理正文字体。 +% \begin{macrocode} + \IfValueT {#2} { \keys_set:nn { fdu / theorem } {#2} } + \fdu_thm_set_header_font:V \l_@@_thm_header_font_tl + \fdu_thm_set_body_font:V \l_@@_thm_body_font_tl + \fdu_thm_set_qed:V \l_@@_thm_qed_tl +% \end{macrocode} +% \cs{newtheorem} 负责创建编号定理,而 \cs{newtheorem*} +% 则负责创建无编号定理。以下分这两种情况处理。 +% \begin{macrocode} + \IfBooleanTF {#1} + { +% \end{macrocode} +% 带 |*| 的版本原则上只接受 \opt{plain} 和 \opt{break} 两种样式, +% 其余样式将被转换成这两者其中之一。 +% \begin{macrocode} + \clist_if_in:nVF { plain, break } \l_@@_thm_style_tl + { + \clist_if_in:NVTF + \c_@@_thm_style_plain_clist \l_@@_thm_style_tl + { \@@_thm_redefine_style:n { plain } } + { + \clist_if_in:NVTF + \c_@@_thm_style_break_clist \l_@@_thm_style_tl + { \@@_thm_redefine_style:n { break } } + { + \@@_error:nx { unknown-theorem-style } + { \l_@@_thm_style_tl } + } + } + } +% \end{macrocode} +% \pkg{ntheorem} 宏包提供的无编号定理带有 |nonumber| 前缀, +% 这里将其加上。 +% \begin{macrocode} + \tl_put_left:Nn \l_@@_thm_style_tl { nonumber } + \fdu_thm_new_no_number:Vxx \l_@@_thm_style_tl {#3} {#4} + } + { +% \end{macrocode} +% 不带 |*| 的版本支持不含“|nonumber|”的所有定理样式。 +% \begin{macrocode} + \clist_clear:N \l_@@_tmpa_clist + \clist_concat:NNN \l_@@_tmpa_clist + \c_@@_thm_style_plain_clist \c_@@_thm_style_break_clist + \clist_if_in:NVF \l_@@_tmpa_clist \l_@@_thm_style_tl + { + \@@_error:nx { unknown-theorem-style } + { \l_@@_thm_style_tl } + } + \fdu_thm_new:VVxx \l_@@_thm_style_tl \l_@@_thm_counter_tl + {#3} {#4} + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_thm_redefine_style:n} +% 重定义定理样式,并给出警告。 +% \begin{macrocode} +\cs_new:Npn \@@_thm_redefine_style:n #1 + { + \@@_warning:nxx { redefine-theorem-style } + {#1} { \l_@@_thm_style_tl } + \tl_set:Nn \l_@@_thm_style_tl {#1} + } +% \end{macrocode} +% \end{macro} +% +% 提示信息。 +% \begin{macrocode} +\@@_msg_new:nn { redefine-theorem-style } + { Theorem~ style~ "#2"~ will~ be~ redefined~ as~ "#1". } +\@@_msg_new:nn { unknown-theorem-style } + { Theorem~ style~ "#1"~ is~ unknown. } +% \end{macrocode} +% +% \begin{macro}{\fdu_thm_new:nnnn,\fdu_thm_new:VVxx} +% 带编号的定理环境。 +% \begin{arguments} +% \item 样式 +% \item 计数器 +% \item 定理环境名称 +% \item 定理头文字 +% \end{arguments} +% \begin{macrocode} +\cs_new:Npn \fdu_thm_new:nnnn #1#2#3#4 + { + \@@_thm_ntheorem_style:n {#1} + \@@_thm_ntheorem_new:w {#3} {#4} [#2] + } +\cs_generate_variant:Nn \fdu_thm_new:nnnn { VVxx } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fdu_thm_new_no_number:nnn, +% \fdu_thm_new_no_number:Vxx} +% 不带编号的定理环境。 +% \begin{arguments} +% \item 样式 +% \item 定理环境名称 +% \item 定理头文字 +% \end{arguments} +% \begin{macrocode} +\cs_new:Npn \fdu_thm_new_no_number:nnn #1#2#3 + { + \@@_thm_ntheorem_style:n {#1} + \@@_thm_ntheorem_new:w {#2} {#3} + } +\cs_generate_variant:Nn \fdu_thm_new_no_number:nnn { Vxx } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fdu_thm_set_qed:n, +% \fdu_thm_set_header_font:n, +% \fdu_thm_set_body_font:n, +% \fdu_thm_set_qed:V, +% \fdu_thm_set_header_font:V, +% \fdu_thm_set_body_font:V} +% 封装 \pkg{ntheorem} 宏包提供的若干命令,分别用以设置证毕符号、 +% 定理头字体和定理正文字体。 +% \begin{macrocode} +\cs_new:Npn \fdu_thm_set_qed:n #1 { \theoremsymbol {#1} } +\cs_new:Npn \fdu_thm_set_header_font:n #1 { \theoremheaderfont {#1} } +\cs_new:Npn \fdu_thm_set_body_font:n #1 { \theorembodyfont {#1} } +\cs_generate_variant:Nn \fdu_thm_set_qed:n { V } +\cs_generate_variant:Nn \fdu_thm_set_header_font:n { V } +\cs_generate_variant:Nn \fdu_thm_set_body_font:n { V } +% \end{macrocode} +% \end{macro} +% +% \end{implementation} +% diff --git a/source/fduthesis.dtx b/source/fduthesis.dtx index 4ba5233..53dc4ad 100644 --- a/source/fduthesis.dtx +++ b/source/fduthesis.dtx @@ -1,44 +1,20 @@ % \iffalse meta-comment -% !TeX program = XeLaTeX -% !TeX encoding = UTF-8 % % Copyright (C) 2017--2019 by Xiangdong Zeng % -% This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either -% version 1.3c of this license or (at your option) any later -% version. The latest version of this license is in: +% This work may be distributed and/or modified under the conditions of the +% LaTeX Project Public License, either version 1.3c of this license or (at +% your option) any later version. The latest version of this license is in: % % http://www.latex-project.org/lppl.txt % -% and version 1.3 or later is part of all distributions of -% LaTeX version 2005/12/01 or later. +% and version 1.3 or later is part of all distributions of LaTeX version +% 2005/12/01 or later. % % This work has the LPPL maintenance status `maintained'. % % The Current Maintainer of this work is Xiangdong Zeng. % -% This work consists of the files fduthesis.dtx, -% fduthesis-doc.dtx, -% fduthesis-logo.dtx, -% fduthesis-template.tex, -% and the derived files fduthesis.ins, -% fduthesis.cls, -% fduthesis-en.cls, -% fduthesis.def, -% fdudoc.cls, -% fdulogo.sty, -% fdulogo-example.tex, -% fduthesis-cover.tex, -% fduthesis-en.tex, -% fudan-emblem.pdf, -% fudan-emblem-new.pdf, -% fudan-name.pdf, -% fduthesis.pdf, -% fduthesis-en.pdf, -% fduthesis-code.pdf, -% and README.md. -% %<*internal> \iffalse % @@ -144,65 +120,89 @@ Copyright (C) 2017–2019 by Xiangdong Zeng . Copyright (C) 2017--2019 by Xiangdong Zeng - This work may be distributed and/or modified under the - conditions of the LaTeX Project Public License, either - version 1.3c of this license or (at your option) any later - version. The latest version of this license is in: + This work may be distributed and/or modified under the conditions of the + LaTeX Project Public License, either version 1.3c of this license or (at + your option) any later version. The latest version of this license is in: http://www.latex-project.org/lppl.txt - and version 1.3 or later is part of all distributions of - LaTeX version 2005/12/01 or later. + and version 1.3 or later is part of all distributions of LaTeX version + 2005/12/01 or later. This work has the LPPL maintenance status `maintained'. The Current Maintainer of this work is Xiangdong Zeng. - This work consists of the files fduthesis.dtx, - fduthesis-doc.dtx, - fduthesis-logo.dtx, - fduthesis-template.tex, - and the derived files fduthesis.ins, - fduthesis.cls, - fduthesis-en.cls, - fduthesis.def, - fdudoc.cls, - fdulogo.sty, - fdulogo-example.tex, - fduthesis-cover.tex, - fduthesis-en.tex, - fudan-emblem.pdf, - fudan-emblem-new.pdf, - fudan-name.pdf, - fduthesis.pdf, - fduthesis-en.pdf, - fduthesis-code.pdf, - and README.md. - \endpreamble -\generate{ - \usedir{tex/latex/fduthesis} - \file{\jobname.cls} {\from{\jobname.dtx}{class}} - \file{\jobname-en.cls} {\from{\jobname.dtx}{class-en}} - \file{\jobname.def} {\from{\jobname.dtx}{definition}} - \file{fdudoc.cls} {\from{\jobname.dtx}{doc} - \from{\jobname-doc.dtx}{doc}} - \file{fdulogo.sty} {\from{\jobname.dtx}{logo} - \from{\jobname-logo.dtx}{logo}} - \file{fdulogo-example.tex} {\from{\jobname.dtx}{ex-logo} - \from{\jobname-logo.dtx}{ex-logo}} - \file{\jobname-cover.tex} {\from{\jobname.dtx}{cover} - \from{\jobname-logo.dtx}{cover}} +\generate + { + \file{fduthesis.cls} + { + \from{fduthesis.dtx} {class} + \from{fduthesis-opening.dtx} {class} + \from{fduthesis-layout.dtx} {class} + \from{fduthesis-font.dtx} {class} + \from{fduthesis-cover.dtx} {class} + \from{fduthesis-front.dtx} {class} + \from{fduthesis-footnote.dtx} {class} + \from{fduthesis-theorem.dtx} {class} + \from{fduthesis-bib.dtx} {class} + \from{fduthesis-hyperref.dtx} {class} + \from{fduthesis-interface.dtx} {class} + } + \file{fduthesis-en.cls} + { + \from{fduthesis.dtx} {class-en} + \from{fduthesis-opening.dtx} {class-en} + \from{fduthesis-layout.dtx} {class-en} + \from{fduthesis-font.dtx} {class-en} + \from{fduthesis-cover.dtx} {class-en} + \from{fduthesis-front.dtx} {class-en} + \from{fduthesis-footnote.dtx} {class-en} + \from{fduthesis-theorem.dtx} {class-en} + \from{fduthesis-bib.dtx} {class-en} + \from{fduthesis-hyperref.dtx} {class-en} + \from{fduthesis-interface.dtx} {class-en} + } + \file{fduthesis.def} + { + \from{fduthesis.dtx} {definition} + \from{fduthesis-interface.dtx} {definition} + } + \file{fdudoc.cls} + { + \from{fduthesis.dtx} {doc} + \from{fduthesis-fdudoc.dtx} {doc} + } + \file{fdulogo.sty} + { + \from{fduthesis.dtx} {logo} + \from{fduthesis-fdulogo.dtx} {logo} + } + \file{fdulogo-example.tex} + { + \from{fduthesis.dtx} {ex-logo} + \from{fduthesis-fdulogo.dtx} {ex-logo} + } + \file{fduthesis-cover.tex} + { + \from{fduthesis.dtx} {cover} + \from{fduthesis-fdulogo.dtx} {cover} + } % %<*internal> - \usedir{source/latex/fduthesis} - \file{\jobname.ins} {\from{\jobname.dtx}{install}} + \file{fduthesis.ins} + { + \from{fduthesis.dtx} {install} + } % %<*install> - \usedir{doc/latex/fduthesis} - \nopreamble\nopostamble - \file{README.md} {\from{\jobname.dtx}{readme}} + \nopreamble\nopostamble + \file{README.md} + { + \from{fduthesis.dtx} {readme} + } } \obeyspaces @@ -234,7 +234,7 @@ Copyright (C) 2017–2019 by Xiangdong Zeng . % % %\NeedsTeXFormat{LaTeX2e} -%\RequirePackage{expl3} +%\RequirePackage[enable-debug]{expl3} %<*!(driver|install|ex-logo|cover)> %\GetIdInfo $Id: fduthesis.dtx 0.7d 2019-04-03 12:00:00Z Xiangdong Zeng $ % {Thesis template for Fudan University} @@ -250,7 +250,7 @@ Copyright (C) 2017–2019 by Xiangdong Zeng . % {\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} % %<*driver> -% \PassOptionsToPackage{showframe}{geometry} +\PassOptionsToPackage{showframe}{geometry} \documentclass{fdudoc} \usepackage{multirow,xpinyin} \hypersetup{ @@ -261,50 +261,70 @@ Copyright (C) 2017–2019 by Xiangdong Zeng . \def\FSFW{“{\xeCJKsetup{PunctStyle=banjiao}.}”} % U+FF0E \def\COFW{“{\xeCJKsetup{PunctStyle=banjiao}:}”} % U+FF1A \def\SCFW{“{\xeCJKsetup{PunctStyle=banjiao};}”} % U+FF1B -% Libertinus Math 字体不包含 `\QED`,暂时使用 `\blacksquare` 代替 -\AtBeginDocument{\def\QED{\blacksquare}} -%^^A! \PassOptionsToPackage{scheme=plain, linespread=1.1}{ctex} -%^^A! \documentclass{fdudoc} -%^^A! \hypersetup{ -%^^A! pdftitle = {fduthesis: LaTeX Thesis Template for Fudan University}, -%^^A! pdfauthor = {Xiangdong Zeng}} -%^^A! \ctexset{ -%^^A! section = {name = {}, format+ = \raggedright}, -%^^A! subsubsection/tocline = {\CTEXnumberline{#1}#2}} -%^^A! \pagestyle{headings} -%^^A! \def\FSID{{\xeCJKsetup{PunctStyle=banjiao}。}} -%^^A! \def\FSFW{{\xeCJKsetup{PunctStyle=banjiao}.}} -%^^A! \AtBeginDocument{\def\QED{\blacksquare}} -%^^A! + +\ExplSyntaxOn +\cs_new:Npn \__fdudoc_end_input:n #1 + { \noindent \textit { \small (以上代码位于~ \file {#1})} } +\tl_clear:c { cl@part } +\ExplSyntaxOff + +\ctexset{part={name={}, number= \Roman{part}}} +\def\ApTeX{Ap\TeX} + +\AtBeginDocument{\DeleteShortVerb\"} \title{\textcolor{MaterialIndigo800}{% - \textbf{fduthesis: 复旦大学论文\xpinyin[font=\sffamily]{模}{mu2}板}}} + \textbf{fduthesis: 复旦大学论文模板\\(代码实现)}}} \author{曾祥东} \date{2019/04/03\quad v0.7d% \thanks{\url{https://github.com/stone-zeng/fduthesis}.}} -%^^A! \title{\textcolor{MaterialIndigo800}{% -%^^A! \textbf{The \textsf{fduthesis} Class \\ -%^^A! \LaTeX{} Thesis Template for Fudan University}}} -%^^A! \author{Xiangdong Zeng} -%^^A! \date{2019/04/03\quad v0.7d% -%^^A! \thanks{\url{https://github.com/stone-zeng/fduthesis}.}} -%^^A! \begin{document} -%^^A! \begin{document} -%^^A! - \DisableImplementation -% \EnableImplementation -% \def\FDUCODEDOC{} - \DocInput{fduthesis.dtx} -% \DocInput{fduthesis-doc.dtx,fduthesis-logo.dtx} -% \IndexLayout -% \PrintChanges -% \PrintIndex + +\maketitle +\vfill +\begin{center} + \includegraphics[width=8cm]{../logo/fduthesis-cover.pdf} +\end{center} +\vfill +\thispagestyle{plain} +\clearpage + +\tableofcontents + +\EnableImplementation +% 代码部分的页边距 +\newgeometry{ + left = 2.00 in, + right = 1.25 in, + top = 1.25 in, + bottom = 1.00 in, + marginpar = 2.00 in, + showframe = true +} +\DocInput{fduthesis.dtx, + fduthesis-opening.dtx, + fduthesis-layout.dtx, + fduthesis-font.dtx, + fduthesis-cover.dtx, + fduthesis-front.dtx, + fduthesis-footnote.dtx, + fduthesis-theorem.dtx, + fduthesis-bib.dtx, + fduthesis-hyperref.dtx, + fduthesis-interface.dtx, + fduthesis-fdudoc.dtx, + fduthesis-fdulogo.dtx} +\IndexLayout +\PrintChanges +\PrintIndex + \end{document} % % \fi % +% \begin{implementation} +% % \changes{v0.1}{2017/02/15}{开始编写模板。} % \changes{v0.2}{2017/02/19}{使用 Git 进行版本控制,并发布至 GitHub。} % \changes{v0.3}{2017/02/21}{使用 \cls{doc} 和 \pkg{DocStrip}。} @@ -327,5817 +347,22 @@ Copyright (C) 2017–2019 by Xiangdong Zeng . % \changes{v0.7b}{2018/04/29}{支持 \TeXLive{} 2018。} % \changes{v0.7b}{2018/05/06}{将校名、校徽图片添加至发行版。} % -% \CheckSum{0} -% -% \CharacterTable -% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z -% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z -% Digits \0\1\2\3\4\5\6\7\8\9 -% Exclamation \! Double quote \" Hash (number) \# -% Dollar \$ Percent \% Ampersand \& -% Acute accent \' Left paren \( Right paren \) -% Asterisk \* Plus \+ Comma \, -% Minus \- Point \. Solidus \/ -% Colon \: Semicolon \; Less than \< -% Equals \= Greater than \> Question mark \? -% Commercial at \@ Left bracket \[ Backslash \\ -% Right bracket \] Circumflex \^ Underscore \_ -% Grave accent \` Left brace \{ Vertical bar \| -% Right brace \} Tilde \~} -% -%^^A 禁止使用 " 符号作为抄录文本缩略符 -% \DeleteShortVerb\" -%^^A! \DeleteShortVerb\" -%^^A! -% -%^^A 封面与目录的页边距 -%^^A+ -% \newgeometry{ -% left = 1.25 in, -% right = 1.25 in, -% top = 1.25 in, -% bottom = 1.00 in -% } -% -% \maketitle -% \vfill -% \begin{center} -% \includegraphics[width=8cm]{../logo/fduthesis-cover.pdf} -% \end{center} -% \vfill -% \thispagestyle{plain} -% \clearpage -% -% \tableofcontents -% -%^^A- -% -% \EnableDocumentation -%^^A \DisableDocumentation -% -% \begin{documentation} -% -%^^A 用户手册的页边距 -%^^A+ -% \newgeometry{ -% left = 1.65 in, -% right = 0.80 in, -% top = 1.25 in, -% bottom = 1.00 in -% } -% -%^^A- -% -% \section{介绍} -%^^A! \section{Introduction} -%^^A! -% -% 目前,在网上可以找到的复旦大学 \LaTeX{} 论文模板主要有以下这些: -% \begin{itemize} -% \item 数学科学学院 2001 级的何力同学和李湛同学在 2005 年根据 -% 学校要求所设计的 \cls{毕业论文格式 tex04 版},以及 2008 年 -% 张越同学修改之后的 \cls{毕业论文格式 tex08 版},这是专为 -% 数院本科生撰写毕业论文而设计的 -% \scite{数院毕业论文格式,数院毕业论文格式更新}; -% \item Pandoxie 编写的 \cls{FDU-Thesis-Latex} -% \scite{pandoxie2014fduthesislatex},基本满足了博士(硕士) -% 毕业论文格式要求,使用人数较多; -% \item richarddzh 编写的硕士论文模板 \cls{fudan-thesis} -% \scite{richard2016fudanthesis}。 -% \end{itemize} -% 以上这些模板大都没有经过系统的设计,也鲜有后续维护。相比之下, -% 清华大学 \scite{thuthesis}、重庆大学 \scite{cquthesis}、 -% 中国科学技术大学 \scite{ustcthesis} 中国科学院大学 \scite{ucasthesis} -% 以及友校上海交通大学 \scite{sjtuthesis}等,都有成熟、 -% 稳定的解决方案,值得参考。 -% -% 本模板将借鉴前辈经验,重新设计,并使用 \LaTeX3 -% \scite{source3} 编写,以适应 \TeX{} 技术发展潮流; -% 同时还将构建一套简洁的接口,方便用户使用。 -%^^A! \cls{fduthesis} is a thesis template for Fudan University. -%^^A! This template is mostly written in \LaTeX3 syntax, and -%^^A! provides a simple interface for users. -%^^A! -% -% \subsection*{\LaTeX{} 入门} -%^^A! \subsection*{Getting started with \LaTeX{}} -%^^A! -% -% 本文档并非是一份 \LaTeX{} 零基础教程。如果您是完完全全的新手, -% 建议先阅读相关入门文档,如刘海洋编著的《\LaTeX{} 入门》 -% \scite{刘海洋2013latex入门} 第一章,或大名鼎鼎的“\pkg{lshort}” -% \scite{lshort} 及其中文翻译版 \scite{lshort-zh-cn}。当然, -% 网络上的入门教程多如牛毛,您可以自行选取。 -%^^A! This documentation is \emph{not} a \LaTeX{} tutorial at -%^^A! starter's level. If you are totally a newbie, please read some -%^^A! introductions like the famous \pkg{lshort}. Of course, there -%^^A! are countless \LaTeX{} tutorials on the Internet. You can -%^^A! choose whatever you like. -%^^A! -% -% \subsection*{关于本文档} -%^^A! \subsection*{About this documentation} -%^^A! -% -% 本文采用不同字体表示不同内容。无衬线字体表示宏包名称,如 -% \pkg{xeCJK} 宏包、\cls{fduthesis} 文档类等;等宽字体表示代码或 -% 文件名,如 \cs{fdusetup} 命令、\env{abstract} 环境、\TeX{} 文档 -% \file{thesis.tex} 等;带有尖括号的楷体(或西文斜体)表示命令参数, -% 如 \meta{模板选项}、\meta{English title} 等。在使用时,参数两侧 -% 的尖括号不必输入。示例代码进行了语法高亮处理,以方便阅读。 -%^^A! In this documentation, different typefaces are used to -%^^A! represent different contents. Packages and classes are shown -%^^A! in sans-serif font, e.g.\ \pkg{xeCJK} package and -%^^A! \cls{fduthesis} class. Commands and file names are shown in -%^^A! monospaced font, e.g.\ command \cs{fdusetup}, environment -%^^A! \env{abstract} and \TeX{} document \file{thesis.tex}. -%^^A! Italic-shaped font with angle brackets outside means arguments, -%^^A! e.g.\ \meta{English title}. However, you do not need to type -%^^A! the brackets when using these commands. The example code has -%^^A! proper syntax highlighting so it will be much easier to read. -%^^A! -% -% 在用户手册中,带有蓝色侧边线的为 \LaTeX{} 代码,而带有粉色侧边线 -% 的则为命令行代码,请注意区分。模板提供的选项、命令、环境等, -% 均用横线框起,同时给出使用语法和相关说明。 -%^^A! \LaTeX{} code lines will have a blue line on their left, while -%^^A! for command lines there will be a pink line. The options, -%^^A! commands and environments in \cls{fduthesis} will be surrounded -%^^A! by two horizontal lines. Their usages and descriptions are -%^^A! provided at the same time. -%^^A! -% -% 本模板中的选项、命令或环境可以分为以下三类: -% \begin{itemize} -% \item 名字后面带有 \rexptarget\rexpstar{} 的,表示只能在^^A -% \emph{中文模板}中使用; -% \item 名字后面带有 \exptarget\expstar{} 的,表示只能在^^A -% \emph{英文模板}中使用; -% \item 名字后面不带有特殊符号的,表示既可以在中文模板中使用, -% 也可以在英文模板中使用。 -% \end{itemize} -%^^A! The options, commands and environments in \cls{fduthesis} can be -%^^A! divided into the following three types: -%^^A! \begin{itemize} -%^^A! \item Those can be only used in \emph{Chinese templates} are -%^^A! indicated by \rexptarget\rexpstar{}. -%^^A! \item Those can be only used in \emph{English templates} are -%^^A! indicated by \rexptarget\expstar{}. -%^^A! \item If they do not have special characters afterwards, then -%^^A! you can use them in both Chinese and English templates. -%^^A! \end{itemize} -%^^A! -% -% 代码实现主要面向对 \LaTeX{} 宏包开发感兴趣的用户。如果您有任何改进 -% 意见或者功能需求,欢迎前往 GitHub 仓库 -% \href{https://github.com/stone-zeng/fduthesis/issues}{提交 issue}。 -%^^A! If you want to read the implementation part, please turn to the -%^^A! Chinese version. Any issues or feature requests can be submitted -%^^A! in the \href{https://github.com/stone-zeng/fduthesis/issues}% -%^^A! {GitHub repository}. -%^^A! -% -% 文档的最后还提供了版本历史和代码索引,以供查阅。 -% -% \section{安装} -%^^A! \section{Installation} -%^^A! -% -% \subsection{获取 \cls{fduthesis}} -%^^A! \subsection{Obtaining \cls{fduthesis}} -%^^A! -% -% \subsubsection{标准安装} -%^^A! \subsubsection{Standard installation} -%^^A! -% -% 如果没有特殊理由,始终建议您使用宏包管理器安装 \cls{fduthesis}。 -% 例如在 \TeXLive{} 中,执行(可能需要管理员权限) -% \begin{shellexample}[morekeywords={tlmgr,install}] -% tlmgr install fduthesis -% \end{shellexample} -% 即可完成安装。 -%^^A! If there are no special reasons, it is always recommended to -%^^A! install \cls{fduthesis} with a package manager. For example, -%^^A! the following command will install the package in \TeXLive{} -%^^A! (administrator permission may be required): -%^^A! \begin{shellexample}[morekeywords={tlmgr,install}] -%^^A! tlmgr install fduthesis -%^^A! \end{shellexample} -%^^A! -% -% 在 \TeXLive{} 和 \MiKTeX{} 中,您还可以通过图形界面进行安装, -% 此处不再赘述。 -%^^A! In \TeXLive{} and \MiKTeX{}, you can also install \cls{fduthesis} -%^^A! through a graphical interface. It's rather simple and will not be -%^^A! described here. -%^^A! -% -% \subsubsection{手动安装} -%^^A! \subsubsection{Install manually} -%^^A! -% -% 如果您需要从 CTAN 上自行下载并手动安装,较好的方法是使用 TDS -% 安装包: -% \begin{itemize} -% \item 从 CTAN 上下载 \cls{fduthesis} 的 -% \href{http://mirror.ctan.org/install/macros/latex/contrib/fduthesis.tds.zip}{TDS 安装包}; -% \item 按目录结构将 \file{fduthesis.tds.zip} 中的文件复制到 \TeX{} -% 发行版的本地 TDS 根目录; -% \item 执行 \bashcmd{mktexlsr} 刷新文件名数据库以完成安装。 -% \end{itemize} -%^^A! If you want to download the template from CTAN and install it -%^^A! manually, the recommended way is to use the TDS ZIP file: -%^^A! \begin{itemize} -%^^A! \item Download the \href{http://mirror.ctan.org/install/macros/latex/contrib/fduthesis.tds.zip}% -%^^A! {TDS ZIP file} for \cls{fduthesis}; -%^^A! \item Copy all the files in \file{fduthesis.tds.zip} into the -%^^A! local TDS directory of \TeX{} distribution. -%^^A! \item Run \bashcmd{mktexlsr} to update the ls-R database. -%^^A! \end{itemize} -%^^A -% 您也可以从源代码直接生成模板(不推荐): -% \begin{itemize} -% \item 打开 \href{https://github.com/stone-zeng/fduthesis}^^A -% {项目主页},点击“Clone or download”,并选择“Download ZIP”, -% 下载 \file{fduthesis-master.zip};如果您的电脑中安装有 git -% 程序,也可通过以下命令直接克隆代码仓库: -% \begin{shellexample}[gobble=7,alsoletter={.},^^A -% morekeywords={git,clone}] -% git clone https://github.com/stone-zeng/fduthesis.git -% \end{shellexample} -% \item 解压并进入到 \file{source} 文件夹,执行以下命令以生成 -% 模板的各组件: -% \begin{shellexample}[gobble=7,morekeywords={xetex}] -% xetex fduthesis.dtx -% \end{shellexample} -% \item 将生成的文档类(\file{.cls})、宏包(\file{.sty})以及 -% 参数配置文件(\file{.def})复制到 \TeX{} 发行版本地 TDS 树 -% 的 \path{texmf-local/tex/latex/fduthesis/} 目录下,并执行 -% \bashcmd{mktexlsr} 刷新文件名数据库,方可完成安装。 -% \item 使用 \cls{fduthesis} 撰写论文时,您还需要从代码仓库下的 -% \file{testfiles/support} 目录中复制 \file{fudan-name.pdf} -% 文件至工作目录,以确保封面中的校名图片可以正确显示。 -% \end{itemize} -%^^A! Although not recommended, you may generate the whole template -%^^A! from source code as well: -%^^A! \begin{itemize} -%^^A! \item Open the project's \href{https://github.com/stone-zeng/fduthesis}% -%^^A! {homepage}, click ``Clone or download'' and choose -%^^A! ``Download ZIP'' to download \file{fduthesis-master.zip}. -%^^A! If you have git program on your computer, you can also -%^^A! clone the repository directly: -%^^A! \begin{shellexample}[gobble=5,alsoletter={.},% -%^^A! morekeywords={git,clone}] -%^^A! git clone https://github.com/stone-zeng/fduthesis.git -%^^A! \end{shellexample} -%^^A! \item Extract files, and get into the \file{source} directory. -%^^A! Run the following command to generate all the components: -%^^A! \begin{shellexample}[gobble=5,morekeywords={xetex}] -%^^A! xetex fduthesis.dtx -%^^A! \end{shellexample} -%^^A! \item Copy the generated document classes (\file{.cls}), -%^^A! packages (\file{.sty}) and configuration files (\file{.def}) -%^^A! into \path{texmf-local/tex/latex/fduthesis/} under the local -%^^A! TDS tree of \TeX{} distribution. Then run \bashcmd{mktexlsr} -%^^A! to update the ls-R database. -%^^A! \item When writing your thesis with \cls{fduthesis}, you need -%^^A! to copy the file \file{fudan-name.pdf} (can be found in the -%^^A! \file{testfiles/support} directory of the Git repository) to -%^^A! your working directory, to make sure that the logo in the -%^^A! cover can be displayed correctly. -%^^A! \end{itemize} -%^^A! -% -% \subsubsection{扁平化安装} -%^^A! \subsubsection{\cls{fduthesis} on the fly} -%^^A! -% -% 如果您不希望安装本模板,但需要立刻使用,也可以使用模板提供的安装脚本。 -% 从 GitHub 上获取代码仓库后,执行 \file{install-win.bat}(Windows 系统) -% 或 \file{install-linux.sh}(Linux 系统),所有需要的文件便会在 -% \file{thesis} 文件夹中生成。 -%^^A! If you don't want to install \cls{fduthesis} but need to use it -%^^A! at once, you can try the installation scripts. Download the -%^^A! repository from GitHub, run \file{install-win.bat} (on Windows) -%^^A! or \file{install-linux.sh} (on Linux), then all the necessary -%^^A! files will be found in the \file{thesis} folder. -%^^A! -% -% \subsection{模板组成} -%^^A! \subsection{Composition of the template} -%^^A! -% -% 本模板主要包含核心文档类、配置文件、附属宏包以及用户文档等几个 -% 部分,其具体组成见表~\ref{tab:fduthesis-components}。 -%^^A! There are several parts in \cls{fduthesis}, including kernel -%^^A! template classes, configuration files, affiliated packages and -%^^A! user's guides. More details are listed in table~% -%^^A! \ref{tab:fduthesis-components}. -%^^A! -% -% \begin{table}[ht] -% \caption{\cls{fduthesis} 的主要组成部分} -% \label{tab:fduthesis-components} -% \centering -% \begin{tabular}{lp{20em}} -% \toprule -% \textbf{文件} & \textbf{功能说明} \\ -% \midrule -% \file{fduthesis.cls} & 中文模板文档类 \\ -% \file{fduthesis-en.cls} & 英文模板文档类 \\ -% \file{fduthesis.def} & 参数配置文件,用于设定 -% \cls{fduthesis} 的初始参数,不建议您自行改动 \\ -% \file{fdudoc.cls} & 用户手册文档类 \\ -% \file{fdulogo.sty} & 复旦大学视觉识别系统 \\ -% \file{fudan-emblem.pdf} & 校徽 \\ -% \file{fudan-emblem-new.pdf} & 校徽(重修版) \\ -% \file{fudan-name.pdf} & 校名图片 \\ -% \file{README.md} & 简要自述 \\ -% \ifdefined\FDUCODEDOC -% \file{fduthesis.pdf} & 中文用户手册 \\ -% \file{fduthesis-en.pdf} & 英文用户手册 \\ -% \file{fduthesis-code.pdf} & 模板实现代码(本文档) \\ -% \else -% \file{fduthesis.pdf} & 中文用户手册(本文档) \\ -% \file{fduthesis-en.pdf} & 英文用户手册 \\ -% \file{fduthesis-code.pdf} & 模板实现代码 \\ -% \fi -% \file{fduthesis-template.tex} & 空白模板,可据此为基础完成论文 -% 撰写 \\ -% \bottomrule -% \end{tabular} -% \end{table} -%^^A! \begin{table}[ht] -%^^A! \caption{The main components of \cls{fduthesis}} -%^^A! \label{tab:fduthesis-components} -%^^A! \centering -%^^A! \begin{tabular}{lp{24em}} -%^^A! \toprule -%^^A! \textbf{Files} & \textbf{Descriptions} \\ -%^^A! \midrule -%^^A! \file{fduthesis.cls} & Document class for Chinese thesis. \\ -%^^A! \file{fduthesis-en.cls} & Document class for English thesis.\\ -%^^A! \file{fduthesis.def} & Configuration parameters file -%^^A! for \cls{fduthesis}. Please do \emph{not} modify it. \\ -%^^A! \file{fdudoc.cls} & Document class for user guides. \\ -%^^A! \file{fdulogo.sty} & Fudan University's visual identity. \\ -%^^A! \file{fudan-emblem.pdf} & University emblem. \\ -%^^A! \file{fudan-emblem-new.pdf} & University emblem (revised version). \\ -%^^A! \file{fudan-name.pdf} & Figure of university name. \\ -%^^A! \file{README.md} & The brief introduction. \\ -%^^A! \file{fduthesis.pdf} & User's guide in Chinese. \\ -%^^A! \file{fduthesis-en.pdf} & User's guide in English (this -%^^A! document). \\ -%^^A! \file{fduthesis-code.pdf} & Code implementation. \\ -%^^A! \file{fduthesis-template.tex} & An empty thesis template, and you can -%^^A! write your thesis based on it. \\ -%^^A! \bottomrule -%^^A! \end{tabular} -%^^A! \end{table} -%^^A! -% -% \section{使用说明} -%^^A! \section{User's guide} -%^^A! -% -% \subsection{基本用法} -%^^A! \subsection{Getting started} -%^^A! -% -% 以下是一份简单的 \TeX{} 文档,它演示了 \cls{fduthesis} -% 的最基本用法: -%^^A! Here is a minimal \TeX{} file for \cls{fduthesis}: -%^^A+ -% \begin{latexexample}[deletetexcs={\documentclass},% -% moretexcs={\chapter},morekeywords={\documentclass},% -% emph={[2]document}] -% % thesis.tex -% \documentclass{fduthesis} -% \begin{document} -% \chapter{欢迎} -% \section{Welcome to fduthesis!} -% 你好,\LaTeX{}! -% \end{document} -% \end{latexexample} -%^^A- -%^^A! -% -% 按照 \ref{subsec:编译方式}~小节中的方式编译该文档,您应当得到 -% 一篇 5 页的文章。当然,这篇文章的绝大部分都是空白的。 -%^^A! Compile this file under the instructions in subsection~% -%^^A! \ref{subsec:compilation}, you will get a 5-page article. -%^^A! Of course, most of it will be blank, as you may predicate. -%^^A! -% -% 英文模板可以用类似的方式使用: -%^^A! The English version can be used in the same way: -%^^A+ -% \begin{latexexample}[deletetexcs={\documentclass},% -% moretexcs={\chapter},morekeywords={\documentclass},% -% emph={[2]document}] -% % thesis-en.tex -% \documentclass{fduthesis-en} -% \begin{document} -% \chapter{Welcome} -% \section{Welcome to fduthesis!} -% Hello, \LaTeX{}! -% \end{document} -% \end{latexexample} -%^^A- -% 英文模板只对正文部分进行了改动,封面、指导小组成员以及声明页仍将 -% 显示为中文。 -%^^A! The differences between English and Chinese version only -%^^A! live in the main body. Thesis cover, instructors list and -%^^A! declaration page are still printed in Chinese. -%^^A! -% -% \subsection{编译方式} \label{subsec:编译方式} -%^^A! \subsection{Compilation} \label{subsec:compilation} -%^^A! -% -% 本模板不支持 \pdfTeX{} 引擎,请使用 \XeLaTeX{} 或 \LuaLaTeX{} -% 编译。推荐使用 \XeLaTeX{}。为了生成正确的目录、脚注以及交叉引用, -% 您至少需要连续编译两次。 -%^^A! \cls{fduthesis} does NOT support \pdfTeX{}. Please use -%^^A! \XeLaTeX{} or \LuaLaTeX{} to compile, and \XeLaTeX{} is -%^^A! recommended. To get the correct table of contents, footnotes -%^^A! and cross-references, you need to compile the source file at -%^^A! least twice. -%^^A! -% -% 以下代码中,假设您的 \TeX{} 源文件名为 \file{thesis.tex}。 -% 使用 \XeLaTeX{} 编译论文,请在命令行中执行 -% \begin{shellexample}[morekeywords={xelatex}] -% xelatex thesis -% xelatex thesis -% \end{shellexample} -% 或使用 \pkg{latexmk}: -% \begin{shellexample}[morekeywords={latexmk},emph={-xelatex}] -% latexmk -xelatex thesis -% \end{shellexample} -%^^A! In the following example, suppose your \TeX{} source file is -%^^A! \file{thesis.tex}. Please execute the following commands if -%^^A! you want to use \XeLaTeX{}: -%^^A! \begin{shellexample}[morekeywords={xelatex}] -%^^A! xelatex thesis -%^^A! xelatex thesis -%^^A! \end{shellexample} -%^^A! You can use \pkg{latexmk} as well: -%^^A! \begin{shellexample}[morekeywords={latexmk},emph={-xelatex}] -%^^A! latexmk -xelatex thesis -%^^A! \end{shellexample} -%^^A! -% -% 使用 \LuaLaTeX{} 编译论文,请在命令行中执行 -% \begin{shellexample}[morekeywords={lualatex}] -% lualatex thesis -% lualatex thesis -% \end{shellexample} -% 或者 -% \begin{shellexample}[morekeywords={latexmk},emph={-lualatex}] -% latexmk -lualatex thesis -% \end{shellexample} -%^^A! \LuaLaTeX{} can be used in a similar way: -%^^A! \begin{shellexample}[morekeywords={lualatex}] -%^^A! lualatex thesis -%^^A! lualatex thesis -%^^A! \end{shellexample} -%^^A! or -%^^A! \begin{shellexample}[morekeywords={latexmk},emph={-lualatex}] -%^^A! latexmk -lualatex thesis -%^^A! \end{shellexample} -%^^A! -% -% \subsection{模板选项} -%^^A! \subsection{Options of the template} -%^^A! -% -% 所谓“模板选项”,指需要在引入文档类的时候指定的选项: -% \begin{latexexample}[deletetexcs={\documentclass},% -% morekeywords={\documentclass}] -% \documentclass(*\oarg{模板选项}*){fduthesis} -% \documentclass(*\oarg{模板选项}*){fduthesis-en} -% \end{latexexample} -%^^A! You can specify some \emph{template options} when loading -%^^A! \cls{fduthesis}: -%^^A! \begin{latexexample}[deletetexcs={\documentclass},% -%^^A! morekeywords={\documentclass}] -%^^A! \documentclass(*\oarg{options}*){fduthesis} -%^^A! \documentclass(*\oarg{options}*){fduthesis-en} -%^^A! \end{latexexample} -%^^A! -% -% 有些模板选项为布尔型,它们只能在 \opt{true} 和 \opt{false} -% 中取值。对于这些选项,\kvopt{\meta{选项}}{true} 中的“|= true|” -% 可以省略。 -%^^A! Some options are \emph{boolean} --- they only take the value -%^^A! \opt{true} or \opt{false}. For these options, you can -%^^A! abbreviate ``\kvopt{\meta{option}}{true}'' simply to -%^^A! ``\opt{\meta{option}}''. -%^^A! -% -%^^A+ -% \begin{function}[added=2018-02-01]{type} -% \begin{fdusyntax}[emph={[1]type}] -% type = (**) -% \end{fdusyntax} -%^^A- -% 选择论文类型。三种选项分别代表博士学位论文、硕士学位论文和本科 -% 毕业论文。 -% \end{function} -%^^A! Choose the type of your thesis. The three options represent -%^^A! doctoral dissertation, master degree thesis and undergraduate -%^^A! thesis, respectively. -%^^A! \end{function} -%^^A! -% -% \begin{function}{oneside,twoside} -% 指明论文的单双面模式,默认为 \opt{twoside}。该选项会影响每章 -% 的开始位置,还会影响页眉样式。 -% \end{function} -%^^A! \begin{function}{oneside,twoside} -%^^A! Specify whether single or double sided output should be -%^^A! generated. \opt{twoside} will be chosen by default. These -%^^A! option will determine where the new chapters begin and how -%^^A! the headers display. The option \opt{twoside} does -%^^A! \emph{not} tell the printer to actually make a two-sided -%^^A! printout. -%^^A! \end{function} -%^^A! -% -% 在双面模式(\opt{twoside})下,按照通常的排版惯例,每章应只从 -% 奇数页(在右)开始;而在单页模式(\opt{oneside})下,则可以从 -% 任意页面开始。本模板中,目录、摘要、符号表等均视作章,也按相同 -% 方式排版。 -%^^A! If choosing \opt{twoside}, chapters will begin at the odd pages -%^^A! (right hand). However, they will begin at arbitrary pages -%^^A! available when choosing \opt{oneside}. Table of contents, -%^^A! abstract and the list of symbols are considered as chapters and -%^^A! processed in the same way. -%^^A! -% -% 双面模式下,正文部分偶数页(在左)的左页眉显示章标题,奇数页 -% (在右)的右页眉显示节标题;前置部分的页眉按同样格式显示,但文字 -% 均为对应标题(如“目录”、“摘要”等)。 -% 而在单面模式下,正文部分则页面不分奇偶,均同时显示左、右页眉, -% 文字分别为章标题和节标题;前置部分只有中间页眉,显示对应标题。 -%^^A! At two-sided mode, left headers on the even pages (left hand) -%^^A! in \emph{main body} will show the title of chapters, while the -%^^A! right headers on the odd pages (right hand) will show the -%^^A! title of sections. Headers in \emph{front matter} have the -%^^A! same style, but they will only show the title as ``Contents'', -%^^A! ``Abstract'', etc. -%^^A! -%^^A! At one-sided mode, both left and right headers on \emph{all} -%^^A! pages in main body will be shown. The text is the title of -%^^A! chapters and sections, respectively. In front matter, there -%^^A! are only middle headers, which show the corresponding titles. -%^^A! -% -% \begin{function}{draft} -% \begin{fdusyntax}[emph={[1]draft}] -% draft = (*<\TFF>*) -% \end{fdusyntax} -% 选择是否开启草稿模式,默认关闭。 -% \end{function} -%^^A! \begin{function}{draft} -%^^A! \begin{fdusyntax}[emph={[1]draft}] -%^^A! draft = (*<\TFF>*) -%^^A! \end{fdusyntax} -%^^A! Enable draft mode. Default off. -%^^A! \end{function} -%^^A! -% -% 草稿模式为全局选项,会影响到很多宏包的工作方式。 -% 开启之后,主要的变化有: -% \begin{itemize} -% \item 把行溢出的盒子显示为黑色方块; -% \item 不实际插入图片,只输出一个占位方框; -% \item 关闭超链接渲染,也不再生成 PDF 书签; -% \item 显示页面边框。 -% \end{itemize} -%^^A! \opt{draft} is a global option and will affect many packages. -%^^A! You may notice the following changes when using \opt{draft}: -%^^A! \begin{itemize} -%^^A! \item Lines with overfull \tn{hbox}'s will be marked with -%^^A! a thick black square on the right margin. -%^^A! \item Will not include graphics files actually, but instead -%^^A! print a box of the size the graphic would take up, as well -%^^A! as the file name. -%^^A! \item Will not make hyperlinks and PDF bookmarks. -%^^A! \item Show the page frames. -%^^A! \end{itemize} -%^^A! -% -% \begin{function}[added=2018-01-31]{config} -% \begin{fdusyntax}[emph={[1]config}] -% config = (*\marg{文件}*) -% \end{fdusyntax} -% 用户配置文件的文件名。默认为空,即不载入用户配置文件。 -% \end{function} -%^^A! \begin{function}[added=2018-01-31]{config} -%^^A! \begin{fdusyntax}[emph={[1]config}] -%^^A! config = (*\marg{file}*) -%^^A! \end{fdusyntax} -%^^A! File name of user profile. Default value is empty, so no -%^^A! profile is loaded automatically. -%^^A! \end{function} -%^^A! -% -% \subsection{参数设置} -%^^A! \subsection{More options} -%^^A! -% -% \begin{function}{\fdusetup} -% \begin{fdusyntax}[morekeywords={\fdusetup}] -% \fdusetup(*\marg{键值列表}*) -% \end{fdusyntax} -% 本模板提供了一系列选项,可由您自行配置。载入文档类之后,以下 -% 所有选项均可通过统一的命令 \cs{fdusetup} 来设置。 -% \end{function} -%^^A! \begin{function}{\fdusetup} -%^^A! \begin{fdusyntax}[morekeywords={\fdusetup}] -%^^A! \fdusetup(*\marg{key-value list}*) -%^^A! \end{fdusyntax} -%^^A! \cls{fduthesis} has provided a number of options, which -%^^A! can be given via the general command \cs{fdusetup}. -%^^A! \end{function} -%^^A! -% -% \cs{fdusetup} 的参数是一组由(英文)逗号隔开的选项列表,列表中的 -% 选项通常是 \kvopt{\meta{key}}{\meta{value}} 的形式。部分选项的 -% \meta{value} 可以省略。对于同一项,后面的设置将会覆盖前面的设置。 -% 在下文的说明中,将用\textbf{粗体}表示默认值。 -%^^A! The argument of \cs{fdusetup} is a set of comma-separated option -%^^A! list. The options usually have the form of \kvopt{\meta{key}}% -%^^A! {\meta{value}} and in some cases \meta{value} can be omitted. -%^^A! For the same option, the values given later will override the -%^^A! the previous ones. Default values are indicated in -%^^A! \textbf{boldface} in the following descriptions. -%^^A! -% -% \cs{fdusetup} 采用 \LaTeX3 风格的键值设置,支持不同类型以及多种 -% 层次的选项设定。键值列表中,“|=|”左右的空格不影响设置;但需注意, -% 参数列表中不可以出现空行。 -%^^A! \cs{fdusetup} follows \LaTeX3 key-value style, and different -%^^A! types as well as various levels options are supported. In the -%^^A! key-value list, spaces around ``|=|'' will be trimmed; however, -%^^A! blank lines should never appear in the argument. -%^^A! -% -% 与模板选项相同,布尔型的参数可以省略 \kvopt{\meta{选项}}{true} -% 中的“|= true|”。 -%^^A! Similar with template options, ``\kvopt{\meta{option}}{true}'' -%^^A! can be abbreviated to \opt{\meta{option}} for boolean type. -%^^A! -% -% 另有一些选项包含子选项,如 \opt{style} 和 \opt{info} 等。它们可以 -% 按如下两种等价方式来设定: -%^^A! Some options, such as \opt{style} and \opt{info}, may have -%^^A! sub-options. They can be set by the following two equivalent -%^^A! methods: -%^^A+ -% \begin{latexexample}[morekeywords={\fdusetup},% -% emph={[1]style,cjk-font,font-size,info,title,title*,author,author*,department}] -% \fdusetup{ -% style = {cjk-font = adobe, font-size = -4}, -% info = { -% title = {论动体的电动力学}, -% title* = {On the Electrodynamics of Moving Bodies}, -% author = {阿尔伯特·爱因斯坦}, -% author* = {Albert Einstein}, -% department = {物理学系} -% } -% } -% \end{latexexample} -%^^A- -% 或者 -%^^A! or -%^^A+ -% \begin{latexexample}[morekeywords={\fdusetup},% -% emph={[1]style,cjk-font,font-size,info,title,title*,author,author*,department}] -% \fdusetup{ -% style/cjk-font = adobe, -% style/font-size = -4, -% info/title = {论动体的电动力学}, -% info/title* = {On the Electrodynamics of Moving Bodies}, -% info/author = {阿尔伯特·爱因斯坦}, -% info/author* = {Albert Einstein}, -% info/department = {物理学系} -% } -% \end{latexexample} -%^^A- -%^^A! -% -% 注意 “|/|” 的前后均不可以出现空白字符。 -%^^A! Note that you may \emph{not} put spaces around ``|/|''. -%^^A! -% -% \subsubsection{论文格式} \label{subsubsec:论文格式} -%^^A! \subsubsection{Style and format} \label{subsubsec:style-and-format} -%^^A! -% -% \begin{function}{style} -% \begin{fdusyntax}[emph={[1]style}] -% style = (*\marg{键值列表}*) -% style/(*\meta{key}*) = (*\meta{value}*) -% \end{fdusyntax} -% 该选项包含许多子项目,用于设置论文格式。具体内容见下。 -% \end{function} -%^^A! \begin{function}{style} -%^^A! \begin{fdusyntax}[emph={[1]style}] -%^^A! style = (*\marg{key-value list}*) -%^^A! style/(*\meta{key}*) = (*\meta{value}*) -%^^A! \end{fdusyntax} -%^^A! This general option is for setting the thesis style and format. -%^^A! See the following details. -%^^A! \end{function} -%^^A! -% -%^^A+ -% \begin{function}[updated=2019-03-05]{style/font} -% \begin{fdusyntax}[emph={[1]font}] -% font = (**) -% \end{fdusyntax} -%^^A- -% 设置西文字体(包括数学字体)。具体配置见表~\ref{tab:font}。 -% \end{function} -%^^A! Set fonts (including math fonts). The details can be found in table~\ref{tab:font}. -%^^A! \end{function} -%^^A! -% -% \begin{table}[ht] -% \begin{threeparttable} -% \caption{西文字体配置} -% \label{tab:font} -% \centering -% \begin{tabular}{ccccc} -% \toprule -% & \strong{正文字体} & \strong{无衬线字体} & \strong{等宽字体} & \strong{数学字体} \\ -% \midrule -% |garamond| & EB Garamond & Libertinus Sans & LM Mono\tnote{a} & Garamond Math \\ -% |libertinus| & Libertinus Serif & Libertinus Sans & LM Mono & Libertinus Math \\ -% |lm| & LM Roman & LM Sans & LM Mono & LM Math \\ -% |palatino| & TG Pagella\tnote{b} & Libertinus Sans & LM Mono & TG Pagella Math \\ -% |times| & XITS & TG Heros & TG Cursor & XITS Math \\ -% |times*|\tnote{c} & Times New Roman & Arial & Courier New & XITS Math \\ -% \bottomrule -% \end{tabular} -% \begin{tablenotes} -% \item[a] “LM”是 Latin Modern 的缩写。 -% \item[b] “TG”是 TeX Gyre 的缩写。 -% \item[c] 本行中,Times New Roman、Arial 和 Courier New 是商业字体, -% 在 Windows 和 macOS 系统上均默认安装。 -% \end{tablenotes} -% \end{threeparttable} -% \end{table} -%^^A! \begin{table}[ht] -%^^A! \begin{threeparttable} -%^^A! \caption{Font configuration} -%^^A! \label{tab:font} -%^^A! \centering -%^^A! \begin{tabular}{ccccc} -%^^A! \toprule -%^^A! & \strong{Roman} & \strong{Sans-serif} & \strong{Monospaced} & \strong{Math} \\ -%^^A! \midrule -%^^A! |garamond| & EB Garamond & Libertinus Sans & LM Mono\tnote{a} & Garamond Math \\ -%^^A! |libertinus| & Libertinus Serif & Libertinus Sans & LM Mono & Libertinus Math \\ -%^^A! |lm| & LM Roman & LM Sans & LM Mono & LM Math \\ -%^^A! |palatino| & TG Pagella\tnote{b} & Libertinus Sans & LM Mono & TG Pagella Math \\ -%^^A! |times| & XITS & TG Heros & TG Cursor & XITS Math \\ -%^^A! |times*|\tnote{c} & Times New Roman & Arial & Courier New & XITS Math \\ -%^^A! \bottomrule -%^^A! \end{tabular} -%^^A! \begin{tablenotes} -%^^A! \item[a] ``LM'' is the abbreviation of Latin Modern. -%^^A! \item[b] ``TG'' is the abbreviation of TeX Gyre. -%^^A! \item[c] Here, Times New Roman, Arial and Courier New are commercial fonts. They are -%^^A! installed on Windows and macOS by default. -%^^A! \end{tablenotes} -%^^A! \end{threeparttable} -%^^A! \end{table} -% -%^^A+ -% \begin{function}[rEXP,updated=2019-03-05]{style/cjk-font} -% \begin{fdusyntax}[emph={[1]cjk-font}] -% cjk-font = (**) -% \end{fdusyntax} -%^^A- -% 设置中文字体。具体配置见表~\ref{tab:cjk-font}。 -% \end{function} -%^^A! Set CJK (Chinese, Japanese and Korean) fonts. The details can be found in -%^^A! table~\ref{tab:cjk-font}. -%^^A! \end{function} -%^^A! -% -% \begin{table}[ht] -% \caption{中文字体配置} -% \label{tab:cjk-font} -% \centering -% \begin{tabular}{cccc} -% \toprule -% & \strong{正文字体(宋体)} & \strong{无衬线字体(黑体)} & \strong{等宽字体(仿宋)} \\ -% \midrule -% \multirow{2}*{|adobe|} & Adobe 宋体 & Adobe 黑体 & Adobe 仿宋 \\ -% & Adobe Song Std & Adobe Heiti Std & Adobe Fangsong Std \\ -% \multirow{2}*{|fandol|} & Fandol 宋体 & Fandol 黑体 & Fandol 仿宋 \\ -% & FandolSong & FandolHei & FandolFang \\ -% \multirow{2}*{|founder|} & 方正书宋 & 方正黑体 & 方正仿宋 \\ -% & FZShuSong-Z01 & FZHei-B01 & FZFangSong-Z02 \\ -% \multirow{2}*{|mac|} & (华文)宋体-简 & (华文)黑体-简 & 华文仿宋 \\ -% & Songti SC & Heiti SC & STFangsong \\ -% \multirow{2}*{|sinotype|} & 华文宋体 & 华文黑体 & 华文仿宋 \\ -% & STSong & STHeiti & STFangsong \\ -% \multirow{2}*{|sourcehan|} & 思源宋体 & 思源黑体 & --- \\ -% & Source Han Serif SC & Source Han Sans SC & --- \\ -% \multirow{2}*{|windows|} & (中易)宋体 & (中易)黑体 & (中易)仿宋 \\ -% & SimSun & SimHei & FangSong \\ -% \bottomrule -% \end{tabular} -% \end{table} -%^^A! \begin{table}[ht] -%^^A! \caption{CJK font configuration} -%^^A! \label{tab:cjk-font} -%^^A! \centering -%^^A! \begin{tabular}{cccc} -%^^A! \toprule -%^^A! & \strong{Roman (song)} & \strong{Sans-serif (hei)} & \strong{Monospaced (fang)} \\ -%^^A! \midrule -%^^A! |adobe| & Adobe Song Std & Adobe Heiti Std & Adobe Fangsong Std \\ -%^^A! |fandol| & FandolSong & FandolHei & FandolFang \\ -%^^A! |founder| & FZShuSong-Z01 & FZHei-B01 & FZFangSong-Z02 \\ -%^^A! |mac| & Songti SC & Heiti SC & STFangsong \\ -%^^A! |sinotype| & STSong & STHeiti & STFangsong \\ -%^^A! |sourcehan| & Source Han Serif SC & Source Han Sans SC & --- \\ -%^^A! |windows| & SimSun & SimHei & FangSong \\ -%^^A! \bottomrule -%^^A! \end{tabular} -%^^A! \end{table} -%^^A! -% -% 启用 \kvopt{font}{none} 或 \kvopt{cjk-font}{none} 之后,模板将关闭 -% 默认西文 / 中文字体设置。此时,您需要自行使用 \cs{setmainfont}、 -% \cs{setCJKmainfont}、\cs{setmathfont} 等命令来配置字体。 -%^^A! When you choose \kvopt{font}{none} or \kvopt{cjk-font}{none}, -%^^A! \cls{fduthesis} will disable the default western/CJK font -%^^A! settings. You may use \cs{setmainfont}, \cs{setCJKmainfont} -%^^A! and \cs{set\-math\-font}, etc.\ to configure the fonts manually. -%^^A! -% -%^^A+ -% \begin{function}{style/font-size} -% \begin{fdusyntax}[emph={[1]font-size}] -% font-size = (*<(-4)|5>*) -% \end{fdusyntax} -%^^A- -% 设置论文的基础字号。 -% \end{function} -%^^A! Specify the basic font size in your thesis. -%^^A! \end{function} -%^^A! -% -%^^A+ -% \begin{function}[rEXP,updated=2017-10-14]{style/fullwidth-stop} -% \begin{fdusyntax}[emph={[1]fullwidth-stop}] -% fullwidth-stop = (**) -% \end{fdusyntax} -%^^A- -% 选择是否把全角实心句点\FSFW 作为默认的句号形状。 -% 这种句号一般用于科技类文章,以避免与下标“$_o$”或“$_0$”混淆。 -% \end{function} -%^^A! Let full-width full stop ``\FSFW'' as the default full stop. -%^^A! Generally, this punctuation is used for scientific articles, -%^^A! where ``\FSID'' is easily to be confused with subscript -%^^A! ``$_o$'' or ``$_0$''. -%^^A! \end{function} -%^^A! -% -% 选择 \kvopt{fullwidth-stop}{catcode} 或 \opt{mapping} 后,都会实现 -% 上述效果。有所不同的是,在选择 \opt{catcode} 后,只有^^A -% \emph{显式的}\FSID 会被替换为\FSFW;但在选择 \opt{mapping} 后, -% \emph{所有的}\FSID 都会被替换。例如,如果您用宏保存了一些含有^^A -% \FSID 的文字,那么在选择 \opt{catcode} 时,其中的\FSID 不会被 -% 替换为\FSFW。 -%^^A! If you choose \kvopt{fullwidth-stop}{catcode}, only -%^^A! \emph{explicit} ``\FSID'' will be replaced by ``\FSFW''; when -%^^A! choosing \kvopt{fullwidth-stop}{mapping}, however, \emph{all} -%^^A! the ``\FSID'' will be replaced. -%^^A! -% -% 选项 \kvopt{fullwidth-stop}{mapping} 只在 \XeTeX{} 下有效。使用 -% \LuaTeX{} 编译时,该选项相当于 \kvopt{fullwidth-stop}{catcode}。 -%^^A! \opt{mapping} is valid only under \XeTeX{}. When compiling -%^^A! with \LuaTeX{}, it is equivalent to \opt{catcode}. -%^^A! -% -% 如果您在选择 \kvopt{fullwidth-stop}{mapping} 后仍需要临时显示^^A -% \FSID,可以按如下方法操作: -% \begin{latexexample}[moretexcs={\CJKfontspec},emph={[1]Mapping}] -% % 请使用 XeTeX 编译 -% % 外侧的花括号表示分组 -% 这是一个句号{\CJKfontspec{(*\meta{字体名}*)}[Mapping=full-stop]。} -% \end{latexexample} -%^^A! If you want to display ``\FSID'' temporarily after setting -%^^A! \kvopt{fullwidth-stop}{mapping}, the following code snippet -%^^A! will be helpful: -%^^A! \begin{latexexample}[moretexcs={\CJKfontspec},emph={[1]Mapping}] -%^^A! % Compiled with XeTeX -%^^A! % The outside braces is used for group -%^^A! 这是一个句号{\CJKfontspec{(*\meta{font name}*)}[Mapping=full-stop]。} -%^^A! \end{latexexample} -%^^A! -% -% \begin{function}{style/footnote-style} -%^^A 这里奇怪的东西是用来控制对齐的。fdusyntax 会吃掉开头的几个 -%^^A 空格,因此这里用 X 来占位。 -% \begin{fdusyntax}[emph={[1]footnote-style}] -% footnote-style = (**) -% \end{fdusyntax} -% 设置脚注编号样式。西文字体设置会影响其默认取值(见 -% 表~\ref{tab:footnote-font})。因此,要使得该选项生效,需将其 -% 放置在 \opt{font} 选项之后。带有 |sans| 的为相应的无衬线字体 -% 版本;带有 |*| 的为阴文样式(即黑底白字)。 -% \end{function} -%^^A! \begin{function}{style/footnote-style} -%^^A! \begin{fdusyntax}[emph={[1]footnote-style}] -%^^A! footnote-style = (**) -%^^A! \end{fdusyntax} -%^^A! Set the style of footnote numbers. Note that western fonts -%^^A! will affect its default value (see table~\ref{tab:footnote-font}), -%^^A! so you may put it after |font| option. The one with |sans| -%^^A! is for the corresponding sans-serif version, while |*| -%^^A! for white on black version. -%^^A! \end{function} -%^^A! -% -% \begin{table}[ht] -% \caption{西文字体与脚注编号样式默认值的对应关系} -% \label{tab:footnote-font} -% \centering -% \begin{tabular}{ccccc} -% \toprule -% \textbf{西文字体设置} & -% |libertinus| & |lm| & |palatino| & |times| \\ -% \midrule -% \textbf{脚注编号样式默认值} & -% |libertinus| & |pifont| & |pifont| & |xits| \\ -% \bottomrule -% \end{tabular} -% \end{table} -%^^A! \begin{table}[ht] -%^^A! \caption{Relationship between option \opt{font} and the -%^^A! default value of \opt{footnote-style}} -%^^A! \label{tab:footnote-font} -%^^A! \centering -%^^A! \begin{tabular}{ccccc} -%^^A! \toprule -%^^A! \textbf{Western fonts settings} & -%^^A! |libertinus| & |lm| & |palatino| & |times| \\ -%^^A! \midrule -%^^A! \textbf{Default value of footnote number style} & -%^^A! |libertinus| & |pifont| & |pifont| & |xits| \\ -%^^A! \bottomrule -%^^A! \end{tabular} -%^^A! \end{table} -%^^A! -% -%^^A+ -% \begin{function}[added=2017-08-13]{style/hyperlink} -% \begin{fdusyntax}[emph={[1]hyperlink}] -% hyperlink = (**) -% \end{fdusyntax} -%^^A- -% 设置超链接样式。\opt{border} 表示在超链接四周绘制方框; -% \opt{color} 表示用彩色显示超链接;\opt{none} 表示没有特殊装饰, -% 可用于生成最终的打印版文稿。 -% \end{function} -%^^A! Set the style of hyperlinks. \opt{border} draws borders around -%^^A! hyperlinks; \opt{color} displays hyperlinks in colorful text; -%^^A! \opt{none} leads to plain text, which is useful when printing -%^^A! the final document. -%^^A! \end{function} -%^^A! -% -% \begin{function}[added=2017-08-13,updated=2017-12-08]{style/hyperlink-color} -% \begin{fdusyntax}[emph={[1]hyperlink-color}] -% hyperlink-color = (*<(default)|classic|elegant|fantasy|material|\\ -% XXXXXX\mbox{}~~~~~~~~~~~~~~~~~~business|science|summer|autumn|graylevel|prl>*) -% \end{fdusyntax} -% 设置超链接颜色。该选项在 \kvopt{hyperlink}{none} 时无效。 -% 各选项所代表的颜色见表~\ref{tab:hyperlink-color}。 -% \end{function} -%^^A! \begin{function}[added=2017-08-13,updated=2017-12-08]{style/hyperlink-color} -%^^A! \begin{fdusyntax}[emph={[1]hyperlink-color}] -%^^A! hyperlink-color = (*<(default)|classic|elegant|fantasy|material|\\ -%^^A! XXXX\mbox{}~~~~~~~~~~~~~~~~~~business|science|summer|autumn|graylevel|prl>*) -%^^A! \end{fdusyntax} -%^^A! Set the color of hyperlinks. It is invalid if -%^^A! \kvopt{hyperlink}{none}. The related colors can be found -%^^A! in table~\ref{tab:hyperlink-color}. -%^^A! \end{function} -%^^A! -% -%^^A+ -% \begin{table}[ht] -% \centering -%^^A- -% \newcommand\linkcolorexam[3]{^^A -% {\small 图~\textcolor[HTML]{#1}{1-2}, -% (\textcolor[HTML]{#1}{3.4})~式} & -% {\small \textcolor[HTML]{#2}{\texttt{http://g.cn}}} & -% {\small 文献~[\textcolor[HTML]{#3}{1}], -% (\textcolor[HTML]{#3}{Knuth~1986})}} -%^^A! \newcommand\linkcolorexam[3]{% -%^^A! {\small Fig.~\textcolor[HTML]{#1}{1-2}, -%^^A! Eq.~(\textcolor[HTML]{#1}{3.4})} & -%^^A! {\small \textcolor[HTML]{#2}{\texttt{http://g.cn}}} & -%^^A! {\small Ref.~[\textcolor[HTML]{#3}{1}], -%^^A! (\textcolor[HTML]{#3}{Knuth~1986})}} -% \begin{threeparttable} -% \caption{预定义的超链接颜色方案} -% \label{tab:hyperlink-color} -%^^A! \begin{threeparttable} -%^^A! \caption{Pre-defined hyperlink color schemes} -%^^A! \label{tab:hyperlink-color} -% \begin{tabular}{c*{3}{>{\hspace{0.2cm}}c<{\hspace{0.2cm}}}} -% \toprule -% \textsf{选项} & \textsf{链接} & \textsf{URL} & \textsf{引用} \\ -%^^A! \begin{tabular}{c*{3}{>{\hspace{0.2cm}}c<{\hspace{0.2cm}}}} -%^^A! \toprule -%^^A! \textsf{Options} & \textsf{Cross references} & \textsf{URL} & \textsf{Citation} \\ -%^^A+ -% \midrule -% \opt{default} & \linkcolorexam{990000}{0000B2}{007F00} \\ -% \opt{classic} & \linkcolorexam{FF0000}{0000FF}{00FF00} \\ -% \opt{elegant}\tnote{a} & \linkcolorexam{961212}{C31818}{9B764F} \\ -% \opt{fantasy}\tnote{b} & \linkcolorexam{FF4A19}{FF3F94}{934BA1} \\ -% \opt{material}\tnote{c} & \linkcolorexam{E91E63}{009688}{4CAF50} \\ -% \opt{business}\tnote{d} & \linkcolorexam{D14542}{295497}{1F6E43} \\ -% \opt{science}\tnote{e} & \linkcolorexam{CA0619}{389F9D}{FF8920} \\ -% \opt{summer}\tnote{f} & \linkcolorexam{00AFAF}{5F5FAF}{5F8700} \\ -% \opt{autumn}\tnote{f} & \linkcolorexam{D70000}{D75F00}{AF8700} \\ -% \opt{graylevel}\tnote{c} & \linkcolorexam{616161}{616161}{616161} \\ -% \opt{prl}\tnote{g} & \linkcolorexam{2D3092}{2D3092}{2D3092} \\ -% \bottomrule -% \end{tabular} -% \begin{tablenotes} -%^^A- -% \item[a] 来自 \href{https://tex.stackexchange.com/}^^A -% {\TeX{} - \LaTeX{} Stack Exchange 网站}。 -% \item[b] Adobe CC 产品配色。 -% \item[c] 取自 Material 色彩方案 -% (见 \url{https://material.io/guidelines/style/color.html})。 -% \item[d] Microsoft Office 2016 产品配色。 -% \item[e] 来自 \href{https://www.wolfram.com/}{Wolfram Research 网站}。 -% \item[f] 均取自 Solarized 色彩方案 -% (见 \url{http://ethanschoonover.com/solarized})。 -% \item[g] \textit{Physical Review Letter} 杂志配色。 -%^^A! \item[a] From \href{https://tex.stackexchange.com/}% -%^^A! {\TeX{} - \LaTeX{} Stack Exchange}. -%^^A! \item[b] Adobe CC. -%^^A! \item[c] Material Design color palette -%^^A! (See \url{https://material.io/guidelines/style/color.html}). -%^^A! \item[d] Microsoft Office 2016. -%^^A! \item[e] From \href{https://www.wolfram.com/}{Wolfram Research website}. -%^^A! \item[f] Solarized color palette -%^^A! (See \url{http://ethanschoonover.com/solarized}). -%^^A! \item[g] \textit{Physical Review Letter} magazine. -%^^A+ -% \end{tablenotes} -% \end{threeparttable} -% \end{table} -%^^A- -%^^A! -% -%^^A+ -% \begin{function}[added=2018-01-25]{style/bib-backend} -% \begin{fdusyntax}[emph={[1]bib-backend}] -% bib-backend = (**) -% \end{fdusyntax} -%^^A- -% 选择参考文献的支持方式。选择 \opt{bibtex} 后,将使用 \BibTeX{} -% 处理文献,样式由 \pkg{natbib} 宏包负责;选择 \opt{biblatex} 后, -% 将使用 \biber{} 处理文献,样式则由 \pkg{biblatex} 宏包负责。 -% \end{function} -%^^A! Specify the backend or driver of bibliography processing. -%^^A! \BibTeX{} and \pkg{natbib} package will be used if you choose -%^^A! \opt{bibtex}, while \biber{} and \pkg{biblatex} will be used -%^^A! if you choose \opt{biblatex}. -%^^A! \end{function} -%^^A! -% -% \begin{function}[added=2017-10-28,updated=2018-01-25]^^A -% {style/bib-style} -% \begin{fdusyntax}[emph={[1]bib-style}] -% bib-style = (**) -% \end{fdusyntax} -% 设置参考文献样式。\opt{author-year} 和 \opt{numerical} 分别对应 -% 国家标准 GB/T 7714--2015 \scite{gb-t-7714-2015} 中的著者—出版年制 -% 和顺序编码制。选择 \meta{其他样式} 时,如果 \kvopt{bib-backend}^^A -% {bibtex},需保证相应的 \file{.bst} 格式文件能被调用;而如果 -% \kvopt{bib-backend}{biblatex},则需保证相应的 \file{.bbx} 格式文件 -% 能被调用。 -% \end{function} -%^^A! \begin{function}[added=2017-10-28,updated=2018-01-25]% -%^^A! {style/bib-style} -%^^A! \begin{fdusyntax}[emph={[1]bib-style}] -%^^A! bib-style = (**) -%^^A! \end{fdusyntax} -%^^A! Set the style of bibliography. \opt{author-year} and -%^^A! \opt{numerical} will follow the standard GB/T 7714--2015. -%^^A! By setting \kvopt{bib-style}{\meta{other style}}, you can use -%^^A! other bibliography style (\file{.bst} file for -%^^A! \kvopt{bib-backend}{bibtex} and \file{.bbx} file for -%^^A! \kvopt{bib-backend}{biblatex}). Suffix is not needed. -%^^A! \end{function} -%^^A! -% -% \begin{function}[added=2018-01-25]{style/cite-style} -% \begin{fdusyntax}[emph={[1]cite-style}] -% cite-style = (*\marg{引用样式}*) -% \end{fdusyntax} -% 选择引用格式。默认为空,即与参考文献样式(著者—出版年制或顺序 -% 编码制)保持一致。如果手动填写,需保证相应的 \file{.cbx} 格式文件 -% 能被调用。该选项在 \kvopt{bib-backend}{bibtex} 时无效。 -% \end{function} -%^^A! \begin{function}[added=2018-01-25]{style/cite-style} -%^^A! \begin{fdusyntax}[emph={[1]cite-style}] -%^^A! cite-style = (*\marg{style}*) -%^^A! \end{fdusyntax} -%^^A! Select citation style. Default value is empty, which means -%^^A! the citation style will follow your bibliography style -%^^A! (author-year or numeric). If you want change the citation -%^^A! style, the corresponding \file{.cbx} file must be available. -%^^A! This option is invalid when \kvopt{bib-backend}{bibtex}. -%^^A! \end{function} -%^^A! -% -% \begin{function}[added=2018-01-25]{style/bib-resource} -% \begin{fdusyntax}[emph={[1]bib-resource}] -% bib-resource = (*\marg{文件}*) -% \end{fdusyntax} -% 参考文献数据源。可以是单个文件,也可以是用英文逗号隔开的一组文件。 -% 如果 \kvopt{bib-backend}{biblatex},则必须明确给出 \file{.bib} -% 后缀名。 -% \end{function} -%^^A! \begin{function}[added=2018-01-25]{style/bib-resource} -%^^A! \begin{fdusyntax}[emph={[1]bib-resource}] -%^^A! bib-resource = (*\marg{bib file\symbol{"28}s\symbol{"29}}*) -%^^A! \end{fdusyntax} -%^^A! Specify the bibliography database (usually in \file{.bib} -%^^A! format). If using more than one files, the file names should -%^^A! be separated with comma. When \kvopt{bib-backend}{biblatex}, -%^^A! you must type in the ``\file{.bib}'' suffix. -%^^A! \end{function} -%^^A! -% -% \begin{function}[added=2017-08-10]{style/logo} -% \begin{fdusyntax}[emph={[1]logo}] -% logo = (*\marg{文件}*) -% \end{fdusyntax} -% 封面中校名图片的文件名。默认值为 \file{fudan-name.pdf}。 -% \end{function} -%^^A! \begin{function}[added=2017-08-10]{style/logo} -%^^A! \begin{fdusyntax}[emph={[1]logo}] -%^^A! logo = (*\marg{file}*) -%^^A! \end{fdusyntax} -%^^A! File name of the logo in thesis cover. Default value is -%^^A! \file{fudan-name.pdf}. -%^^A! \end{function} -%^^A! -% -% \begin{function}[added=2017-08-10]{style/logo-size} -% \begin{fdusyntax}[emph={[1]logo-size}] -% logo-size = (*\marg{宽度}*) -% logo-size = {(*\meta{宽度}*), (*\meta{高度}*)} -% \end{fdusyntax} -% 校名图片的大小。默认仅指定了宽度,为 |0.5\textwidth|\/。 -% 如果仅需指定高度,可在 \meta{宽度} 处填入一个空的分组 |{}|。 -% \end{function} -%^^A! \begin{function}[added=2017-08-10]{style/logo-size} -%^^A! \begin{fdusyntax}[emph={[1]logo-size}] -%^^A! logo-size = (*\marg{width}*) -%^^A! logo-size = {(*\meta{width}*), (*\meta{height}*)} -%^^A! \end{fdusyntax} -%^^A! Size of the logo. By default, only width is set to -%^^A! |0.5\textwidth|. To set height only, you can put an -%^^A! empty group ``|{}|'' at \meta{width}. -%^^A! \end{function} -%^^A! -% -%^^A+ -% \begin{function}[added=2017-07-06]{style/auto-make-cover} -% \begin{fdusyntax}[emph={[1]auto-make-cover}] -% auto-make-cover = (*<\TTF>*) -% \end{fdusyntax} -%^^A- -% 是否自动生成论文封面(封一)、指导小组成员名单(封二)和 -% 声明页(封三)。封面中的各项信息,可通过 \cs{fdusetup} 录入, -% 具体请参阅 \ref{subsubsec:信息录入}~节。 -% \end{function} -%^^A! Whether generate thesis cover, list of instructors (inside -%^^A! front cover) and declaration page (inside back cover) -%^^A! automatically. Entries in the cover can be specified also -%^^A! via \cs{fdusetup}, and you can find more details in -%^^A! subsubsection~\ref{subsubsec:information}. -%^^A! \end{function} -%^^A! -% -% \begin{function}{\makecoveri,\makecoverii,\makecoveriii} -% 用于手动生成论文封面、指导小组成员名单和声明页。这几个命令不能 -% 确保页码的正确编排,因此除非必要,您应当始终使用自动生成的封面。 -% \end{function} -%^^A! \begin{function}{\makecoveri,\makecoverii,\makecoveriii} -%^^A! For generating thesis cover, list of instructors and -%^^A! declaration page manually. These commands cannot ensure -%^^A! the correct page numbers, hence you should always use the -%^^A! auto-generated thesis cover unless necessary. -%^^A! \end{function} -%^^A! -% -% \subsubsection{信息录入} \label{subsubsec:信息录入} -%^^A! \subsubsection{Personal information} \label{subsubsec:information} -%^^A! -% -% \begin{function}{info} -% \begin{fdusyntax}[emph={[1]info}] -% info = (*\marg{键值列表}*) -% info/(*\meta{key}*) = (*\meta{value}*) -% \end{fdusyntax} -% 该选项包含许多子项目,用于录入论文信息。具体内容见下。以下带“|*|” -% 的项目表示对应的英文字段。 -% \end{function} -%^^A! \begin{function}{info} -%^^A! \begin{fdusyntax}[emph={[1]info}] -%^^A! info = (*\marg{key-value list}*) -%^^A! info/(*\meta{key}*) = (*\meta{value}*) -%^^A! \end{fdusyntax} -%^^A! This general option is for entering your personal information. -%^^A! See the following details. Note that options with ``|*|'' are -%^^A! the corresponding English items. -%^^A! \end{function} -%^^A! -% -%^^A+ -% \begin{function}[added=2018-02-01,updated=2019-03-12]{info/degree} -% \begin{fdusyntax}[emph={[1]degree}] -% degree = (*<(academic)|professional>*) -% \end{fdusyntax} -%^^A- -% 学位类型,仅适用于博士和硕士学位论文。\opt{academic} 和 \opt{professional} -% 分别表示学术学位和专业学位。 -% \end{function} -%^^A! Degree type. This option can only be used in master degree -%^^A! thesis. -%^^A! \end{function} -%^^A! -% -% \begin{function}{info/title,info/title*} -% \begin{fdusyntax}[emph={[1]title,title*}] -% title = (*\marg{中文标题}*) -% title* = (*\marg{英文标题}*) -% \end{fdusyntax} -% 论文标题。默认会在约 20 个汉字字宽处强制断行,但为了语义的 -% 连贯以及排版的美观,如果您的标题长于一行,建议使用“|\\|” -% 手动断行。 -% \end{function} -%^^A! \begin{function}{info/title,info/title*} -%^^A! \begin{fdusyntax}[emph={[1]title,title*}] -%^^A! title = (*\marg{title in Chinese}*) -%^^A! title* = (*\marg{title in English}*) -%^^A! \end{fdusyntax} -%^^A! Title of your thesis. The line width is about \SI{30}{em} by -%^^A! default, but you may break it with |\\| manually. -%^^A! \end{function} -%^^A! -% -% \begin{function}{info/author,info/author*} -% \begin{fdusyntax}[emph={[1]author,author*}] -% author = (*\marg{姓名}*) -% author* = (*\marg{英文姓名(或拼音)}*) -% \end{fdusyntax} -% 作者姓名。 -% \end{function} -%^^A! \begin{function}{info/author,info/author*} -%^^A! \begin{fdusyntax}[emph={[1]author,author*}] -%^^A! author = (*\marg{name in Chinese}*) -%^^A! author* = (*\marg{name in English \lparen or Pinyin\rparen}*) -%^^A! \end{fdusyntax} -%^^A! Author's name. -%^^A! \end{function} -%^^A! -% -% \begin{function}{info/supervisor} -% \begin{fdusyntax}[emph={[1]supervisor}] -% supervisor = (*\marg{姓名}*) -% \end{fdusyntax} -% 导师姓名。 -% \end{function} -%^^A! \begin{function}{info/supervisor} -%^^A! \begin{fdusyntax}[emph={[1]supervisor}] -%^^A! supervisor = (*\marg{name}*) -%^^A! \end{fdusyntax} -%^^A! Supervisor's name. -%^^A! \end{function} -%^^A! -% -% \begin{function}{info/department} -% \begin{fdusyntax}[emph={[1]department}] -% department = (*\marg{名称}*) -% \end{fdusyntax} -% 院系名称。 -% \end{function} -%^^A! \begin{function}{info/department} -%^^A! \begin{fdusyntax}[emph={[1]department}] -%^^A! department = (*\marg{name}*) -%^^A! \end{fdusyntax} -%^^A! Name of the department. -%^^A! \end{function} -%^^A! -% -% \begin{function}{info/major} -% \begin{fdusyntax}[emph={[1]major}] -% major = (*\marg{名称}*) -% \end{fdusyntax} -% 专业名称。 -% \end{function} -%^^A! \begin{function}{info/major} -%^^A! \begin{fdusyntax}[emph={[1]major}] -%^^A! major = (*\marg{name}*) -%^^A! \end{fdusyntax} -%^^A! Name of the major. -%^^A! \end{function} -%^^A! -% -% \begin{function}{info/student-id} -% \begin{fdusyntax}[emph={[1]student-id}] -% student-id = (*\marg{数字}*) -% \end{fdusyntax} -% 作者学号。 -% \end{function} -%^^A! \begin{function}{info/student-id} -%^^A! \begin{fdusyntax}[emph={[1]student-id}] -%^^A! student-id = (*\marg{number}*) -%^^A! \end{fdusyntax} -%^^A! Author's student ID. -%^^A! \end{function} -%^^A! -% -% 复旦大学学号共 11 位,前两位为入学年份,之后一位为学生类型 -% 代码(博士生为 1,硕士生为 2,本科生为 3),接下来的五位为 -% 专业代码,最后三位为顺序号。 -%^^A! In Fudan University, student ID has 11 digits. The first two -%^^A! are the year of attendance; next one represents the student's -%^^A! type (1 for doctor, 2 for master and 3 for bachelor); the -%^^A! following five digits are major ID while the last three are -%^^A! serial number. -%^^A! -% -% \begin{function}{info/school-id} -% \begin{fdusyntax}[emph={[1]school-id}] -% school-id = (*\marg{数字}*) -% \end{fdusyntax} -% 学校代码。默认值为 10246(这是复旦大学的学校代码)。 -% \end{function} -%^^A! \begin{function}{info/school-id} -%^^A! \begin{fdusyntax}[emph={[1]school-id}] -%^^A! school-id = (*\marg{number}*) -%^^A! \end{fdusyntax} -%^^A! School ID. Default value is 10246 (school ID of Fudan University). -%^^A! \end{function} -%^^A! -% -% \begin{function}{info/date} -% \begin{fdusyntax}[emph={[1]date}] -% date = (*\marg{日期}*) -% \end{fdusyntax} -% 论文完成日期。默认值为文档编译日期(\tn{today})。 -% \end{function} -%^^A! \begin{function}{info/date} -%^^A! \begin{fdusyntax}[emph={[1]date}] -%^^A! date = (*\marg{date}*) -%^^A! \end{fdusyntax} -%^^A! Finish date of your thesis. Default value is the compilation -%^^A! date (\tn{today}). -%^^A! \end{function} -%^^A! -% -%^^A+ -% \begin{function}[added=2017-07-04]{info/secret-level} -% \begin{fdusyntax}[emph={[1]secret-level}] -% secret-level = (*<(none)|i|ii|iii>*) -% \end{fdusyntax} -%^^A- -% 密级。\opt{i}、\opt{ii}、\opt{iii} 分别表示秘密、机密、绝密; -% \opt{none} 表示论文不涉密,即不显示密级与保密年限。 -% \end{function} -%^^A! Secret level. \opt{i}, \opt{ii} and \opt{iii} means -%^^A! ``秘密'' (secret), ``机密'' (confidential) and ``绝密'' -%^^A! (top secret) respectively. \opt{none} means your thesis is -%^^A! not secret-related and secret level and year will not be -%^^A! shown. -%^^A! \end{function} -%^^A! -% -% \begin{function}[added=2017-07-04]{info/secret-year} -% \begin{fdusyntax}[emph={[1]secret-year}] -% secret-year = (*\marg{年限}*) -% \end{fdusyntax} -% 保密年限。建议您使用中文,如“五年”。该选项在设置 -% \kvopt{secret-level}{none} 时无效。 -% \end{function} -%^^A! \begin{function}[added=2017-07-04]{info/secret-year} -%^^A! \begin{fdusyntax}[emph={[1]secret-year}] -%^^A! secret-year = (*\marg{year}*) -%^^A! \end{fdusyntax} -%^^A! Secret year. It's recommended to use Chinese word as ``五年'' -%^^A! (5 years) here. This option is invalid if you have set -%^^A! \kvopt{secret-level}{none}. -%^^A! \end{function} -%^^A! -% -% \begin{function}{info/instructors} -% \begin{fdusyntax}[emph={[1]instructors}] -% instructors = (*\marg{成员 1, 成员 2, ...}*) -% \end{fdusyntax} -% 指导小组成员。各成员之间需使用英文逗号隔开。为防止歧义, -% 可以用分组括号“|{...}|”把各成员字段括起来。 -% \end{function} -%^^A! \begin{function}{info/instructors} -%^^A! \begin{fdusyntax}[emph={[1]instructors}] -%^^A! instructors = (*\marg{member 1, member 2, ...}*) -%^^A! \end{fdusyntax} -%^^A! Instructors' name. Each name should be separated with -%^^A! comma. To disambiguate, you may put text containing comma -%^^A! into a group ``|{...}|''. -%^^A! \end{function} -%^^A! -% -% \begin{function}{info/keywords,info/keywords*} -% \begin{fdusyntax}[emph={[1]keywords,keywords*}] -% keywords = (*\marg{中文关键字}*) -% keywords* = (*\marg{英文关键字}*) -% \end{fdusyntax} -% 关键字列表。各关键字之间需使用英文逗号隔开。为防止歧义, -% 可以用分组括号“|{...}|”把各字段括起来。 -% \end{function} -%^^A! \begin{function}{info/keywords,info/keywords*} -%^^A! \begin{fdusyntax}[emph={[1]keywords,keywords*}] -%^^A! keywords = (*\marg{keywords in Chinese}*) -%^^A! keywords* = (*\marg{keywords in English}*) -%^^A! \end{fdusyntax} -%^^A! Keywords list. Each keyword should be separated with comma. -%^^A! To disambiguate, you may put text containing comma into a -%^^A! group ``|{...}|''. -%^^A! \end{function} -%^^A! -% -% \begin{function}{info/clc} -% \begin{fdusyntax}[emph={[1]clc}] -% clc = (*\marg{分类号}*) -% \end{fdusyntax} -% 中图分类号(CLC)。 -% \end{function} -%^^A! \begin{function}{info/clc} -%^^A! \begin{fdusyntax}[emph={[1]clc}] -%^^A! clc = (*\marg{classification codes}*) -%^^A! \end{fdusyntax} -%^^A! Chinese Library Classification (CLC). -%^^A! \end{function} -%^^A! -% -% \subsection{正文编写} -%^^A! \subsection{Writing your thesis} -%^^A! -% -% \begin{quotation} -% 喬孟符(吉)博學多能,以樂府稱。嘗云:「作樂府亦有法,曰^^A -% \CJKunderdot{鳳頭、豬肚、豹尾}六字是也。」大概起要美麗,中要浩蕩, -% 結要響亮。尤貴在首尾貫穿,意思清新。苟能若是,斯可以言樂府矣。 -% \end{quotation} -% \hfill ——陶宗儀《南村輟耕錄·作今樂府法》 -% -% \subsubsection{凤头} -%^^A! \subsubsection{Front matter} -%^^A! -% -% \begin{function}{\frontmatter} -% 声明前置部分开始。 -% \end{function} -%^^A! \begin{function}{\frontmatter} -%^^A! Declare the beginning of front matter. -%^^A! \end{function} -%^^A! -% -% 在本模板中,前置部分包含目录、中英文摘要以及符号表等。 -% 前置部分的页码采用小写罗马字母,并且与正文分开计数。 -%^^A! Front matter contains table of contents, abstracts and notation -%^^A! list. The page numbers in front matter will be shown in -%^^A! lowercase Roman numerals, and will be counted separately with -%^^A! main matter. -%^^A! -% -% \begin{function}{\tableofcontents,\listoffigures,\listoftables} -% 生成目录。为了生成完整、正确的目录,您至少需要编译\emph{两次}。对于图表 -% 较多的论文,也可以使用 \cs{listoffigures} 和 \cs{listoftables} 生成单独的 -% 插图、表格目录。 -% \end{function} -%^^A! \begin{function}{\tableofcontents} -%^^A! Generate the table of contents (TOC). You need to compile -%^^A! the source file at least \emph{twice} to get the correct TOC. -%^^A! If your thesis contains many figures or tables, you may also -%^^A! use \cs{listoffigures} or \cs{listoftables} to generate a list -%^^A! of them. -%^^A! \end{function} -%^^A! -% -%^^A TODO: \DescribeEnv{abstract} -%^^A TODO: \DescribeEnv{abstract*} -% \begin{function}{abstract} -% \begin{fdusyntax}[emph={[2]abstract}] -% % 中文论文模板 (fduthesis) % 英文论文模板 (fduthesis-en) -% \begin{abstract} \begin{abstract} -% (*\meta{中文摘要} \hspace{3.52cm} \meta{英文摘要}*) -% \end{abstract} \end{abstract} -% \end{fdusyntax} -% \end{function} -% \begin{function}[rEXP]{abstract*} -% \begin{fdusyntax}[emph={[2]abstract*}] -% % 中文论文模板 (fduthesis) -% \begin{abstract*} -% (*\meta{英文摘要}*) -% \end{abstract*} -% \end{fdusyntax} -% 摘要。中文模板中,不带星号和带星号的版本分别用来输入中文摘要 -% 和英文摘要;英文模板中没有带星号的版本,您只需输入英文摘要。 -% \end{function} -%^^A! \begin{function}{abstract} -%^^A! \begin{fdusyntax}[emph={[2]abstract}] -%^^A! % fduthesis (Chinese thesis) % fduthesis-en (English thesis) -%^^A! \begin{abstract} \begin{abstract} -%^^A! (*\meta{Chinese abstract} \hspace{3cm} \meta{English abstract}*) -%^^A! \end{abstract} \end{abstract} -%^^A! \end{fdusyntax} -%^^A! \end{function} -%^^A! \begin{function}[rEXP]{abstract*} -%^^A! \begin{fdusyntax}[emph={[2]abstract*}] -%^^A! % Only for fduthesis -%^^A! \begin{abstract*} -%^^A! (*\meta{English abstract}*) -%^^A! \end{abstract*} -%^^A! \end{fdusyntax} -%^^A! Abstract environment. In \cls{fduthesis}, \env{abstract} and -%^^A! \env{abstract*} are used for Chinese and English abstract, -%^^A! respectively; while in \cls{fduthesis-en}, there is no -%^^A! \env{abstract*} environment and you need to write the English -%^^A! abstract merely. -%^^A! \end{function} -%^^A! -% -% 摘要的最后,会显示关键字列表以及中图分类号(CLC)。 -% 这两项可通过 \cs{fdusetup} 录入,具体 -% 请参阅 \ref{subsubsec:信息录入}~节。 -%^^A! At the end of abstract (both Chinese and English, if available), -%^^A! keywords list and CLC number will be shown. They can be -%^^A! specified via command \cs{fdusetup} and you may refer to -%^^A! subsubsection~\ref{subsubsec:information} for more details. -%^^A! -% -%^^A TODO: \DescribeEnv{notation} -% \begin{function}{notation} -% \begin{fdusyntax}[emph={[2]notation}] -% \begin{notation}(*\oarg{列格式说明}*) -% (*\meta{符号 1}*) & (*\meta{说明}*) \\ -% (*\meta{符号 2}*) & (*\meta{说明}*) \\ -% (*\phantom{\meta{符号 $n$}}*) (*$\vdots$*) -% (*\meta{符号\ \kern-0.1em$n$}*) & (*\meta{说明}*) -% \end{notation} -% \end{fdusyntax} -% 符号表。可选参数 \meta{列格式说明}与 \LaTeX{} 中标准表格的列格 -% 式说明语法一致,默认值为“|lp{7.5cm}|”,即第一列宽度自动调整, -% 第二列限宽 \SI{7.5}{cm},两列均为左对齐。 -% \end{function} -%^^A! \begin{function}{notation} -%^^A! \begin{fdusyntax}[emph={[2]notation}] -%^^A! \begin{notation}(*\oarg{column format}*) -%^^A! (*\meta{symbol 1}*) & (*\meta{description}*) \\ -%^^A! (*\meta{symbol 2}*) & (*\meta{description}*) \\ -%^^A! (*\phantom{\meta{symbol $n$}}*) (*$\vdots$*) -%^^A! (*\meta{symbol \kern-0.1em$n$}*) & (*\meta{description}*) -%^^A! \end{notation} -%^^A! \end{fdusyntax} -%^^A! Notation list (or symbol list, nomenclature) environment. -%^^A! The optional argument \meta{column format} is the same as -%^^A! in a standard \LaTeX{} table. The default value is -%^^A! ``|lp{7.5cm}|'', which means auto-width for the first column -%^^A! and fix-width (\SI{7.5}{cm}) for the second; both columns will -%^^A! be left-aligned. -%^^A! \end{function} -%^^A! -% -% \subsubsection{猪肚} -%^^A! \subsubsection{Main matter} -%^^A! -% -% \begin{function}{\mainmatter} -% 声明主体部分开始。 -% \end{function} -%^^A! \begin{function}{\mainmatter} -%^^A! Declare the beginning of main matter. -%^^A! \end{function} -%^^A! -% -% 主体部分是论文的核心,您可以分章节撰写。如有需求,也可以采用 -% 多文件编译的方式。主体部分的页码采用阿拉伯数字。 -%^^A! As the name suggests, ``main matter'' is the main body of your -%^^A! thesis. When working on a big projects, it's usually a good -%^^A! idea to split the source file into several parts. The page -%^^A! numbers in main matter are shown in arabic numerals. -%^^A! -% -% \begin{function}[updated=2018-01-15]{\footnote} -% \begin{fdusyntax}[deletetexcs={\footnote},% -% morekeywords={\footnote}] -% \footnote(*\marg{脚注文字}*) -% \end{fdusyntax} -% 插入脚注。脚注编号样式可利用 \opt{style/footnote-style} 选项控制, -% 具体见 \ref{subsubsec:论文格式}~小节。 -% \end{function} -%^^A! \begin{function}[updated=2018-01-15]{\footnote} -%^^A! \begin{fdusyntax}[deletetexcs={\footnote},% -%^^A! morekeywords={\footnote}] -%^^A! \footnote(*\marg{text}*) -%^^A! \end{fdusyntax} -%^^A! Insert a footnote. The style of footnote numbers can be set -%^^A! with option \opt{style/foot\-note\-style}. See subsubsection~% -%^^A! \ref{subsubsec:style-and-format} for more details. -%^^A! \end{function} -%^^A! -% -%^^A TODO: \DescribeEnv{proof} -% \begin{function}{axiom,corollary,definition,example,lemma, -% proof,theorem} -% \begin{fdusyntax}[emph={[2]proof}] -% \begin{proof}(*\oarg{小标题}*) -% (*\meta{证明过程}*) -% \end{proof} -% \end{fdusyntax} -% 一系列预定义的数学环境。具体含义见表~\ref{tab:theorem}。 -% \end{function} -%^^A! \begin{function}{axiom,corollary,definition,example,lemma, -%^^A! proof,theorem} -%^^A! \begin{fdusyntax}[emph={[2]proof}] -%^^A! \begin{proof}(*\oarg{subheading}*) -%^^A! (*\meta{procedure of proof}*) -%^^A! \end{proof} -%^^A! \end{fdusyntax} -%^^A! A series of pre-defined math environments. -%^^A! \end{function} -%^^A! -% -% \begin{table}[ht] -% \caption{预定义的数学环境} \label{tab:theorem} -% \centering -% \begin{tabular}{cccccccc} -% \toprule -% \textbf{名称} & -% \env{axiom} & \env{corollary} & \env{definition} & -% \env{example} & \env{lemma} & \env{proof} & -% \env{theorem} \\ -% \midrule -% \textbf{含义} & -% 公理 & 推论 & 定义 & 例 & 引理 & 证明 & 定理 \\ -% \bottomrule -% \end{tabular} -% \end{table} -% -% 证明环境(\env{proof})的最后会添加证毕符号“$\QED$”。要确保 -% 该符号在正确的位置显示,您需要按照 \ref{subsec:编译方式}~节 -% 中的有关说明编译\emph{两次}。 -%^^A! A QED\footnote{Abbreviation of Latin phrase \emph{quod erat -%^^A! demonstrandum}, means ``what was to be demonstrated''.} -%^^A! symbol ``$\QED$'' will be added at the end of \env{proof} -%^^A! environment. You need to compile the source file \emph{twice} -%^^A! as in subsection~\ref{subsec:compilation} in order to make -%^^A! the position of QED symbol correct. -%^^A! -% -% \begin{function}[updated=2017-12-12]{\newtheorem} -% \begin{fdusyntax}[deletetexcs={\newtheorem}, -% morekeywords={\newtheorem,\newtheorem*}] -% \newtheorem(*\oarg{选项}\marg{环境名}\marg{标题}*) -% \newtheorem*(*\oarg{选项}\marg{环境名}\marg{标题}*) -% \begin(*\marg{环境名}\oarg{小标题}*) -% (*\meta{内容}*) -% \end(*\marg{环境名}*) -% \end{fdusyntax} -% 声明新的定理类环境(数学环境)。带星号的版本表示不进行编号, -% 并且会默认添加证毕符号“$\QED$”。声明后,即可同预定义的数学环境 -% 一样使用。 -% \end{function} -%^^A! \begin{function}[updated=2017-12-12]{\newtheorem} -%^^A! \begin{fdusyntax}[deletetexcs={\newtheorem}, -%^^A! morekeywords={\newtheorem,\newtheorem*}] -%^^A! \newtheorem(*\oarg{options}\marg{environment}\marg{title}*) -%^^A! \newtheorem*(*\oarg{options}\marg{environment}\marg{title}*) -%^^A! \begin(*\marg{environment}\oarg{subheading}*) -%^^A! (*\meta{contents}*) -%^^A! \end(*\marg{environment}*) -%^^A! \end{fdusyntax} -%^^A! Declare new math environments (theorems). If you use -%^^A! \cs{newtheorem*}, then the theorem will not be numbered, and -%^^A! a QED symbol ``$\QED$'' will be added at the end of the -%^^A! environment. All the theorem environments defined by yourself -%^^A! can be used as the pre-defined ones. -%^^A! \end{function} -%^^A! -% -% 事实上,表~\ref{tab:theorem} 中预定义的环境正是通过以下方式定义的: -% \begin{latexexample}[deletetexcs={\newtheorem}, -% morekeywords={\newtheorem,\newtheorem*}] -% \newtheorem*{proof}{证明} -% \newtheorem{axiom}{公理} -% \newtheorem{corollary}{定理} -% ... -% \end{latexexample} -%^^A! Actually, the pre-defined math environments are just defined -%^^A! with \cs{new\-the\-o\-rem} and \cs{new\-the\-o\-rem*}: -%^^A! \begin{latexexample}[deletetexcs={\newtheorem}, -%^^A! morekeywords={\newtheorem,\newtheorem*}] -%^^A! \newtheorem*{proof}{proof} -%^^A! \newtheorem{axiom}{axiom} -%^^A! \newtheorem{corollary}{corollary} -%^^A! ... -%^^A! \end{latexexample} -%^^A! -% -% 与 \cs{fdusetup} 相同,\cs{newtheorem} 的可选参数 \meta{选项} -% 也为一组键值列表。可用的选项见下。注意您无需输入“|theorem/|”。 -%^^A! Similar with \cs{fdusetup}, the optional argument \meta{options} -%^^A! of \cs{newtheorem} is a key-value list as well. The available -%^^A! are described below. Note that you don't need to type in the -%^^A! ``|theorem/|'' prefix. -%^^A! -% -% \begin{function}{theorem/style} -% \begin{fdusyntax}[emph={[1]style}] -% style = (*<(plain)|margin|change|\\ -% XXXXXX\mbox{}~~~~~~~~break|marginbreak|changebreak>*) -% \end{fdusyntax} -% 定理类环境的总体样式。 -% \end{function} -%^^A! \begin{function}{theorem/style} -%^^A! \begin{fdusyntax}[emph={[1]style}] -%^^A! style = (*<(plain)|margin|change|\\ -%^^A! XXXX\mbox{}~~~~~~~~break|marginbreak|changebreak>*) -%^^A! \end{fdusyntax} -%^^A! The overall style of the theorem environment. -%^^A! \end{function} -%^^A! -% -% \begin{function}{theorem/header-font} -% \begin{fdusyntax}[emph={[1]header-font}] -% header-font = (*\marg{字体}*) -% \end{fdusyntax} -% 定理头(即标题)的字体。中文模板默认为 \tn{sffamily},即无衬线体 -% (黑体);英文模板默认为 |\bfseries\upshape|,即加粗直立体。 -% \end{function} -%^^A! \begin{function}{theorem/header-font} -%^^A! \begin{fdusyntax}[emph={[1]header-font}] -%^^A! header-font = (*\marg{font}*) -%^^A! \end{fdusyntax} -%^^A! Font of the theorem header. Default value is \tn{sffamily} -%^^A! and |\bfseries\upshape| for Chinese and English template, -%^^A! respectively. -%^^A! \end{function} -%^^A! -% -% \begin{function}{theorem/body-font} -% \begin{fdusyntax}[emph={[1]body-font}] -% body-font = (*\marg{字体}*) -% \end{fdusyntax} -% 定理内容的字体。中文模板默认为 \tn{fdu@kai},即楷体;英文模板 -% 默认为 \tn{itshape},即斜体。 -% \end{function} -%^^A! \begin{function}{theorem/body-font} -%^^A! \begin{fdusyntax}[emph={[1]body-font}] -%^^A! body-font = (*\marg{font}*) -%^^A! \end{fdusyntax} -%^^A! Font of the theorem body. Default value is \tn{fdu@kai} -%^^A! (\textit{楷体}) and \tn{itshape} for Chinese and English -%^^A! template, respectively. -%^^A! \end{function} -%^^A! -% -% \begin{function}{theorem/qed} -% \begin{fdusyntax}[emph={[1]qed}] -% qed = (*\marg{符号}*) -% \end{fdusyntax} -% 定理结束标记(即证毕符号)。如果用 \cs{newtheorem} 声明定理, -% 则默认为空;用 \cs{newtheorem*} 声明,则默认为 -% |\ensuremath{\QED}|,即“$\QED$”。 -% \end{function} -%^^A! \begin{function}{theorem/qed} -%^^A! \begin{fdusyntax}[emph={[1]qed}] -%^^A! qed = (*\marg{symbol}*) -%^^A! \end{fdusyntax} -%^^A! Theorem end mark. For \cs{newtheorem}, default value is -%^^A! empty; for \cs{newtheorem*}, default value is -%^^A! |\ensuremath{\QED}| (i.e.\ ``$\QED$''). -%^^A! \end{function} -%^^A! -% -% \begin{function}{theorem/counter} -% \begin{fdusyntax}[emph={[1]counter}] -% counter = (*\marg{计数器}*) -% \end{fdusyntax} -% 定理计数器,表示定理编号在 \meta{计数器} 的下一级,并会随 -% \meta{计数器} 的变化而清零。\scite{刘海洋2013latex入门} -% 默认为 |chapter|,表示按章编号。使用 \cs{newtheorem*} 时, -% 该选项无效。 -% \end{function} -%^^A! \begin{function}{theorem/counter} -%^^A! \begin{fdusyntax}[emph={[1]counter}] -%^^A! counter = (*\marg{counter}*) -%^^A! \end{fdusyntax} -%^^A! The theorem will be enumerated within \meta{counter}. For -%^^A! example, the default value is |chapter|, which means with -%^^A! each new \tn{chapter}, the enumeration begins again with 1. -%^^A! This option is invalid for \cs{newtheorem*}. -%^^A! \end{function} -%^^A! -% -% \begin{function}{\caption} -% \begin{fdusyntax}[deletetexcs={\caption},morekeywords={\caption}] -% \caption(*\marg{图表标题}*) -% \caption(*\oarg{短标题}\marg{长标题}*) -% \end{fdusyntax} -% 插入图表标题。可选参数 \meta{短标题} 用于图表目录。在 -% \meta{长标题} 中,您可以进行长达多段的叙述;但 \meta{短标题} -% 和单独的 \meta{图表标题} 中则不允许分段。 -% \scite{刘海洋2013latex入门} -% \end{function} -%^^A! \begin{function}{\caption} -%^^A! \begin{fdusyntax}[deletetexcs={\caption},morekeywords={\caption}] -%^^A! \caption(*\marg{caption}*) -%^^A! \caption(*\oarg{short caption}\marg{long caption}*) -%^^A! \end{fdusyntax} -%^^A! Insert the caption of figure or table. The optional argument -%^^A! \meta{short caption} will be shown in the list of figures/tables. -%^^A! In \meta{long caption}, you can write descriptions for several -%^^A! paragraphs, but \meta{short caption} and the single -%^^A! \meta{caption} will not allow multi-paragraph text (i.e.\ -%^^A! text containing \tn{par}) inside. -%^^A! \end{function} -%^^A! -% -% 按照排版惯例,建议您将表格的标题放置在绘制表格的命令之前, -% 而将图片的标题放置在绘图或插图的命令之后。另需注意, -% \tn{caption} 命令必须放置在浮动体环境(如 \env{table} 和 -% \env{figure})中。 -%^^A! By convention, caption of a table is usually put \emph{before} -%^^A! the table itself, while for figure it's the opposite. -%^^A! In addition, command \tn{caption} must be put inside float -%^^A! environments (e.g.\ \env{table} and \env{figure}). -%^^A! -% -% \subsubsection{豹尾} -%^^A! \subsubsection{Back matter} -%^^A! -% -% \begin{function}{\backmatter} -% 声明后置部分开始。 -% \end{function} -%^^A! \begin{function}{\backmatter} -%^^A! Declare the beginning of back matter. -%^^A! \end{function} -%^^A! -% -% 后置部分包含参考文献、声明页等。 -%^^A! Back matter contains bibliography, declaration page, etc. -%^^A! -% -% \begin{function}[updated=2018-01-25]{\printbibliography} -% \begin{fdusyntax}[morekeywords={\printbibliography}] -% \printbibliography(*\oarg{选项}*) -% \end{fdusyntax} -% 打印参考文献列表。如果 \kvopt{bib-backend}{bibtex},则 \meta{选项} -% 无效,相当于 \tn{bibliography} \texttt{\marg{文献数据库}},其中的 -% \meta{文献数据库} 可利用 \opt{style/bib-resource} 选项指定,具体见 -% \ref{subsubsec:论文格式}~小节;而如果 \kvopt{bib-backend}^^A -% {biblatex},则该命令由 \pkg{biblatex} 宏包直接提供,可用选项请 -% 参阅其文档 \cite{biblatex}。 -% \end{function} -%^^A! \begin{function}[updated=2018-01-25]{\printbibliography} -%^^A! \begin{fdusyntax}[morekeywords={\printbibliography}] -%^^A! \printbibliography(*\oarg{options}*) -%^^A! \end{fdusyntax} -%^^A! Print the bibliography. When \kvopt{bib-backend}{bibtex}, then -%^^A! \meta{options} is invalid and this command is equivalent to -%^^A! \tn{bibliography} \texttt{\marg{bib files}}, where -%^^A! \meta{bib files} should be specified with option -%^^A! \opt{style/bib-resource} (see subsubsection~% -%^^A! \ref{subsubsec:style-and-format}). When \kvopt{bib-backend}% -%^^A! {bibtex}, then \tn{printbibliography} is provided by -%^^A! \pkg{biblatex} and the available options can be found in its -%^^A! documentation. -%^^A! \end{function} -%^^A! -% -% \section{宏包依赖情况} -%^^A! \section{Packages dependencies} -%^^A! -% -% 使用不同编译方式、指定不同选项,会导致宏包依赖情况有所不同。 -% 具体如下: -% \begin{itemize} -% \item 在任何情况下,本模板都会\emph{显式}调用以下宏包 -% (或文档类): -% \begin{itemize} -% \item \pkg{expl3}、\pkg{xparse}、\pkg{xtemplate} 和 -% \pkg{l3keys2e},用于构建 \LaTeX3 编程环境 -% \scite{source3}。它们分属 \pkg{l3kernel} 和 -% \pkg{l3packages} 宏集。 -% \item \cls{ctexbook},提供中文排版的通用框架。属于 \CTeX{} -% 宏集 \scite{CTeX}。 -% \item \pkg{amsmath},对 \LaTeX{} 的数学排版功能进行了 -% 全面扩展。属于 \AmSLaTeX{} 套件。 -% \item \pkg{unicode-math},负责处理 Unicode 编码的 -% OpenType 数学字体。 -% \item \pkg{geometry},用于调整页面尺寸。 -% \item \pkg{fancyhdr},处理页眉页脚。 -% \item \pkg{footmisc},处理脚注。 -% \item \pkg{ntheorem},提供增强版的定理类环境。 -% \item \pkg{graphicx},提供图形插入的接口。 -% \item \pkg{longtable},长表格(允许跨页)支持。 -% \item \pkg{caption},用于设置题注。 -% \item \pkg{xcolor},提供彩色支持。 -% \item \pkg{hyperref},提供交叉引用、超链接、电子书签等功能。 -% \end{itemize} -% \item 开启 \kvopt{style/footnote-style}{pifont} 后,会调用 -% \pkg{pifont} 宏包。它属于 \pkg{psnfss} 套件。 -% \item 开启 \kvopt{style/bib-backend}{bibtex} 后,会调用 -% \pkg{natbib} 宏包,并依赖 \BibTeX{} 程序。参考文献样式由 -% \pkg{gbt7714} 宏包提供 \scite{natbib,gbt7714}。 -% \item 开启 \kvopt{style/bib-backend}{biblatex} 后,会调用 -% \pkg{biblatex} 宏包,并依赖 \biber{} 程序。参考文献样式由 -% \pkg{biblatex-gb7714-2015} 宏包提供 -% \scite{biblatex,biblatex-gb7714-2015}。 -% \end{itemize} -%^^A! Different compilation methods and options will result in a -%^^A! different packages dependency. Details are as follows: -%^^A! \begin{itemize} -%^^A! \item In any case, \cls{fduthesis} will load the following -%^^A! packages \emph{explicitly}: -%^^A! \begin{itemize} -%^^A! \item \pkg{expl3}, \pkg{xparse}, \pkg{xtemplate} and -%^^A! \pkg{l3keys2e}, belong to \pkg{l3kernel} and -%^^A! \pkg{l3packages} bundles -%^^A! \item \cls{ctexbook}, belongs to \CTeX{} bundle -%^^A! \item \pkg{amsmath}, belongs to \AmSLaTeX{} bundle -%^^A! \item \pkg{unicode-math} -%^^A! \item \pkg{geometry} -%^^A! \item \pkg{fancyhdr} -%^^A! \item \pkg{footmisc} -%^^A! \item \pkg{ntheorem} -%^^A! \item \pkg{graphicx} -%^^A! \item \pkg{longtable} -%^^A! \item \pkg{caption} -%^^A! \item \pkg{xcolor} -%^^A! \item \pkg{hyperref} -%^^A! \end{itemize} -%^^A! \item When chosen \kvopt{style/footnote-style}{pifont}, -%^^A! package \pkg{pifont} will be loaded. It belongs to -%^^A! \pkg{psnfss} bundle. -%^^A! \item When chosen \kvopt{style/bib-backend}{bibtex}, -%^^A! package \pkg{natbib} will be loaded. Meanwhile, program -%^^A! \BibTeX{} will be required for compilation. The -%^^A! bibliography style is provided by \pkg{gbt7714}. -%^^A! \item When chosen \kvopt{style/bib-backend}{biblatex}, -%^^A! package \pkg{biblatex} will be loaded. Program \biber{} -%^^A! will be required then. The bibliography style is provided -%^^A! by \pkg{biblatex-gb7714-2015}. -%^^A! \end{itemize} -%^^A! -% -% 这里只列出了本模板直接调用的宏包。这些宏包自身的调用情况, -% 此处不再具体展开。如有需要,请参阅相关文档。 -%^^A! Only the packages loaded directly by \cls{fduthesis} are listed -%^^A! here. If you need to know the dependencies of the packages -%^^A! themselves, please refer to the corresponding manuals. -%^^A! -% -% \begin{thebibliography}{99} -% -% \newcommand\urlprefix{\newline\hspace*{\fill}} -% \let\OldUrl=\url -% \renewcommand\url[2][]{{\small\textit{#1}~\OldUrl{#2}}} -% \newcommand\CTANurl[2][]{{\small\textit{#1}~\href{http://mirror.ctan.org/#2}^^A -% {\ttfamily CTAN://#2}}} -% -% \subsection{图书} -% -% \bibitem{knuth1986texbook} -% \textsc{Knuth D E}. -% \newblock \textit{The \TeX book: Computers \& Typesetting, volume A} [M]. -% \newblock Boston: Addison--Wesley Publishing Company, 1986 -% \urlprefix \CTANurl[源代码^^A -% \footnote{此代码只可作为学习之用。未经 Knuth 本人同意,您不应当编译此文档。}:]^^A -% {systems/knuth/dist/tex/texbook.tex} -% -% \bibitem{mittelbach2004latexcompanion} -% \textsc{Mittelbach F} and \textsc{Goossens M}. -% \newblock \textit{The \LaTeX{} Companion} [M]. -% \newblock 2nd ed. -% \newblock Boston: Addison--Wesley Publishing Company, 2004 -% -% \bibitem{胡伟2017latex2e} -% 胡伟. -% \newblock \textit{\LaTeXe{} 文类和宏包学习手册} [M]. -% \newblock 北京: 清华大学出版社, 2017 -% -% \bibitem{刘海洋2013latex入门} -% 刘海洋. -% \newblock \textit{\LaTeX{} 入门} [M]. -% \newblock 北京: 电子工业出版社, 2013 -% -% \subsection{标准、规范} -% -% \bibitem{gb-t-7713.1-2006} -% 国务院学位委员会办公室, 全国信息与文献标准化技术委员会. -% \newblock \textit{学位论文编写规则: GB/T 7713.1--2006} [S]. -% \newblock 北京: 中国标准出版社, 2007 -% -% \bibitem{gb-t-7714-2015} -% 全国信息与文献标准化技术委员会. -% \newblock \textit{信息与文献\quad 参考文献著录规则: GB/T 7714--2015} [S]. -% \newblock 北京: 中国标准出版社, 2015 -% -% \bibitem{gb-t-15834-2011} -% 教育部语言文字信息管理司. -% \newblock \textit{标点符号用法: GB/T 15834--2011} [S/OL]. -% \newblock 北京: 中国标准出版社, 2012 -% \urlprefix\url{http://www.moe.gov.cn/ewebeditor/uploadfile/2015/01/13/20150113091548267.pdf} -% -% \bibitem{clreq} -% W3C. -% \newblock \textit{中文排版需求(Requirements for Chinese Text Layout)} [EB/OL]. -% \newblock (2019-03-13) -% \urlprefix\url{https://w3c.github.io/clreq/} -% -% \bibitem{复旦大学论文规范} -% 复旦大学图书馆, 复旦大学研究生院. -% \newblock \textit{复旦大学博士、硕士学位论文规范} [EB/OL]. -% \newblock 2017 年 3 月修订版. -% \newblock (2017-03-27) -% \urlprefix\url{http://www.gs.fudan.edu.cn/_upload/article/4c/a8/a82545ef443b9c057c14ba13782c/c883c6f3-6d7f-410c-8f30-d8bde6fcb990.doc} -% -% \subsection{宏包、模版} -% -% \bibitem{source2e} -% \textsc{Braams J}, \textsc{Carlisle D}, \textsc{Jeffrey A}, et al. -% \newblock \textit{The \LaTeXe{} Sources} [CP/OL]. -% \newblock (2018-12-01) -% \urlprefix\url{https://ctan.org/pkg/latex} -% \urlprefix\CTANurl[源代码:]{macros/latex/base/source2e.pdf} -% -% \bibitem{CTeX} -% \textsc{CTEX.ORG}. -% \newblock \textit{\CTeX{} 宏集手册} [EB/OL]. -% \newblock version 2.4.14, -% \newblock (2018-05-02) -% \urlprefix\url{https://ctan.org/pkg/ctex} -% \urlprefix\CTANurl[文档及源代码:]{language/chinese/ctex/ctex.pdf} -% -% \bibitem{xeCJK} -% \textsc{CTEX.ORG}. -% \newblock \textit{\pkg{xeCJK} 宏包} [EB/OL]. -% \newblock version 3.7.1, -% \newblock (2018-04-30) -% \urlprefix\url{https://ctan.org/pkg/xecjk} -% \urlprefix\CTANurl[文档及源代码:]{macros/xetex/latex/xecjk/xeCJK.pdf} -% -% \bibitem{natbib} -% \textsc{Daly P W}. -% \newblock \textit{Natural Sciences Citations and References} [EB/OL]. -% \newblock version 8.31b, -% \newblock (2010-09-13) -% \urlprefix\url{https://ctan.org/pkg/natbib} -% \urlprefix\CTANurl[文档及源代码:]{macros/latex/contrib/natbib/natbib.pdf} -% -% \bibitem{source3} -% \textsc{The \LaTeX3 Project}. -% \newblock \textit{The \LaTeX3 Sources} [CP/OL]. -% \newblock (2019-03-05) -% \urlprefix\url{https://ctan.org/pkg/l3kernel} -% \urlprefix\CTANurl[源代码:]{macros/latex/contrib/l3kernel/source3.pdf} -% -% \bibitem{biblatex} -% \textsc{Lehman P}, \textsc{Kime P}, \textsc{Boruvka A}, et al. -% \newblock \textit{The \pkg{biblatex} Package} [EB/OL]. -% \newblock version 3.12, -% \newblock (2018-10-18) -% \urlprefix\url{https://ctan.org/pkg/biblatex} -% \urlprefix\CTANurl[文档:]{macros/latex/contrib/biblatex/doc/biblatex.pdf} -% -% \bibitem{lshort} -% \textsc{Oetiker T}, \textsc{Partl H}, \textsc{Hyna I}, et al. -% \newblock \textit{The Not So Short Introduction to \LaTeXe{}: Or \LaTeXe{} in 139 minutes} [EB/OL]. -% \newblock version 6.2, -% \newblock (2018-02-28) -% \urlprefix\url{https://ctan.org/pkg/lshort-english} -% \urlprefix\CTANurl[文档:]{info/lshort/english/lshort.pdf} -% -% \bibitem{lshort-zh-cn} -% \textsc{Oetiker T}, \textsc{Partl H}, \textsc{Hyna I}, et al. -% \newblock \textit{一份不太简短的 \LaTeXe{} 介绍: 或 106 分钟了解 \LaTeXe{}} [EB/OL]. -% \newblock \CTeX{} 开发小组, 译. -% \newblock 原版版本 version 6.2, 中文版本 version 6.0, -% \newblock (2018-09-01) -% \urlprefix\url{https://ctan.org/pkg/lshort-zh-cn} -% \urlprefix\CTANurl[文档:]{info/lshort/chinese/lshort-zh-cn.pdf} -% -% \bibitem{biblatex-gb7714-2015} -% 胡振震. -% \newblock \textit{符合 GB/T 7714-2015 标准的 biblatex 参考文献样式} [EB/OL]. -% \newblock version 1.0q, -% \newblock (2019-02-11) -% \urlprefix\url{https://ctan.org/pkg/biblatex-gb7714-2015} -% \urlprefix\CTANurl[文档:]{biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf} -% -% \bibitem{gbt7714} -% 李泽平(\textsc{Zeping L}). -% \newblock \textit{GB/T 7714-2015 \BibTeX{} Style} [EB/OL]. -% \newblock version 1.0.9, -% \newblock (2018-08-05) -% \urlprefix\url{https://ctan.org/pkg/gbt7714} -% \urlprefix\CTANurl[文档:]{biblio/bibtex/contrib/gbt7714/gbt7714.pdf} -% -% \bibitem{cquthesis} -% 李振楠. -% \newblock \textit{\textsc{CquThesis}:重庆大学毕业论文 \LaTeX{} 模板} [EB/OL]. -% \newblock version 1.30, -% \newblock (2018-02-23) -% \urlprefix\url{https://ctan.org/pkg/cquthesis} -% \urlprefix\CTANurl[文档及源代码:]{macros/latex/contrib/cquthesis/cquthesis.pdf} -% -% \bibitem{thuthesis} -% 薛瑞尼. -% \newblock \textit{\textsc{ThuThesis}:清华大学学位论文模板} [EB/OL]. -% \newblock version 5.4.5, -% \newblock (2018-05-17) -% \urlprefix\url{https://ctan.org/pkg/thuthesis} -% \urlprefix\CTANurl[文档及源代码:]{macros/latex/contrib/thuthesis/thuthesis.pdf} -% -% \emph{以下模版未收录至 CTAN,但仍然保持活跃更新。} -% -% \bibitem{sjtuthesis} -% \textsc{SJTUG}. -% \newblock \textit{上海交通大学 \XeLaTeX{} 学位论文及课程论文模板} [EB/OL]. -% \newblock version 0.10.2, -% \newblock (2018-11-05) -% \urlprefix\url{https://github.com/sjtug/SJTUThesis} -% -% \bibitem{ustcthesis} -% \textsc{USTC \TeX{} User Group}. -% \newblock \textit{中国科学技术大学学位论文 \LaTeX{} 模板} [EB/OL]. -% \newblock version 3.1.03, -% \newblock (2019-01-01) -% \urlprefix\url{https://github.com/ustctug/ustcthesis} -% -% \bibitem{ucasthesis} -% \textsc{mohuangrui}. -% \newblock \textit{\pkg{ucasthesis} 国科大学位论文 \LaTeX{} 模板} [EB/OL]. -% \newblock (2019-03-14) -% \urlprefix\url{https://github.com/mohuangrui/ucasthesis} -% -% \emph{以下模版现已停止更新。} -% -% \bibitem{pandoxie2014fduthesislatex} -% \textsc{Pandoxie}. -% \newblock \textit{Fudan University-Latex Template} [EB/OL]. -% \newblock (2014-06-07) -% \urlprefix\url{https://github.com/Pandoxie/FDU-Thesis-Latex} -% -% \bibitem{richard2016fudanthesis} -% \textsc{richard}. -% \newblock \textit{复旦大学硕士学位论文模板} [EB/OL]. -% \newblock (2016-01-31) -% \urlprefix\url{https://github.com/richarddzh/fudan-thesis} -% -% \bibitem{数院毕业论文格式} -% 复旦大学数学科学学院. -% \newblock \textit{毕业论文格式 tex 版和 word 版} [EB/OL]. -% \urlprefix\url{http://math.fudan.edu.cn/show.aspx?info_lb=664&flag=101&info_id=1816} -% -% \bibitem{数院毕业论文格式更新} -% 复旦大学数学科学学院. -% \newblock \textit{毕业论文格式: Word、\TeX{} 模板更新} [EB/OL]. -% \urlprefix\url{http://math.fudan.edu.cn/Show.aspx?info_lb=664&info_id=1855&flag=101} -% -% \subsection{其他} -% -% \bibitem{wright2009dtxfile} -% \textsc{Wright J}. -% \newblock \textit{A model dtx file} [EB/OL]. -% \newblock (2009-10-06) -% \urlprefix\url{https://www.texdev.net/2009/10/06/a-model-dtx-file/} -% -% \bibitem{孔雀计划} -% 刘庆(\textsc{Eric Q L}). -% \newblock \textit{孔雀计划:中文字体排印的思路} [EB/OL]. -% \urlprefix\url{https://thetype.com/kongque/} -% -% \end{thebibliography} -% -% \clearpage -% -%^^A! \end{document} -% -% \end{documentation} -% -% \begin{implementation} -% -%^^A 代码部分的页边距 -% \newgeometry{ -% left = 2.25 in, -% right = 1.00 in, -% top = 1.25 in, -% bottom = 1.00 in, -% marginpar = 2.25 in -% } -% -% \section{实现细节} -% -% 本模板使用 \LaTeX3 语法编写,依赖 \pkg{expl3} 环境, -% 并需调用 \pkg{l3packages} 中的相关宏包。 -% -% 按照 \LaTeX3 语法,代码中的空格、换行、回车与制表符完全忽略, -% 而下划线“|_|”和冒号“|:|”则可作为一般字母使用。 -% 正常的空格可以使用“|~|”代替;至于 |~| 原来所表示的“带子”, -% 则要用 \LaTeXe{} 的原始命令 \tn{nobreakspace} 代替。 -% -% 以下代码中有一些形如 \textcolor[HTML]{2E3191}{\textsf{<*class>}} -% 的标记,这是 \pkg{DocStrip} 中的“guard”,用来选择性地提取文件。 -% “\textsf{*}”和“\textsf{/}”分别表示该部分的开始和结束。不含 -% “\textsf{*}”和“\textsf{/}”的 guard 出现在行号右侧,它们用来确定 -% 单独一行代码的归属。这些 guard 的颜色深浅不一,用以明确嵌套关系。 -% -% 另有若干形如 \textcolor{MaterialPink}{\textsf{<@@=fdu>}} 的 guard, -% 它们由 \pkg{l3docstrip} 定义,用来指示名字空间(模块)。 -% -% \subsection{准备} -% -% \begin{macrocode} -%<@@=fdu> -%<*class|class-en> -% \end{macrocode} -% -% 检查 \LaTeX3 编程环境。 -% \begin{macrocode} -\RequirePackage { xparse, xtemplate, l3keys2e } -\clist_map_inline:nn { expl3, xparse, xtemplate, l3keys2e } - { - \@ifpackagelater {#1} { 2018/05/12 } - { } { \msg_error:nnn { fduthesis } { l3-too-old } {#1} } - } -\msg_new:nnn { fduthesis } { l3-too-old } - { - Package~ "#1"~ is~ too~ old. \\\\ - Please~ update~ an~ up-to-date~ version~ of~ the~ bundles \\ - "l3kernel"~ and~ "l3packages"~ using~ your~ TeX~ package \\ - manager~ or~ from~ CTAN. - } -% \end{macrocode} -% -% 目前 \cls{fduthesis} 仅支持 \XeTeX{} 和 \LuaTeX{}。 -% \begin{macrocode} -\sys_if_engine_xetex:F - { - \sys_if_engine_luatex:F - { - \msg_fatal:nnx { fduthesis } { unsupported-engine } - { \c_sys_engine_str } - } - } -\msg_new:nnn { fduthesis } { unsupported-engine } - { - The~ fduthesis~ class~ requires~ either~ XeTeX~ or~ LuaTeX. \\\\ - "#1"~ is~ not~ supported~ at~ present.~ You~ must~ change \\ - your~ typesetting~ engine~ to~ "xelatex"~ or~ "lualatex". - } -% \end{macrocode} -% -% \subsubsection{内部变量声明} -% -% \begin{variable}{\l_@@_tmpa_box, -% \l_@@_tmpa_clist,\l_@@_tmpb_clist, -% \l_@@_tmpa_dim,\l_@@_tmpb_dim, -% \l_@@_tmpa_skip, -% \l_@@_tmpa_tl,\l_@@_tmpb_tl} -% 临时变量。 -% \begin{macrocode} -\box_new:N \l_@@_tmpa_box -\clist_new:N \l_@@_tmpa_clist -\clist_new:N \l_@@_tmpb_clist -\dim_new:N \l_@@_tmpa_dim -\dim_new:N \l_@@_tmpb_dim -\skip_new:N \l_@@_tmpa_skip -\tl_new:N \l_@@_tmpa_tl -\tl_new:N \l_@@_tmpb_tl -% \end{macrocode} -% \end{variable} -% -% \begin{variable}{\g_@@_thesis_type_int} -% 论文类型。取值 1、2、3 分别对应博士、硕士、本科(学士),这与学号 -% 第三位是一致的。 -% \begin{macrocode} -\int_new:N \g_@@_thesis_type_int -% \end{macrocode} -% \end{variable} -% -% \begin{variable}{\g_@@_to_ctexbook_clist,\g_@@_to_hyperref_clist} -% 分别保存由 \cls{fduthesis} 传入 \cls{ctexbook} 文档类和 -% \pkg{hyperref} 宏包的选项列表。 -% \begin{macrocode} -\clist_new:N \g_@@_to_ctexbook_clist -\clist_new:N \g_@@_to_hyperref_clist -% \end{macrocode} -% \end{variable} -% -% \begin{variable}{\g_@@_twoside_bool} -% 是否开启双页模式(默认打开)。 -% \begin{macrocode} -\bool_new:N \g_@@_twoside_bool -\bool_set_true:N \g_@@_twoside_bool -% \end{macrocode} -% \end{variable} -% -% \begin{variable}{\g_@@_draft_bool} -% 是否开启草稿模式。 -% \begin{macrocode} -\bool_new:N \g_@@_draft_bool -% \end{macrocode} -% \end{variable} -% -% \begin{variable}{\g_@@_config_tl} -% 保存配置文件名称。默认为空。 -% \begin{macrocode} -\tl_new:N \g_@@_config_tl -% \end{macrocode} -% \end{variable} -% -% \subsubsection{内部函数} -% -% \begin{macro}{\cs_generate_variant:cn, -% \file_input:V, -% \int_to_arabic:v, -% \keys_define:nx, -% \tl_map_inline:xn} -% \begin{macro}[TF]{\tl_if_eq:Vn} -% \LaTeX3{} 函数变体。 -% \begin{macrocode} -\cs_generate_variant:Nn \cs_generate_variant:Nn { cn } -\cs_generate_variant:Nn \file_input:n { V } -\cs_generate_variant:Nn \int_to_arabic:n { v } -\cs_generate_variant:Nn \keys_define:nn { nx } -\cs_generate_variant:Nn \tl_map_inline:nn { xn } -\prg_generate_conditional_variant:Nnn \tl_if_eq:nn { Vn } { T, TF } -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@@_quad:,\@@_qquad:} -% 等价于 \LaTeXe{} 中的 \tn{quad} 和 \tn{qquad}。 -% \begin{macrocode} -\cs_new:Npn \@@_quad: { \skip_horizontal:n { 1 em } } -\cs_new:Npn \@@_qquad: { \skip_horizontal:n { 2 em } } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_vspace:N,\@@_vspace:n,\@@_vspace:c} -% 类似 \LaTeXe{} 中的 \tn{vspace*}。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_vspace:N #1 - { - \dim_set_eq:NN \l_@@_tmpa_dim \prevdepth - \hrule height \c_zero_dim - \nobreak - \skip_vertical:N #1 - \skip_vertical:N \c_zero_skip - \dim_set_eq:NN \prevdepth \l_@@_tmpa_dim - } -\cs_new_protected:Npn \@@_vspace:n #1 - { - \skip_set:Nn \l_@@_tmpa_skip {#1} - \@@_vspace:N \l_@@_tmpa_skip - } -\cs_generate_variant:Nn \@@_vspace:N { c } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_symbol:n} -% 等价于 \LaTeXe{} 中的 \tn{symbol}。 -% \begin{macrocode} -\cs_new:Npn \@@_symbol:n #1 { \tex_char:D #1 \scan_stop: } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_arabic:n} -% 等价于 \LaTeXe{} 中的 \tn{arabic}。 -% \begin{macrocode} -\cs_new:Npn \@@_arabic:n #1 - { \int_to_arabic:v { c@ #1 } } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_patch_cmd:Nnn,\@@_appto_cmd:Nn} -% 补丁工具,来自 \pkg{ctexpatch} 宏包。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_patch_cmd:Nnn #1#2#3 - { - \ctex_patch_cmd_once:NnnnTF #1 { } {#2} {#3} - { } { \ctex_patch_failure:N #1 } - } -\cs_new_protected:Npn \@@_appto_cmd:Nn #1#2 - { - \ctex_appto_cmd:NnnTF #1 { } {#2} - { } { \ctex_patch_failure:N #1 } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_define_fn_style:nn, -% \@@_define_punct:nn, -% \@@_define_sep:nn, -% \@@_define_format:nn, -% \@@_define_name:nn, -% \@@_define_name:nnn} -% 用来定义脚注样式、标点、默认名称的辅助函数。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_define_fn_style:nn #1#2 - { \tl_const:cn { c_@@_fn_style_ #1 _tl } {#2} } -\cs_new_protected:Npn \@@_define_punct:nn #1#2 - { \tl_const:cn { c_@@_ #1 _tl } { \@@_symbol:n {#2} } } -% \cs_new_protected:Npn \@@_define_sep:nn #1#2 -% { \tl_const:cn { c_@@_ #1 _sep_tl } {#2} } -% \cs_new_protected:Npn \@@_define_format:nn #1#2 -% { \tl_const:cn { c_@@_ #1 _format_tl } {#2} } -\cs_new_protected:Npn \@@_define_name:nn #1#2 - { \tl_const:cn { c_@@_name_ #1 _tl } {#2} } -\cs_new_protected:Npn \@@_define_name:nnn #1#2#3 - { - \tl_const:cn { c_@@_name_ #1 _tl } {#2} - \tl_const:cn { c_@@_name_ #1 _en_tl } {#3} - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_msg_new:nn, -% \@@_error:n,\@@_error:nn,\@@_error:nx,\@@_error:nnn, -% \@@_warning:n,\@@_warning:nn,\@@_warning:nxx, -% \@@_info:nx} -% 各种信息函数的缩略形式。 -% \begin{macrocode} -\cs_new:Npn \@@_msg_new:nn { \msg_new:nnn { fduthesis } } -\cs_new:Npn \@@_error:n { \msg_error:nn { fduthesis } } -\cs_new:Npn \@@_error:nn { \msg_error:nnn { fduthesis } } -\cs_new:Npn \@@_error:nx { \msg_error:nnx { fduthesis } } -\cs_new:Npn \@@_error:nnn { \msg_error:nnnn { fduthesis } } -\cs_new:Npn \@@_warning:n { \msg_warning:nn { fduthesis } } -\cs_new:Npn \@@_warning:nn { \msg_warning:nnn { fduthesis } } -\cs_new:Npn \@@_warning:nxx { \msg_warning:nnxx { fduthesis } } -\cs_new:Npn \@@_info:nx { \msg_info:nnx { fduthesis } } -% \end{macrocode} -% \end{macro} -% -% \subsection{选项处理} -% -% 定义 |fdu/option| 键值类。 -% \begin{macrocode} -\keys_define:nn { fdu / option } - { -% \end{macrocode} -% -% \changes{v0.7}{2018/02/01}{新增 \opt{type} 选项。} -% -% \begin{macro}{type} -% 设置论文类型。设为模板选项主要是为了以后的兼容性。论文类型可能会 -% 影响很多设置,只是暂时还不考虑。默认为本科毕业论文。 -% \begin{macrocode} - type .choice:, - type .value_required:n = true, - type .choices:nn = - { doctor, master, bachelor } - { \int_set_eq:NN \g_@@_thesis_type_int \l_keys_choice_int }, - type .initial:n = bachelor, -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{oneside,twoside} -% 设置页面类型为单面或双面。 -% \begin{macrocode} - oneside .value_forbidden:n = true, - twoside .value_forbidden:n = true, - oneside .code:n = - { - \clist_gput_right:Nn \g_@@_to_ctexbook_clist { oneside } - \bool_set_false:N \g_@@_twoside_bool - }, - twoside .code:n = - { - \clist_gput_right:Nn \g_@@_to_ctexbook_clist { twoside } - \bool_set_true:N \g_@@_twoside_bool - }, -% \end{macrocode} -% \end{macro} -% -% \changes{v0.5}{2017/09/23}{移除 \opt{nofonts} 选项。} -% -% \begin{macro}{draft} -% 是否开启草稿模式(默认关闭)。 -% \begin{macrocode} - draft .choice:, - draft / true .code:n = - { - \bool_set_true:N \g_@@_draft_bool - \clist_gput_right:Nn \g_@@_to_ctexbook_clist { draft } - }, - draft / false .code:n = - { \bool_set_false:N \g_@@_draft_bool }, - draft .default:n = true, - draft .initial:n = false, -% \end{macrocode} -% \end{macro} -% -% \changes{v0.7}{2018/01/31}{新增 \opt{config} 选项。} +% \section{概要} % -% \begin{macro}{config} -% 配置文件名。 -% \begin{macrocode} - config .tl_set:N = \g_@@_config_tl, -% \end{macrocode} -% \end{macro} +% 本模板使用 \LaTeX3 语法编写,依赖 \pkg{expl3} 环境,并需调用 \pkg{l3packages} +% 中的相关宏包。 % -% 处理未知选项。 -% \begin{macrocode} - unknown .code:n = { \@@_error:n { unknown-option } } - } -\@@_msg_new:nn { unknown-option } - { Class~ option~ "\l_keys_key_tl"~ is~ unknown. } -% \end{macrocode} +% 按照 \LaTeX3 语法,代码中的空格、换行、回车与制表符完全忽略,而下划线“|_|”和 +% 冒号“|:|”则可作为一般字母使用。正常的空格可以使用“|~|”代替;至于“|~|”原来所 +% 表示的“带子”,则要用 \LaTeXe{} 的原始命令 \tn{nobreakspace} 代替。 % -% 将文档类选项传给 |fdu/option|。 -% \begin{macrocode} -\ProcessKeysOptions { fdu / option } -% \end{macrocode} -% -% 载入参数配置文件。 -% \begin{macrocode} -\file_input:n { fduthesis.def } -\tl_if_empty:NF \g_@@_config_tl - { - \file_input:V \g_@@_config_tl - \@@_info:nx { load-config-file } { \g_@@_config_tl } - } -\@@_msg_new:nn { load-config-file } - { You~ are~ loading~ config~ file~ '#1'. } -% \end{macrocode} -% -% \subsection{载入宏包、文档类} -% -% \changes{v0.7}{2018/01/19}{使用 \cls{ctexbook} 文档类,而非直接使用 -% 标准文档类 \cls{book}。} -% -% 将选项传入 \cls{ctexbook} 文档类。 -% \begin{macrocode} -% TODO: (2017-07-22) Chinese fonts in fduthesis-en -\PassOptionsToClass - { - UTF8, -% scheme = plain, - heading = true, -% fontset = none, -% fontset = fandol, - zihao = -4, -% linespread = \c_@@_line_spread_fp, - \g_@@_to_ctexbook_clist - } - { ctexbook } -% \end{macrocode} -% -% 传入各宏包选项。 -% \begin{macrocode} -\clist_map_inline:nn - { - { no-math } { fontspec }, - { perpage } { footmisc }, - { amsmath, thmmarks } { ntheorem } - } - { \PassOptionsToPackage #1 } -% \end{macrocode} -% -% 本模板会在 \pkg{ctexhook} 提供的钩子 \cs{ctex_at_end_preamble:n} -% 中调用 \pkg{biblatex},而 \pkg{biblatex} 自身又会使用 \pkg{etoolbox} -% 的钩子 \tn{AtEndPreamble},因此需要在载入 \cls{ctexbook} 之前调用 -% \pkg{etoolbox}。钩子的顺序为: -% \[ \text{\tn{CTEX@document@left@hook}} -% \prec \text{\tn{@endpreamblehook}} -% \prec \text{\texttt{\textbackslash begin\{document\}}}. \] -% \begin{macrocode} -\RequirePackage { etoolbox } -% \end{macrocode} -% -% 载入 \cls{ctexbook} 文档类。 -% 在使用 \XeLaTeX{} 编译时,\cls{ctexbook} 的底层将调用 \pkg{xeCJK} -% 宏包;而在使用 \LuaLaTeX{} 编译时,则将调用 \pkg{LuaTeX-ja} 宏包。 -% 两种情况下 \cls{ctexbook} 均会调用 \pkg{fontspec} 宏包。 -% \begin{macrocode} -\LoadClass { ctexbook } -% \end{macrocode} -% -% \changes{v0.4}{2017/08/13}{提供彩色支持。} -% -% 载入各宏包。其中,\pkg{amsmath} 必须在 \pkg{unicode-math} 之前引入。 -% \begin{macrocode} -\RequirePackage - { - amsmath, - unicode-math, - geometry, - fancyhdr, - footmisc, - ntheorem, - graphicx, - longtable, - caption, - xcolor - } -% \end{macrocode} -% -% \begin{macro}{\@@_check_package:nnn} -% 检查过时宏包。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_check_package:nnn #1#2#3 - { - \@ifpackagelater {#1} {#2} - { } { \@@_error:nnn { package-too-old } {#1} {#3} } - } -\@@_msg_new:nn { package-too-old } - { - Package~ "#1"~ is~ too~ old. \\ - The~ fduthesis~ class~ only~ supports~ "#1"~ with~ a~ version \\ - higher~ than~ v#2. \\\\ - Please~ update~ an~ up-to-date~ version~ of~ it~ using~ your \\ - TeX~ package~ manager~ or~ from~ CTAN. - } -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\@@_check_package:nnn { ctex } { 2017/08/07 } { 2.4.10 } -\@@_check_package:nnn { fontspec } { 2017/09/22 } { 2.6e } -\@@_check_package:nnn { unicode-math } { 2017/11/18 } { 0.8i } -\sys_if_engine_xetex:T - { \@@_check_package:nnn { xeCJK } { 2017/08/07 } { 3.5.0 } } -\sys_if_engine_luatex:T - { \@@_check_package:nnn { xunicode-addon } { 2018/04/30 } { 3.7.1 } } -% \end{macrocode} -% -% \subsection{页面布局} -% -% 利用 \pkg{geometry} 宏包设置纸张大小、页面边距以及页眉高度。这里, -% $\SI{2.54}{\centi\meter}=\SI{1}{in}$, -% $\SI{3.18}{\centi\meter}=\SI{1.25}{in}$。 -% \begin{macrocode} -\geometry - { - paper = a4paper, - vmargin = 2.54 cm, - hmargin = 3.18 cm, - headheight = 15 pt - } -% \end{macrocode} -% -% 草稿模式下显示页面边框及页眉、页脚线 。 -% \begin{macrocode} -\bool_if:NT \g_@@_draft_bool { \geometry { showframe } } -% \end{macrocode} -% -% \subsection{字体} -% -% \subsubsection{预定义字体配置} -% -% \changes{v0.7c}{2019/03/05}{重构字体配置,并兼容 macOS。} -% -% \begin{variable}{\g_@@_fontset_tl, \g_@@_cjk_fontset_tl} -% 存放字体选项值。 -% \begin{macrocode} -\tl_new:N \g_@@_fontset_tl -%\tl_new:N \g_@@_cjk_fontset_tl -% \end{macrocode} -% \end{variable} -% -% \begin{macro}{style/font} -% \changes{v0.7c}{2019/03/05}{新增 \opt{garamond} 和 \opt{times*} 样式。} -% 预定义西文字体。 -% \begin{macrocode} -\keys_define:nn { fdu / style } - { - font .choices:nn = - { garamond, libertinus, lm, palatino, times, times*, none } - { \tl_set_eq:NN \g_@@_fontset_tl \l_keys_choice_tl } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{style/cjk-font} -% \changes{v0.7c}{2019/03/05}{新增 \opt{sinotype} 和 \opt{sourcehan} 样式。} -% 预定义中文字体。 -% \begin{macrocode} -%<*class> -\keys_define:nn { fdu / style } - { - cjk-font .choices:nn = - { adobe, fandol, founder, mac, sinotype, sourcehan, windows, none } - { \tl_set_eq:NN \g_@@_cjk_fontset_tl \l_keys_choice_tl } - } -% \end{macrocode} -% -% \end{macro} -% -% \begin{macro}{ -% \@@_setmainfont:nn, -% \@@_setsansfont:nn, -% \@@_setmonofont:nn, -% \@@_setmathfont:nn} -% 用于设置西文字体的辅助函数,来源于 \pkg{fontspec} 和 \pkg{unicode-math}。 -% \begin{arguments} -% \item 字体名 -% \item 选项 -% \end{arguments} -% \begin{macrocode} -\cs_new_protected:Npn \@@_setmainfont:nn #1#2 - { \__fontspec_main_setmainfont:nn {#2} {#1} } -\cs_new_protected:Npn \@@_setsansfont:nn #1#2 - { \__fontspec_main_setsansfont:nn {#2} {#1} } -\cs_new_protected:Npn \@@_setmonofont:nn #1#2 - { \__fontspec_main_setmonofont:nn {#2} {#1} } -\cs_new_protected:Npn \@@_setmathfont:nn #1#2 - { \__um_setmathfont:nn {#2} {#1} } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{ -% \@@_setCJKmainfont:nn, -% \@@_setCJKsansfont:nn, -% \@@_setCJKmonofont:nn} -% 用于设置中文字体的辅助函数,来源于 \pkg{xeCJK} 和 \pkg{ctex} 宏包。 -% \begin{macrocode} -%<*class> -\cs_new_protected:Npn \@@_setCJKmainfont:nn #1#2 - { \@@_set_family:nnn { \CJKrmdefault } {#2} {#1} } -\cs_new_protected:Npn \@@_setCJKsansfont:nn #1#2 - { \@@_set_family:nnn { \CJKsfdefault } {#2} {#1} } -\cs_new_protected:Npn \@@_setCJKmonofont:nn #1#2 - { \@@_set_family:nnn { \CJKttdefault } {#2} {#1} } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_set_cjk_font_kai:nn,\fdu@kai} -% 楷体需要单独设置。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_set_cjk_font_kai:nn #1#2 - { \@@_set_family:nnn { fdu@kai } {#2} {#1} } -\cs_new_protected:Npn \fdu@kai - { \@@_switch_family:n { fdu@kai } } -% \end{macrocode} -% \end{macro} -% -% \changes{v0.7d}{2019/03/29}{在字体未提供对应粗体的情况下,允许使用伪粗。} -% -% \begin{macro}{ -% \@@_cjk_font_options:, -% \@@_setCJKmainfont:n, -% \@@_setCJKsansfont:n, -% \@@_setCJKmonofont:n, -% \@@_set_cjk_font_kai:n} -% 将 bold、italic 和 bold italic 统一按照 roman 设置。 -% \begin{macrocode} -\tl_const:Nn \@@_cjk_font_options: - { UprightFont = *, ItalicFont = *, AutoFakeBold = true } -\cs_new_protected:Npx \@@_setCJKmainfont:n #1 - { \@@_setCJKmainfont:nn {#1} { \@@_cjk_font_options: } } -\cs_new_protected:Npx \@@_setCJKsansfont:n #1 - { \@@_setCJKsansfont:nn {#1} { \@@_cjk_font_options: } } -\cs_new_protected:Npx \@@_setCJKmonofont:n #1 - { \@@_setCJKmonofont:nn {#1} { \@@_cjk_font_options: } } -\cs_new_protected:Npx \@@_set_cjk_font_kai:n #1 - { \@@_set_cjk_font_kai:nn {#1} { \@@_cjk_font_options: } } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_set_family:nnn,\@@_switch_family:n} -% 封装 CJK 字体族的设定和切换命令。 -% \begin{macrocode} -\sys_if_engine_xetex:TF - { - \cs_new_eq:NN \@@_set_family:nnn \xeCJK_set_family:nnn - \cs_new_eq:NN \@@_switch_family:n \xeCJK_switch_family:n - } - { - \cs_new_eq:NN \@@_set_family:nnn \ctex_ltj_set_family:nnn - \cs_new_eq:NN \@@_switch_family:n \ctex_ltj_switch_family:n - } -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{ -% \setmainfont, -% \setsansfont, -% \setmonofont, -% \setmathfont, -% \setCJKmainfont, -% \setCJKsansfont, -% \setCJKmonofont, -% \@@_set_font:n} -% 重新定义以上宏包提供的字体选择命令。我们把它放在导言区末尾,使得用户配置不被 -% 模板配置覆盖。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_set_font_helper:n #1 - { - \exp_args:Nc \RenewDocumentCommand { set #1 font } { O { } m O { } } - { - \ctex_at_end_preamble:n - { \use:c { @@_set #1 font:nn } {##2} { ##1, ##3 } } - } - } -\clist_map_inline:nn { main, sans, mono, math } { \@@_set_font_helper:n {#1} } -%\clist_map_inline:nn { CJKmain, CJKsans, CJKmono } { \@@_set_font_helper:n {#1} } -% \end{macrocode} -% \end{macro} -% -% \changes{v0.7e}{2019/04/10}{兼容 Libertinus 和 XITS 字体的文件名变动。} -% \begin{macro}{ -% \g_@@_font_family_libertinus_serif_tl, -% \g_@@_font_family_libertinus_sans_tl, -% \g_@@_font_style_libertinus_rm_tl, -% \g_@@_font_style_libertinus_bf_tl, -% \g_@@_font_style_libertinus_it_tl, -% \g_@@_font_style_libertinus_bfit_tl, -% \g_@@_font_style_libertinus_bfsl_tl, -% \g_@@_font_family_xits_tl, -% \g_@@_font_style_xits_rm_tl, -% \g_@@_font_style_xits_bf_tl, -% \g_@@_font_style_xits_it_tl, -% \g_@@_font_style_xits_bfit_tl, -% \g_@@_font_name_libertinus_serif_tl, -% \g_@@_font_name_libertinus_sans_tl, -% \g_@@_font_name_libertinus_math_tl, -% \g_@@_font_name_xits_tl, -% \g_@@_font_name_xits_math_rm_tl, -% \g_@@_font_name_xits_math_bf_tl} -% Libertinus 和 XITS 字体的文件名做过变动,需要特殊处理。 -% \begin{macrocode} -\tl_new:N \g_@@_font_family_libertinus_serif_tl -\tl_new:N \g_@@_font_family_libertinus_sans_tl -\tl_new:N \g_@@_font_style_libertinus_rm_tl -\tl_new:N \g_@@_font_style_libertinus_bf_tl -\tl_new:N \g_@@_font_style_libertinus_it_tl -\tl_new:N \g_@@_font_style_libertinus_bfit_tl -\tl_new:N \g_@@_font_style_libertinus_bfsl_tl -\tl_new:N \g_@@_font_family_xits_tl -\tl_new:N \g_@@_font_style_xits_rm_tl -\tl_new:N \g_@@_font_style_xits_bf_tl -\tl_new:N \g_@@_font_style_xits_it_tl -\tl_new:N \g_@@_font_style_xits_bfit_tl -\tl_new:N \g_@@_font_name_libertinus_serif_tl -\tl_new:N \g_@@_font_name_libertinus_sans_tl -\tl_new:N \g_@@_font_name_libertinus_math_tl -\tl_new:N \g_@@_font_name_xits_tl -\tl_new:N \g_@@_font_name_xits_math_rm_tl -\tl_new:N \g_@@_font_name_xits_math_bf_tl -\fontspec_font_if_exist:nTF { LibertinusSerif-Regular.otf } - { - \tl_set:Nn \g_@@_font_family_libertinus_serif_tl { LibertinusSerif } - \tl_set:Nn \g_@@_font_family_libertinus_sans_tl { LibertinusSans } - \tl_set:Nn \g_@@_font_family_libertinus_math_tl { LibertinusMath } - \tl_set:Nn \g_@@_font_style_libertinus_rm_tl { Regular } - \tl_set:Nn \g_@@_font_style_libertinus_bf_tl { Bold } - \tl_set:Nn \g_@@_font_style_libertinus_it_tl { Italic } - \tl_set:Nn \g_@@_font_style_libertinus_bfit_tl { BoldItalic } - \tl_set:Nn \g_@@_font_style_libertinus_bfsl_tl { BoldOblique } - } - { - \tl_set:Nn \g_@@_font_family_libertinus_serif_tl { libertinusserif } - \tl_set:Nn \g_@@_font_family_libertinus_sans_tl { libertinussans } - \tl_set:Nn \g_@@_font_family_libertinus_math_tl { libertinusmath } - \tl_set:Nn \g_@@_font_style_libertinus_rm_tl { regular } - \tl_set:Nn \g_@@_font_style_libertinus_bf_tl { bold } - \tl_set:Nn \g_@@_font_style_libertinus_it_tl { italic } - \tl_set:Nn \g_@@_font_style_libertinus_bfit_tl { bolditalic } - \tl_set:Nn \g_@@_font_style_libertinus_bfsl_tl { bolditalic } - } -\fontspec_font_if_exist:nTF { XITS-Regular.otf } - { - \tl_set:Nn \g_@@_font_family_xits_tl { XITS } - \tl_set:Nn \g_@@_font_style_xits_rm_tl { Regular } - \tl_set:Nn \g_@@_font_style_xits_bf_tl { Bold } - \tl_set:Nn \g_@@_font_style_xits_it_tl { Italic } - \tl_set:Nn \g_@@_font_style_xits_bfit_tl { BoldItalic } - \tl_set:Nn \g_@@_font_name_xits_math_rm_tl { XITSMath-Regular } - \tl_set:Nn \g_@@_font_name_xits_math_bf_tl { XITSMath-Bold } - } - { - \tl_set:Nn \g_@@_font_family_xits_tl { xits } - \tl_set:Nn \g_@@_font_style_xits_rm_tl { regular } - \tl_set:Nn \g_@@_font_style_xits_bf_tl { bold } - \tl_set:Nn \g_@@_font_style_xits_it_tl { italic } - \tl_set:Nn \g_@@_font_style_xits_bfit_tl { bolditalic } - \tl_set:Nn \g_@@_font_name_xits_math_rm_tl { xits-math } - \tl_set:Nn \g_@@_font_name_xits_math_bf_tl { xits-mathbold } - } -\tl_set:Nx \g_@@_font_name_libertinus_serif_tl - { \g_@@_font_family_libertinus_serif_tl - \g_@@_font_style_libertinus_rm_tl } -\tl_set:Nx \g_@@_font_name_libertinus_sans_tl - { \g_@@_font_family_libertinus_sans_tl - \g_@@_font_style_libertinus_rm_tl } -\tl_set:Nx \g_@@_font_name_libertinus_math_tl - { \g_@@_font_family_libertinus_math_tl - \g_@@_font_style_libertinus_rm_tl } -\tl_set:Nx \g_@@_font_name_xits_tl - { \g_@@_font_family_xits_tl - \g_@@_font_style_xits_rm_tl } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_load_font_garamond:} -% EB Garamond 系列。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_load_font_garamond: - { - \@@_setmainfont:nn { EBGaramond } - { - Extension = .otf, - UprightFont = *-Regular, - BoldFont = *-Bold, - ItalicFont = *-Italic, - BoldItalicFont = *-BoldItalic - } - \@@_setsansfont:nn { \g_@@_font_family_libertinus_sans_tl } - { - Extension = .otf, - UprightFont = *-\g_@@_font_style_libertinus_rm_tl, - BoldFont = *-\g_@@_font_style_libertinus_bf_tl, - ItalicFont = *-\g_@@_font_style_libertinus_it_tl, - BoldItalicFont = *-\g_@@_font_style_libertinus_bfsl_tl - } - \@@_setmonofont:nn { lmmonolt10 } - { - Extension = .otf, - UprightFont = *-regular, - BoldFont = *-bold, - ItalicFont = *-oblique, - BoldItalicFont = *-boldoblique - } - \@@_setmathfont:nn { Garamond-Math.otf } { } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_load_font_libertinus:} -% Libertinus 系列。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_load_font_libertinus: - { - \@@_setmainfont:nn { \g_@@_font_family_libertinus_serif_tl } - { - Extension = .otf, - UprightFont = *-\g_@@_font_style_libertinus_rm_tl, - BoldFont = *-\g_@@_font_style_libertinus_bf_tl, - ItalicFont = *-\g_@@_font_style_libertinus_it_tl, - BoldItalicFont = *-\g_@@_font_style_libertinus_bfit_tl - } - \@@_setsansfont:nn { \g_@@_font_family_libertinus_sans_tl } - { - Extension = .otf, - UprightFont = *-\g_@@_font_style_libertinus_rm_tl, - BoldFont = *-\g_@@_font_style_libertinus_bf_tl, - ItalicFont = *-\g_@@_font_style_libertinus_it_tl, - BoldItalicFont = *-\g_@@_font_style_libertinus_bfsl_tl - } - \@@_setmonofont:nn { lmmonolt10 } - { - Extension = .otf, - UprightFont = *-regular, - BoldFont = *-bold, - ItalicFont = *-oblique, - BoldItalicFont = *-boldoblique - } - \@@_setmathfont:nn { \g_@@_font_name_libertinus_math_tl .otf } { } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_load_font_lm:} -% Latin Modern 系列。在 \XeLaTeX{} 和 \LuaLaTeX{} 中已作为默认字体,所以仅需 -% 额外处理数学部分。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_load_font_lm: - { \@@_setmathfont:nn { latinmodern-math.otf } { } } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_load_font_palatino:} -% Palatino 系列。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_load_font_palatino: - { - \@@_setmainfont:nn { texgyrepagella } - { - Extension = .otf, - UprightFont = *-regular, - BoldFont = *-bold, - ItalicFont = *-italic, - BoldItalicFont = *-bolditalic - } - \@@_setsansfont:nn { \g_@@_font_family_libertinus_sans_tl } - { - Extension = .otf, - UprightFont = *-\g_@@_font_style_libertinus_rm_tl, - BoldFont = *-\g_@@_font_style_libertinus_bf_tl, - ItalicFont = *-\g_@@_font_style_libertinus_it_tl, - BoldItalicFont = *-\g_@@_font_style_libertinus_bfsl_tl, - Scale = MatchUppercase - } - \@@_setmonofont:nn { lmmonolt10 } - { - Extension = .otf, - UprightFont = *-regular, - BoldFont = *-bold, - ItalicFont = *-oblique, - BoldItalicFont = *-boldoblique - } - \@@_setmathfont:nn { texgyrepagella-math.otf } { } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_load_font_times:} -% Times 系列。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_load_font_times: - { - \@@_setmainfont:nn { \g_@@_font_family_xits_tl } - { - Extension = .otf, - UprightFont = *-\g_@@_font_style_xits_rm_tl, - BoldFont = *-\g_@@_font_style_xits_bf_tl, - ItalicFont = *-\g_@@_font_style_xits_it_tl, - BoldItalicFont = *-\g_@@_font_style_xits_bfit_tl - } - \@@_setsansfont:nn { texgyreheros } - { - Extension = .otf, - UprightFont = *-regular, - BoldFont = *-bold, - ItalicFont = *-italic, - BoldItalicFont = *-bolditalic - } - \@@_setmonofont:nn { texgyrecursor } - { - Extension = .otf, - UprightFont = *-regular, - BoldFont = *-bold, - ItalicFont = *-italic, - BoldItalicFont = *-bolditalic, - Ligatures = CommonOff - } - \@@_setmathfont:nn { \g_@@_font_name_xits_math_rm_tl .otf } - { BoldFont = \g_@@_font_name_xits_math_bf_tl .otf } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_load_font_times*:} -% Times* 系列,出数学部分外采用系统字体。 -% \begin{macrocode} -\cs_new_protected:cpn { @@_load_font_ times* : } - { - \@@_setmainfont:nn { Times~ New~ Roman } { } - \@@_setsansfont:nn { Arial } { } - \@@_setmonofont:nn { Courier~ New } { } - \@@_setmathfont:nn { \g_@@_font_name_xits_math_rm_tl .otf } - { BoldFont = \g_@@_font_name_xits_math_bf_tl .otf } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_load_cjk_font_adobe:} -% Adobe 字库。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_load_cjk_font_adobe: - { - \@@_setCJKmainfont:n { AdobeSongStd-Light } - \@@_setCJKsansfont:n { AdobeHeitiStd-Regular } - \@@_setCJKmonofont:n { AdobeFangsongStd-Regular } - \@@_set_cjk_font_kai:n { AdobeKaitiStd-Regular } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_load_cjk_font_fandol:} -% Fandol 字库。注意它是安装在 TeX 发行版中的,所以使用文件名调用。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_load_cjk_font_fandol: - { - \@@_setCJKmainfont:nn { FandolSong } - { - Extension = .otf, - UprightFont = *-Regular, - BoldFont = *-Bold, - ItalicFont = *-Regular, - BoldItalicFont = *-Bold - } - \@@_setCJKsansfont:nn { FandolHei } - { - Extension = .otf, - UprightFont = *-Regular, - BoldFont = *-Bold, - ItalicFont = *-Regular, - BoldItalicFont = *-Bold - } - \@@_setCJKmonofont:nn { FandolFang } - { - Extension = .otf, - UprightFont = *-Regular, - BoldFont = *-Regular, - ItalicFont = *-Regular, - BoldItalicFont = *-Regular - } - \@@_set_cjk_font_kai:nn { FandolKai } - { - Extension = .otf, - UprightFont = *-Regular, - BoldFont = *-Regular, - ItalicFont = *-Regular, - BoldItalicFont = *-Regular - } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_load_cjk_font_founder:} -% 方正字库。虽然有粗体(方正小标宋)等,但并非免费,故这里不做处理。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_load_cjk_font_founder: - { - \@@_setCJKmainfont:n { FZShuSong-Z01 } - \@@_setCJKsansfont:n { FZHei-B01 } - \@@_setCJKmonofont:n { FZFangSong-Z02 } - \@@_set_cjk_font_kai:n { FZKai-Z03 } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_load_cjk_font_mac:} -% macOS 自带中文字体。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_load_cjk_font_mac: - { - \@@_setCJKmainfont:nn { STSongti-SC } - { - UprightFont = *-Light, - BoldFont = *-Bold, - ItalicFont = *-Light, - BoldItalicFont = *-Bold - } - \@@_setCJKsansfont:nn { STHeitiSC } - { - UprightFont = *-Medium, - BoldFont = *-Medium, - ItalicFont = *-Medium, - BoldItalicFont = *-Medium - } - \@@_setCJKmonofont:n { STFangsong } - \@@_set_cjk_font_kai:nn { STKaitiSC } - { - UprightFont = *-Regular, - BoldFont = *-Bold, - ItalicFont = *-Regular, - BoldItalicFont = *-Bold - } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_load_cjk_font_sinotype:} -% 华文字库。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_load_cjk_font_sinotype: - { - \@@_setCJKmainfont:n { STSong } - \@@_setCJKsansfont:n { STHeiti } - \@@_setCJKmonofont:n { STFangsong } - \@@_set_cjk_font_kai:n { STKaiti } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_load_cjk_font_sourcehan:} -% 思源宋体、思源黑体。由于没有对应的楷体和仿宋,这里直接给出警告。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_load_cjk_font_sourcehan: - { - \@@_setCJKmainfont:nn { SourceHanSerifSC } - { - UprightFont = *-Regular, - BoldFont = *-Bold, - ItalicFont = *-Regular, - BoldItalicFont = *-Bold - } - \@@_setCJKsansfont:nn { SourceHanSansSC } - { - UprightFont = *-Regular, - BoldFont = *-Bold, - ItalicFont = *-Regular, - BoldItalicFont = *-Bold - } - \@@_warning:n { source-han } - } -\@@_msg_new:nn { source-han } - { Font~ set~ `sourcehan'~ does~ not~ contain~ kaiti~ and~ fangsong. } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_load_cjk_font_windows:} -% Windows 自带中文字体。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_load_cjk_font_windows: - { - \@@_setCJKmainfont:n { SimSun } - \@@_setCJKsansfont:n { SimHei } - \@@_setCJKmonofont:n { FangSong } - \@@_set_cjk_font_kai:n { KaiTi } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_load_font:} -% 字体加载命令。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_load_font: - { - \use:c { @@_load_font_ \g_@@_fontset_tl : } -% \use:c { @@_load_cjk_font_ \g_@@_cjk_fontset_tl : } - } -\ctex_at_end_preamble:n { \@@_load_font: } -% \end{macrocode} -% \end{macro} -% -%^^A 以下相关代码已在 v0.7c 中移除。 -% \changes{v0.5}{2017/09/09}{重新实现字体调用。核心内容是分离字体的声明与设定, -% 并按照宋、黑、仿、楷划分中文字体。} -% \changes{v0.6}{2017/11/11}{额外处理 XITS 字体的小型大写字母。} -% \changes{v0.5}{2017/09/23}{新增 \kvopt{font}{none} 选项。} -% \changes{v0.5}{2017/09/23}{新增 \kvopt{cjk-font}{none} 选项。} -% \changes{v0.5}{2017/09/23}{同步 \pkg{fontspec} v2.6e。} -% \changes{v0.6}{2017/10/11}{同步 \pkg{unicode-math} v0.8h。} -% -% \subsubsection{数学字体设置} -% -% 根据 GB 3102.11--93 以及 ISO 80000-2:2009 的规定,数学表达式中 -% 表示变量的拉丁字母和希腊字母均应当使用斜体。 -% 这里的 |\keys_set:nn{unicode-math}| 实际相当于 \cs{unimathsetup}。 -% \begin{macrocode} -% TODO: (2018-01-19) Do we need `mathrm=sym`? -\keys_set:nn { unicode-math } - { - math-style = ISO, - bold-style = ISO, -% mathrm = sym - } -% \end{macrocode} -% -% \subsubsection{字号} -% -% \begin{macrocode} -\keys_define:nn { fdu / style } - { -% \end{macrocode} -% -% \begin{macro}{style/font-size} -% |font-size| 不是文档类选项,不能传给 \cls{ctexbook} 文档类,因此 -% 只能手动重定义字号命令。 -% \begin{macrocode} - font-size .choice:, - font-size .value_required:n = true, - font-size / -4 .code:n = { }, -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\tiny,\scriptsize,\footnotesize,\small, -% \normalsize,\large,\Large,\LARGE,\huge,\Huge} -% 默认使用小四号字,所以只有五号字需要重新设置。 -% \begin{macrocode} - font-size / 5 .code:n = - { - \RenewDocumentCommand \tiny { } { \zihao { 7 } } - \RenewDocumentCommand \scriptsize { } { \zihao { -6 } } - \RenewDocumentCommand \footnotesize { } { \zihao { 6 } } - \RenewDocumentCommand \small { } { \zihao { -5 } } - \RenewDocumentCommand \normalsize { } { \zihao { 5 } } - \RenewDocumentCommand \large { } { \zihao { -4 } } - \RenewDocumentCommand \Large { } { \zihao { -3 } } - \RenewDocumentCommand \LARGE { } { \zihao { -2 } } - \RenewDocumentCommand \huge { } { \zihao { 2 } } - \RenewDocumentCommand \Huge { } { \zihao { 1 } } -% } -% } -%<*class> - }, -% \end{macrocode} -% \end{macro} -% -% \subsubsection{句号} -% -% \begin{macro}{style/fullwidth-stop} -% \changes{v0.6}{2017/10/14}{支持类别码和 TECKit 映射两种机制。} -% 设置句号形状(圆圈或是圆点)。 -% \begin{macrocode} - fullwidth-stop .choice:, - fullwidth-stop .value_required:n = true, -% \end{macrocode} -% 利用类别码机制切换,只有显式的\FSID 会被替换。 -% \begin{macrocode} - fullwidth-stop / catcode .code:n = - { \@@_set_fullwidth_stop_catcode: }, -% \end{macrocode} -% 利用 TECKit 映射机制切换,相当于设置了 \tn{defaultCJKfontfeatures} -% |{|\kvopt{Map\-ping}{fullwidth-stop}|}|。这种手段会替换所有出现的\FSID, -% 并且将影响所有字体。只在 \XeTeX{} 下可用。 -% \begin{macrocode} - fullwidth-stop / mapping .code:n = - { - \sys_if_engine_xetex:TF - { - \clist_gset:Nn \g__xeCJK_default_features_clist - { Mapping = fullwidth-stop } - } - { -% \end{macrocode} -% \LuaTeX{} 下改用类别码机制代替,并给出警告。 -% \begin{macrocode} - \sys_if_engine_luatex:T - { - \@@_warning:n { mapping-not-available } - \@@_set_fullwidth_stop_catcode: - } - } - }, - fullwidth-stop / false .code:n = { } - } -% \end{macrocode} -% \end{macro} -% -% 提示信息。 -% \begin{macrocode} -\@@_msg_new:nn { mapping-not-available } - { - Option~ "fullwidth-stop = mapping"~ is~ not~ available~ in~ LuaTeX. \\ - "fullwidth-stop = catcode"~ will~ be~ set~ instead. - } -% \end{macrocode} -% -% \begin{macro}{\@@_set_fullwidth_stop_catcode:} -% 将\FSID 设置为活动符,并定义为句点\FSFW。 -% \begin{macrocode} -\cs_new:Npn \@@_set_fullwidth_stop_catcode: - { - \char_set_active_eq:nN { "3002 } \c_@@_fwid_full_stop_tl - \char_set_catcode_active:n { "3002 } - } -% -% \end{macrocode} -% \end{macro} -% -% \changes{v0.6}{2017/10/28}{优化 \LuaTeX{} 下希腊字母、西里尔字母和带圈数字的 -% 显示(\pkg{ctex} v2.4.11 已默认进行处理)。} -% -% \subsection{页眉页脚} -% -% 清除默认页眉页脚格式。 -% \begin{macrocode} -\fancyhf { } -% \end{macrocode} -% -% \begin{variable}{\l_@@_header_center_mark_tl} -% 保存中间页眉的文字。正文中设置为空,目录、摘要、符号表等设置为相应标题。 -% \begin{macrocode} -\tl_new:N \l_@@_header_center_mark_tl -% \end{macrocode} -% \end{variable} -% -% 构建页眉,要在单面或双面下分别设置。 -% -% \cs{fancyhead} 的选项中,\opt{E} 和 \opt{O} 分别表示偶数(even) -% 和奇数(odd), 而 \opt{L}、\opt{R} 和 \opt{C} 则分别表示左 -% (left)、右(right)和中间(center)。按照通常的排版规则, -% 在双面模式下,偶数页的中间页眉文字在左,奇数页则在右。单面模式下, -% 左右页眉都要显示。 -% \begin{macrocode} -\bool_if:NTF \g_@@_twoside_bool -%<*class> - { - \fancyhead [ EL ] { \small \nouppercase { \fdu@kai \leftmark } } - \fancyhead [ OR ] { \small \nouppercase { \fdu@kai \rightmark } } - } - { - \fancyhead [ L ] { \small \nouppercase { \fdu@kai \leftmark } } - \fancyhead [ R ] { \small \nouppercase { \fdu@kai \rightmark } } - \fancyhead [ C ] - { - \small \nouppercase - { \fdu@kai \l_@@_header_center_mark_tl } - } - } -% -%<*class-en> - { - \fancyhead [ EL ] { \small \nouppercase { \itshape \leftmark } } - \fancyhead [ OR ] { \small \nouppercase { \itshape \rightmark } } - } - { - \fancyhead [ L ] { \small \nouppercase { \itshape \leftmark } } - \fancyhead [ R ] { \small \nouppercase { \itshape \rightmark } } - \fancyhead [ C ] - { - \small \nouppercase - { \itshape \l_@@_header_center_mark_tl } - } - } -% -% \end{macrocode} -% -% 构建页脚,用来显示页码。选项 \opt{C} 表示居中(center)。 -% \begin{macrocode} -\fancyfoot [ C ] { \small \thepage } -% \end{macrocode} -% -% 关闭横线显示(未启用)。 -% \begin{macrocode} -% \RenewDocumentCommand \headrulewidth { } { 0 pt } -% \end{macrocode} -% -% \begin{macro}{\cleardoublepage} -% 重定义 \tn{cleardoublepage},使得偶数页面在没有内容时也不显示页眉页脚,见 -% \url{https://tex.stackexchange.com/a/1683}。最后清空中间页眉,确保正文部分 -% 页眉显示正确。 -% \begin{macrocode} -\RenewDocumentCommand \cleardoublepage { } - { - \clearpage - \bool_if:NT \g_@@_twoside_bool - { - \int_if_odd:nF \c@page - { \hbox:n { } \thispagestyle { empty } \newpage } - } - \tl_gset:Nn \l_@@_header_center_mark_tl { } - } -% \end{macrocode} -% \end{macro} -% -% \pkg{ctex} 宏包使用 \opt{heading} 选项后,会把页面格式设置为 |headings|。 -% 因此必须在 \pkg{ctex} 调用之后重新设置 \cs{pagestyle} 为 |fancy|。 -% \begin{macrocode} -\pagestyle { fancy } -% \end{macrocode} -% -% \subsection{章节标题结构} -% -% |\keys_set:nn{ctex}| 实际相当于 \cs{ctexset}。 -% \begin{macrocode} -\keys_set:nn { ctex } - { -% \end{macrocode} -% 设置章(chapter)、节(section)与小节(sub-section)标题样式。 -% 此处使用 \kvopt{fixskip}{true} 选项来抑制前后的多余间距。 -% \begin{macrocode} - chapter = - { -% format = \huge \normalfont \sffamily \centering, -%<*class-en> - format = \centering, - nameformat = \LARGE \bfseries, - titleformat = \huge \bfseries, - aftername = \par \nobreak \vskip 10 pt, -% - beforeskip = 50 pt, - afterskip = 40 pt, - number = \@@_arabic:n { chapter }, - fixskip = true - }, - section = - { -% format = \Large \normalfont \sffamily \raggedright, -% format = \Large \bfseries \raggedright, - beforeskip = 3.5 ex plus 1.0 ex minus 0.2 ex, - afterskip = 2.7 ex plus 0.5 ex, - fixskip = true - }, - subsection = - { -% format = \large \normalfont \sffamily \raggedright, -% format = \large \bfseries \raggedright, - beforeskip = 3.25 ex plus 1.0 ex minus 0.2 ex, - afterskip = 2.5 ex plus 0.3 ex, - fixskip = true - } - } -% \end{macrocode} -% -% \changes{v0.7d}{2019/03/24}{优化目录、摘要、参考文献等的标题实现。} -% -% \begin{macro}{\@@_chapter:n,\@@_chapter:V} -% 手动生成章的标题,用于摘要、参考文献等。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_chapter:n #1 - { - \group_begin: - \ctexset { chapter / numbering = false } - \chapter {#1} - \@@_chapter_header:n {#1} - \group_end: - } -\cs_generate_variant:Nn \@@_chapter:n { V } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_chapter_no_toc:n,\@@_chapter_no_toc:V} -% 目录自身不出现在目录中,需特别处理。参考 -% \url{https://tex.stackexchange.com/a/1821}。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_chapter_no_toc:n #1 - { - \chapter * {#1} - \@@_chapter_header:n {#1} - \pdfbookmark [0] {#1} { toc } - } -\cs_generate_variant:Nn \@@_chapter_no_toc:n { V } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_chapter_header:n} -% 单页模式下,目录、摘要、符号表等的页眉中间为相应标题,左右为空。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_chapter_header:n #1 - { - \bool_if:NTF \g_@@_twoside_bool - { \markboth {#1} {#1} } - { - \markboth { } { } - \tl_gset:Nn \l_@@_header_center_mark_tl {#1} - } - } -% \end{macrocode} -% \end{macro} -% -% \subsection{脚注} -% -% \changes{v0.3}{2017/02/21}{支持脚注。} -% -% \subsubsection{编号样式} -% -% 各种脚注编号样式的名称。 -% \begin{macrocode} -\clist_map_inline:nn - { - { plain } { plain }, - { libertinus } { libertinus }, - { libertinus_neg } { libertinus* }, - { libertinus_sans } { libertinus-sans }, - { pifont } { pifont }, - { pifont_neg } { pifont* }, - { pifont_sans } { pifont-sans }, - { pifont_sans_neg } { pifont-sans* }, - { xits } { xits }, - { xits_sans } { xits-sans }, - { xits_sans_neg } { xits-sans* } - } - { \@@_define_fn_style:nn #1 } -% \end{macrocode} -% -% \begin{variable}{\l_@@_fn_style_tl} -% 保存当前使用的脚注编号样式。 -% \begin{macrocode} -\tl_new:N \l_@@_fn_style_tl -% \end{macrocode} -% \end{variable} -% -% \begin{macrocode} -\keys_define:nn { fdu / style } - { -% \end{macrocode} -% -% \begin{macro}{style/footnote-style} -% 脚注类型共分四大类: -% \begin{itemize} -% \item \opt{plain}:使用当前字体; -% \item \opt{libertinus}:取自 Libertinus Serif 和 Libertinus Sans -% 字体; -% \item \opt{pifont}:使用 \pkg{pifont} 宏包; -% \item \opt{xits}:取自 XITS 字体。 -% \end{itemize} -% 不带任何修饰的为衬线阳文符号,带“|sans|”的为无衬线符号,带“|*|”的 -% 为阴文版本。 -% \begin{macrocode} - footnote-style .choices:nn = - { - plain, - libertinus, libertinus*, libertinus-sans, - pifont, pifont*, pifont-sans, pifont-sans*, - xits, xits-sans, xits-sans* - } -% \end{macrocode} -% \changes{v0.6}{2017/11/12}{不再依赖 XITS-Math 字体。} -% 若使用 \opt{pifont} 类型,则需引入 \pkg{pifont} 宏包。 -% \begin{macrocode} - { - \tl_gset_eq:NN \l_@@_fn_style_tl \l_keys_choice_tl - \int_compare:nT { 5 <= \l_keys_choice_int <= 8 } - { \RequirePackage { pifont } } - }, - footnote-style .value_required:n = true - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_fn_symbol_libertinus:n} -% \opt{libertinus} 普通版。\numrange{1}{20} 为数字,\numrange{21}{46} -% 为小写英文字母,\numrange{47}{72} 为大写英文字母。 -% \begin{macrocode} -\cs_new:Npn \@@_fn_symbol_libertinus:n #1 - { - \int_compare:nTF { #1 >= 21 } - { - \int_compare:nTF { #1 >= 47 } - { \@@_symbol:n { \int_eval:n { "24B6 - 47 + #1 } } } - { \@@_symbol:n { \int_eval:n { "24D0 - 21 + #1 } } } - } - { \@@_symbol:n { \int_eval:n { "2460 - 1 + #1 } } } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_fn_symbol_libertinus_neg:n} -% \opt{libertinus} 阴文衬线版。只含 \numrange{1}{20}。 -% \begin{macrocode} -\cs_new:Npn \@@_fn_symbol_libertinus_neg:n #1 - { - \int_compare:nTF { #1 >= 11 } - { \@@_symbol:n { \int_eval:n { "24EB - 11 + #1 } } } - { \@@_symbol:n { \int_eval:n { "2776 - 1 + #1 } } } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_fn_symbol_libertinus_sans:n} -% \opt{libertinus} 阳文无衬线版。符号排列与普通版相同。 -% \begin{macrocode} -\cs_new_eq:NN \@@_fn_symbol_libertinus_sans:n \@@_fn_symbol_libertinus:n -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_fn_symbol_pifont:n} -% \opt{pifont} 普通版。以下四种都只包含 \numrange{1}{10}。 -% \begin{macrocode} -\cs_new:Npn \@@_fn_symbol_pifont:n #1 - { \ding { \int_eval:n { 171 + #1 } } } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_fn_symbol_pifont_neg:n} -% \opt{pifont} 阴文衬线版。 -% \begin{macrocode} -\cs_new:Npn \@@_fn_symbol_pifont_neg:n #1 - { \ding { \int_eval:n { 181 + #1 } } } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_fn_symbol_pifont_sans:n} -% \opt{pifont} 阳文无衬线版。 -% \begin{macrocode} -\cs_new:Npn \@@_fn_symbol_pifont_sans:n #1 - { \ding { \int_eval:n { 191 + #1 } } } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_fn_symbol_pifont_sans_neg:n} -% \opt{pifont} 阴文无衬线版。 -% \begin{macrocode} -\cs_new:Npn \@@_fn_symbol_pifont_sans_neg:n #1 - { \ding { \int_eval:n { 201 + #1 } } } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_fn_symbol_xits:n} -% \opt{xits} 普通版。\numrange{1}{9} 为数字,\numrange{10}{35} -% 为小写英文字母,\numrange{36}{61} 为大写英文字母。 -% \begin{macrocode} -\cs_new:Npn \@@_fn_symbol_xits:n #1 - { - \int_compare:nTF { #1 >= 10 } - { - \int_compare:nTF { #1 >= 36 } - { \@@_symbol:n { \int_eval:n { "24B6 - 36 + #1 } } } - { \@@_symbol:n { \int_eval:n { "24D0 - 10 + #1 } } } - } - { \@@_symbol:n { \int_eval:n { "2460 - 1 + #1 } } } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_fn_symbol_xits_sans:n} -% \opt{xits} 阳文无衬线版。只包含 \numrange{1}{10}。 -% \begin{macrocode} -\cs_new:Npn \@@_fn_symbol_xits_sans:n #1 - { \@@_symbol:n { \int_eval:n { "2780 - 1 + #1 } } } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_fn_symbol_xits_sans_neg:n} -% \opt{xits} 阴文无衬线版。也只包含 \numrange{1}{10}。 -% \begin{macrocode} -\cs_new:Npn \@@_fn_symbol_xits_sans_neg:n #1 - { \@@_symbol:n { \int_eval:n { "278A - 1 + #1 } } } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\thefootnote} -% \changes{v0.7}{2018/01/17}{改为可完全展开的命令。} -% 重定义脚注编号。 -% \begin{macrocode} -\cs_set:Npn \thefootnote { \fdu_footnote_number:N \c@footnote } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\fdu_footnote_number:N} -% 脚注编号样式。 -% \begin{macrocode} -\cs_new:Npn \fdu_footnote_number:N #1 - { - \tl_case:NnF \l_@@_fn_style_tl - { -% \end{macrocode} -% \opt{plain} 类型直接使用计数器 |footnote| 的值。 -% \begin{macrocode} - \c_@@_fn_style_plain_tl - { \int_use:N #1 } -% \end{macrocode} -% \opt{libertinus} 类型需要使用 Libertinus Serif 或 -% Libertinus Sans 字体。 -% \begin{macrocode} - \c_@@_fn_style_libertinus_tl - { - \fontspec { \g_@@_font_name_libertinus_serif_tl .otf } - \@@_fn_symbol_libertinus:n {#1} - } - \c_@@_fn_style_libertinus_neg_tl - { - \fontspec { \g_@@_font_name_libertinus_serif_tl .otf } - \@@_fn_symbol_libertinus_neg:n {#1} - } - \c_@@_fn_style_libertinus_sans_tl - { - \fontspec { \g_@@_font_name_libertinus_sans_tl .otf } - \@@_fn_symbol_libertinus_sans:n {#1} - } -% \end{macrocode} -% \opt{pifont} 类型无需进行额外的操作。 -% \begin{macrocode} - \c_@@_fn_style_pifont_tl - { \@@_fn_symbol_pifont:n {#1} } - \c_@@_fn_style_pifont_neg_tl - { \@@_fn_symbol_pifont_neg:n {#1} } - \c_@@_fn_style_pifont_sans_tl - { \@@_fn_symbol_pifont_sans:n {#1} } - \c_@@_fn_style_pifont_sans_neg_tl - { \@@_fn_symbol_pifont_sans_neg:n {#1} } -% \end{macrocode} -% \opt{xits} 类型需要临时切换数学字体。 -% \begin{macrocode} - \c_@@_fn_style_xits_tl - { - \fontspec { \g_@@_font_name_xits_tl .otf } - \@@_fn_symbol_xits:n {#1} - } - \c_@@_fn_style_xits_sans_tl - { - \fontspec { \g_@@_font_name_xits_tl .otf } - \@@_fn_symbol_xits_sans:n {#1} - } - \c_@@_fn_style_xits_sans_neg_tl - { - \fontspec { \g_@@_font_name_xits_tl .otf } - \@@_fn_symbol_xits_sans_neg:n {#1} - } - } -% \end{macrocode} -% 变量 \cs{l_@@_fn_style_tl} 保存的类型未知时,默认使用 \opt{plain} -% 类型。 -% \begin{macrocode} - { \int_use:N #1 } - } -% \end{macrocode} -% \end{macro} -% -% \subsubsection{整体样式} -% -% \begin{macro}[int]{\@makefntext} -% \changes{v0.7}{2018/01/18}{简化实现,兼容 \pkg{fancyvrb} 宏包。 -% 不再使用悬挂缩进。} -% 重定义内部脚注文字命令,使脚注编号不使用上标,宽度为 \SI{1.5}{em}。 -% 见 \url{http://tex.stackexchange.com/q/19844} 和 -% \url{https://www.zhihu.com/question/53030087}。 -% \begin{macrocode} -\cs_set:Npn \@makefntext #1 - { - \mode_leave_vertical: - \hbox_to_wd:nn { 1.5 em } { \@thefnmark \hfil } - #1 - } -% \end{macrocode} -% \end{macro} -% -% \subsection{定理环境} -% -% \changes{v0.3}{2017/05/07}{新增定理环境。} -% -% \begin{variable}{\c_@@_thm_style_plain_clist, -% \c_@@_thm_style_break_clist} -% 保存 \opt{plain}、\opt{break} 两种类型的定理样式名称。 -% \begin{macrocode} -\clist_const:Nn \c_@@_thm_style_plain_clist - { plain, margin, change } -\clist_const:Nn \c_@@_thm_style_break_clist - { break, marginbreak, changebreak } -% \end{macrocode} -% \end{variable} -% -% \begin{variable}{\l_@@_thm_style_tl, -% \l_@@_thm_header_font_tl, -% \l_@@_thm_body_font_tl, -% \l_@@_thm_qed_tl, -% \l_@@_thm_counter_tl} -% 定理所需的一些字段。 -% \begin{macrocode} -\tl_new:N \l_@@_thm_style_tl -\tl_new:N \l_@@_thm_header_font_tl -\tl_new:N \l_@@_thm_body_font_tl -\tl_new:N \l_@@_thm_qed_tl -\tl_new:N \l_@@_thm_counter_tl -% \end{macrocode} -% \end{variable} -% -% \begin{macro}{theorem/style, -% theorem/header-font, -% theorem/body-font, -% theorem/qed, -% theorem/counter} -% 定义 |fdu/theorem| 键值类。 -% \begin{macrocode} -\keys_define:nn { fdu / theorem } - { - style .tl_set:N = \l_@@_thm_style_tl, - header-font .tl_set:N = \l_@@_thm_header_font_tl, - body-font .tl_set:N = \l_@@_thm_body_font_tl, - qed .tl_set:N = \l_@@_thm_qed_tl, - counter .tl_set:N = \l_@@_thm_counter_tl - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_thm_ntheorem_style:n,\@@_thm_ntheorem_new:w} -% 拷贝 \pkg{ntheorem} 命令。 -% \begin{macrocode} -\cs_new_eq:NN \@@_thm_ntheorem_style:n \theoremstyle -\cs_new_eq:NN \@@_thm_ntheorem_new:w \newtheorem -% \end{macrocode} -% \end{macro} -% -% \changes{v0.7}{2017/12/12}{原 \cs{fdunewtheorem} 命令更名为 -% \cs{new\-the\-orem}。} -% -% \begin{macro}{\newtheorem} -% 定义新的定理环境。 -% \begin{macrocode} -\RenewDocumentCommand \newtheorem { s o m m } - { -% \end{macrocode} -% 默认情况下,由 \cs{newtheorem*} 创建的定理其证毕符号为 \cs{QED}, -% 而由 \cs{new\-the\-orem} 创建的则不带证毕符号。符号 \cs{QED} 由 -% \pkg{unicode-math} 宏包提供。 -% \begin{macrocode} - \IfBooleanTF {#1} - { \tl_set:Nn \l_@@_thm_qed_tl { \ensuremath { \QED } } } - { \tl_set:Nn \l_@@_thm_qed_tl { } } -% \end{macrocode} -% 设置默认样式为 \opt{plain}。 -% \begin{macrocode} -% TODO: (2017-12-07) Move to interface - \tl_set:Nn \l_@@_thm_style_tl { plain } -% \end{macrocode} -% 处理可选参数。利用 |fdu/theorem| 键值对设置,并按此修改证毕符号、 -% 定理头字体和定理正文字体。 -% \begin{macrocode} - \IfValueT {#2} { \keys_set:nn { fdu / theorem } {#2} } - \fdu_thm_set_header_font:V \l_@@_thm_header_font_tl - \fdu_thm_set_body_font:V \l_@@_thm_body_font_tl - \fdu_thm_set_qed:V \l_@@_thm_qed_tl -% \end{macrocode} -% \cs{newtheorem} 负责创建编号定理,而 \cs{newtheorem*} -% 则负责创建无编号定理。以下分这两种情况处理。 -% \begin{macrocode} - \IfBooleanTF {#1} - { -% \end{macrocode} -% 带 |*| 的版本原则上只接受 \opt{plain} 和 \opt{break} 两种样式, -% 其余样式将被转换成这两者其中之一。 -% \begin{macrocode} - \clist_if_in:nVF { plain, break } \l_@@_thm_style_tl - { - \clist_if_in:NVTF - \c_@@_thm_style_plain_clist \l_@@_thm_style_tl - { \@@_thm_redefine_style:n { plain } } - { - \clist_if_in:NVTF - \c_@@_thm_style_break_clist \l_@@_thm_style_tl - { \@@_thm_redefine_style:n { break } } - { - \@@_error:nx { unknown-theorem-style } - { \l_@@_thm_style_tl } - } - } - } -% \end{macrocode} -% \pkg{ntheorem} 宏包提供的无编号定理带有 |nonumber| 前缀, -% 这里将其加上。 -% \begin{macrocode} - \tl_put_left:Nn \l_@@_thm_style_tl { nonumber } - \fdu_thm_new_no_number:Vxx \l_@@_thm_style_tl {#3} {#4} - } - { -% \end{macrocode} -% 不带 |*| 的版本支持不含“|nonumber|”的所有定理样式。 -% \begin{macrocode} - \clist_clear:N \l_@@_tmpa_clist - \clist_concat:NNN \l_@@_tmpa_clist - \c_@@_thm_style_plain_clist \c_@@_thm_style_break_clist - \clist_if_in:NVF \l_@@_tmpa_clist \l_@@_thm_style_tl - { - \@@_error:nx { unknown-theorem-style } - { \l_@@_thm_style_tl } - } - \fdu_thm_new:VVxx \l_@@_thm_style_tl \l_@@_thm_counter_tl - {#3} {#4} - } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_thm_redefine_style:n} -% 重定义定理样式,并给出警告。 -% \begin{macrocode} -\cs_new:Npn \@@_thm_redefine_style:n #1 - { - \@@_warning:nxx { redefine-theorem-style } - {#1} { \l_@@_thm_style_tl } - \tl_set:Nn \l_@@_thm_style_tl {#1} - } -% \end{macrocode} -% \end{macro} -% -% 提示信息。 -% \begin{macrocode} -\@@_msg_new:nn { redefine-theorem-style } - { Theorem~ style~ "#2"~ will~ be~ redefined~ as~ "#1". } -\@@_msg_new:nn { unknown-theorem-style } - { Theorem~ style~ "#1"~ is~ unknown. } -% \end{macrocode} -% -% \begin{macro}{\fdu_thm_new:nnnn,\fdu_thm_new:VVxx} -% 带编号的定理环境。 -% \begin{arguments} -% \item 样式 -% \item 计数器 -% \item 定理环境名称 -% \item 定理头文字 -% \end{arguments} -% \begin{macrocode} -\cs_new:Npn \fdu_thm_new:nnnn #1#2#3#4 - { - \@@_thm_ntheorem_style:n {#1} - \@@_thm_ntheorem_new:w {#3} {#4} [#2] - } -\cs_generate_variant:Nn \fdu_thm_new:nnnn { VVxx } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\fdu_thm_new_no_number:nnn, -% \fdu_thm_new_no_number:Vxx} -% 不带编号的定理环境。 -% \begin{arguments} -% \item 样式 -% \item 定理环境名称 -% \item 定理头文字 -% \end{arguments} -% \begin{macrocode} -\cs_new:Npn \fdu_thm_new_no_number:nnn #1#2#3 - { - \@@_thm_ntheorem_style:n {#1} - \@@_thm_ntheorem_new:w {#2} {#3} - } -\cs_generate_variant:Nn \fdu_thm_new_no_number:nnn { Vxx } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\fdu_thm_set_qed:n, -% \fdu_thm_set_header_font:n, -% \fdu_thm_set_body_font:n, -% \fdu_thm_set_qed:V, -% \fdu_thm_set_header_font:V, -% \fdu_thm_set_body_font:V} -% 封装 \pkg{ntheorem} 宏包提供的若干命令,分别用以设置证毕符号、 -% 定理头字体和定理正文字体。 -% \begin{macrocode} -\cs_new:Npn \fdu_thm_set_qed:n #1 { \theoremsymbol {#1} } -\cs_new:Npn \fdu_thm_set_header_font:n #1 { \theoremheaderfont {#1} } -\cs_new:Npn \fdu_thm_set_body_font:n #1 { \theorembodyfont {#1} } -\cs_generate_variant:Nn \fdu_thm_set_qed:n { V } -\cs_generate_variant:Nn \fdu_thm_set_header_font:n { V } -\cs_generate_variant:Nn \fdu_thm_set_body_font:n { V } -% \end{macrocode} -% \end{macro} -% -% \subsection{图表绘制;浮动体} -% -% \changes{v0.3}{2017/07/09}{支持浮动体。} -% -% 分别设置浮动体 \env{figure} 和 \env{table} 的标题样式。 -% \begin{macrocode} -\captionsetup [ figure ] - { - font = small, - labelsep = quad - } -\captionsetup [ table ] - { - font = { small, sf }, - labelsep = quad - } -% \end{macrocode} -% -% \begin{macro}{\thefigure,\thetable} -% \changes{v0.7}{2018/01/17}{改为可完全展开的命令。} -% 重定义图表编号。 -% \begin{macrocode} -\cs_set:Npn \thefigure - { \@@_arabic:n { chapter } - \@@_arabic:n { figure } } -\cs_set:Npn \thetable - { \@@_arabic:n { chapter } - \@@_arabic:n { table } } -% \end{macrocode} -% \end{macro} -% -% \subsection{封面} -% -% \subsubsection{信息录入} -% -% \begin{variable}{\l_@@_info_title_tl, -% \l_@@_info_date_tl, -% \l_@@_info_author_tl, -% \l_@@_info_supervisor_tl, -% \l_@@_info_department_tl, -% \l_@@_info_major_tl, -% \l_@@_info_student_id_tl, -% \l_@@_info_school_id_tl, -% \l_@@_info_clc_tl, -% \l_@@_info_instructors_clist, -% \l_@@_info_keywords_clist} -% 封面所需的一些字段。 -% \begin{macrocode} -\clist_map_inline:nn - { - title, date, author, supervisor, department, major, student_id, - school_id, clc - } - { \tl_new:c { l_@@_info_ #1 _tl } } -\clist_new:N \l_@@_info_instructors_clist -\clist_new:N \l_@@_info_keywords_clist -% \end{macrocode} -% \end{variable} -% -% \begin{variable}{\l_@@_info_title_en_tl, -% \l_@@_info_author_en_tl, -% \l_@@_info_supervisor_en_tl, -% \l_@@_info_department_en_tl, -% \l_@@_info_major_en_tl, -% \l_@@_info_keywords_en_clist} -% 对应的英文字段。 -% \begin{macrocode} -\clist_map_inline:nn - { title, author, supervisor, department, major } - { \tl_new:c { l_@@_info_ #1 _en_tl } } -\clist_new:N \l_@@_info_keywords_en_clist -% \end{macrocode} -% \end{variable} -% -% \begin{variable}{\l_@@_info_degree_type_int} -% 学位类型。1 为学术学位,2 为专业学位。 -% \begin{macrocode} -\int_new:N \l_@@_info_degree_type_int -% \end{macrocode} -% \end{variable} -% -% 定义 |fdu/info| 键值类。 -% \begin{macrocode} -\keys_define:nn { fdu / info } - { -% \end{macrocode} -% -% \changes{v0.7}{2018/02/01}{新增 \opt{info/degree} 选项。} -% -% \begin{macro}{info/degree} -% 学位类型。只对硕士论文有效。 -% \begin{macrocode} - degree .choices:nn = - { academic, professional } - { \int_set_eq:NN \l_@@_info_degree_type_int \l_keys_choice_int }, -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{info/title,info/title*} -% 论文题目。以下带星号的项目均表示相应的英文字段。 -% \begin{macrocode} - title .tl_set:N = \l_@@_info_title_tl, - title* .tl_set:N = \l_@@_info_title_en_tl, -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{info/date} -% 论文完成日期。 -% \begin{macrocode} - date .tl_set:N = \l_@@_info_date_tl, -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{info/author,info/author*} -% 作者姓名。 -% \begin{macrocode} - author .tl_set:N = \l_@@_info_author_tl, - author* .tl_set:N = \l_@@_info_author_en_tl, -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{info/supervisor,info/supervisor*} -% 导师姓名。 -% \begin{macrocode} - supervisor .tl_set:N = \l_@@_info_supervisor_tl, -% supervisor* .tl_set:N = \l_@@_info_supervisor_en_tl, -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{info/instructors} -% 指导小组成员。 -% \begin{macrocode} - instructors .clist_set:N = \l_@@_info_instructors_clist, -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{info/department,info/department*} -% 院系。 -% \begin{macrocode} - department .tl_set:N = \l_@@_info_department_tl, -% department* .tl_set:N = \l_@@_info_department_en_tl, -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{info/major,info/major*} -% 专业。 -% \begin{macrocode} - major .tl_set:N = \l_@@_info_major_tl, -% major* .tl_set:N = \l_@@_info_major_en_tl, -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{info/student-id} -% 学号。 -% \begin{macrocode} - student-id .tl_set:N = \l_@@_info_student_id_tl, -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{info/school-id} -% 学校代码。 -% \begin{macrocode} - school-id .tl_set:N = \l_@@_info_school_id_tl, -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{info/keywords,info/keywords*} -% 论文关键字。 -% \begin{macrocode} - keywords .clist_set:N = \l_@@_info_keywords_clist, - keywords* .clist_set:N = \l_@@_info_keywords_en_clist, -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{info/clc} -% 中图分类号。 -% \begin{macrocode} - clc .tl_set:N = \l_@@_info_clc_tl - } -% \end{macrocode} -% \end{macro} -% -% \changes{v0.4}{2017/08/10}{新增 \opt{style/logo} 与 -% \opt{style/logo-size} 选项。} -% -% \begin{variable}{\l_@@_cover_logo_tl,\l_@@_cover_logo_size_clist} -% \begin{macrocode} -\tl_new:N \l_@@_cover_logo_tl -\clist_new:N \l_@@_cover_logo_size_clist -% \end{macrocode} -% \end{variable} -% -% \begin{macro}{style/logo,style/logo-size} -% 校名图片的文件名和尺寸。 -% \begin{macrocode} -\keys_define:nn { fdu / style } - { - logo .tl_set:N = \l_@@_cover_logo_tl, - logo-size .clist_set:N = \l_@@_cover_logo_size_clist - } -% \end{macrocode} -% \end{macro} -% -% \subsubsection{密级} -% -% \changes{v0.3}{2017/07/04}{新增 \opt{info/secret-level} 与 -% \opt{info/secret-year} 选项。} -% -% \begin{variable}{\l_@@_secret_bool} -% 是否显示密级。 -% \begin{macrocode} -\bool_new:N \l_@@_secret_bool -% \end{macrocode} -% \end{variable} -% -% \begin{variable}{\l_@@_info_secret_level_tl} -% 保存当前的密级。 -% \begin{macrocode} -\tl_new:N \l_@@_info_secret_level_tl -% \end{macrocode} -% \end{variable} -% -% \begin{macrocode} -\keys_define:nn { fdu / info } - { -% \end{macrocode} -% -% \begin{macro}{info/secret-level} -% \changes{v0.6}{2017/11/11}{不再依赖 XITS-Math 字体。} -% 密级。\opt{none} 表示不涉密,\opt{i}、\opt{ii}、\opt{iii} 分别为 -% 秘密、机密、绝密。 -% \begin{macrocode} - secret-level .choices:nn = - { none, i, ii, iii } - { - \int_compare:nTF { \l_keys_choice_int >= 2 } - { - \bool_set_true:N \l_@@_secret_bool - \tl_set:Nn \l_@@_info_secret_level_tl - { - \clist_item:Nn \c_@@_secret_clist - { \l_keys_choice_int - 1 } - } - } - { \bool_set_false:N \l_@@_secret_bool } - }, - secret-level .value_required:n = true, -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{info/secret-year} -% 保密年限。 -% \begin{macrocode} - secret-year .tl_set:N = \l_@@_info_secret_year_tl - } -% \end{macrocode} -% \end{macro} -% -% \subsubsection{定义内部函数} -% -% \begin{macro}{\@@_spread_box:nn} -% 分散对齐的水平盒子。 -% \begin{arguments} -% \item 宽度 -% \item 内容 -% \end{arguments} -% 利用 \cs{tl_map_inline:nn} 在字符间插入 \tn{hfil};紧随其后的 \tn{unskip} -% 将会去掉最后一个 \tn{hfil}。见 \url{https://tex.stackexchange.com/q/169689}。 -% |#2| 需要完全展开以避免 underfull 警告。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_spread_box:nn #1#2 - { - \mode_leave_vertical: - \hbox_to_wd:nn {#1} - { \tl_map_inline:xn {#2} { ##1 \hfil } \unskip } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_center_box:nn,\@@_center_box:Vn} -% 居中对齐的水平盒子。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_center_box:nn #1#2 - { - \mode_leave_vertical: - \hbox_to_wd:nn {#1} { \hfil #2 \hfil } - } -\cs_generate_variant:Nn \@@_center_box:nn { Vn } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_fixed_width_box:nn} -% 限宽盒子(允许换行)。 -% \begin{macrocode} -\cs_new:Npn \@@_fixed_width_box:nn #1#2 - { \parbox {#1} {#2} } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_fixed_width_center_box:nn} -% 居中对齐的限宽盒子(允许换行)。 -% \begin{macrocode} -\cs_new:Npn \@@_fixed_width_center_box:nn #1#2 - { \parbox {#1} { \centering #2 } } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_get_text_width:Nn,\@@_get_text_width:NV} -% 获取文本宽度,并存入 |dim| 型变量。 -% \begin{arguments} -% \item |dim| 型变量 -% \item 内容 -% \end{arguments} -% \begin{macrocode} -\cs_new:Npn \@@_get_text_width:Nn #1#2 - { - \hbox_set:Nn \l_@@_tmpa_box {#2} - \dim_set:Nn #1 { \box_wd:N \l_@@_tmpa_box } - } -\cs_generate_variant:Nn \@@_get_text_width:Nn { NV } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_get_max_text_width:NN} -% \changes{v0.6}{2017/11/24}{移除不必要的字号设置。} -% 获取多个文本中的最大宽度,并存入 |dim| 型变量。 -% \begin{arguments} -% \item |dim| 型变量 -% \item 文本 |clist| -% \end{arguments} -% 当 \cs{l_@@_tmpa_clist} 非空时,弹出最后一个元素 -% 赋给 \cs{l_@@_tmpa_tl},获取其长度后与 |#1| 进行比较, -% 二者中较大的那一个将成为 |#1| 的新值。 -% 不断循环,直至 \cs{l_@@_tmpa_clist} 为空。 -% \begin{macrocode} -\cs_new:Npn \@@_get_max_text_width:NN #1#2 - { -% \end{macrocode} -% 这里用 |group| 确保局部变量不会被污染。 -% \begin{macrocode} - \group_begin: - \clist_set_eq:NN \l_@@_tmpa_clist #2 - \bool_until_do:nn { \clist_if_empty_p:N \l_@@_tmpa_clist } - { - \clist_pop:NN \l_@@_tmpa_clist \l_@@_tmpa_tl - \@@_get_text_width:NV \l_@@_tmpa_dim \l_@@_tmpa_tl - \dim_gset:Nn #1 { \dim_max:nn {#1} { \l_@@_tmpa_dim } } - } - \group_end: - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_blank_underline:n} -% \changes{v0.4}{2017/08/14}{改用 \tn{rule} 绘制下划线,不再依赖 -% \pkg{ulem} 宏包。} -% 下划线占位符。|#1|: 长度。 -% \begin{macrocode} -\cs_new:Npn \@@_blank_underline:n #1 - { \rule [ -0.5 ex ] {#1} { 0.4 pt } } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_line_spread:N,\@@_line_spread:n} -% 设置行距。|#1|: 行距倍数 |fp| 变量。 -% \begin{macrocode} -\cs_new:Npn \@@_line_spread:N #1 - { \linespread { \fp_use:N #1 } \selectfont } -\cs_new:Npn \@@_line_spread:n #1 - { \linespread {#1} \selectfont } -% \end{macrocode} -% \end{macro} -% -% \subsubsection{封面各部件} -% -% \changes{v0.5}{2017/09/19}{使用 \pkg{expl3} 以及内部函数改写 -% 封面,减少对 \LaTeXe{} 的依赖。} -% -% \begin{macro}{\@@_cover_id:,\@@_cover_id_aux:n} -% 右上角的学校代码和学号。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_cover_id: - { - \@@_fixed_width_box:nn { 120 pt } - { - \bool_if:NT \l_@@_secret_bool - { - \group_begin: - \sffamily - \@@_cover_id_aux:n { secret_level } - \c_@@_name_secret_star_tl - \l_@@_info_secret_year_tl - \group_end: - \par - } - \@@_cover_id_aux:n { school_id } \par - \@@_cover_id_aux:n { student_id } - } -% \end{macrocode} -% 插入一个宽度为负的水平盒子以减少右侧边距。 -% \begin{macrocode} - \hbox_to_wd:nn { -24 pt } { } - } -\cs_new:Npn \@@_cover_id_aux:n #1 - { - \tl_use:c { c_@@_name_ #1 _tl } - \c_@@_fwid_colon_tl - \tl_use:c { l_@@_info_ #1 _tl } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_cover_logo:} -% 插入校名图片。根据参数 \opt{width} 和 \opt{height} 是否为空依次 -% 判断。\cs{l_@@_cover_logo_size_clist} 中超过两个的参数将被忽略。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_cover_logo: - { - \clist_pop:NN \l_@@_cover_logo_size_clist \l_@@_tmpa_tl - \clist_pop:NNTF \l_@@_cover_logo_size_clist \l_@@_tmpb_tl - { - \tl_if_empty:NTF \l_@@_tmpa_tl - { \includegraphics [ height = \l_@@_tmpb_tl ] } - { - \includegraphics - [ width = \l_@@_tmpa_tl, height = \l_@@_tmpb_tl ] - } - } - { \includegraphics [ width = \l_@@_tmpa_tl ] } - { \l_@@_cover_logo_tl } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_cover_type:} -% 论文类型。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_cover_type: - { - \tl_set:Nx \l_@@_tmpa_tl - { - \clist_item:Nn \c_@@_thesis_type_clist - { \g_@@_thesis_type_int } - } - \@@_spread_box:nn { 0.45 \textwidth } { \l_@@_tmpa_tl } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_cover_degree:} -% \changes{v0.7c}{2019/03/12}{允许博士学位论文使用学位类型。} -% 学位类型。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_cover_degree: - { - \int_compare:nT { \g_@@_thesis_type_int != 3 } - { - \c_@@_fwid_left_paren_tl - \clist_item:Nn \c_@@_degree_type_clist - { \l_@@_info_degree_type_int } - \c_@@_fwid_right_paren_tl - } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_cover_info:} -% 信息栏。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_cover_info: - { - \begin{minipage} [ c ] { \textwidth } - \centering \zihao { 4 } -% \end{macrocode} -% 读取左侧名称字段。 -% \begin{macrocode} - \clist_set:Nx \l_@@_tmpa_clist - { - \c_@@_name_department_tl, - \c_@@_name_major_tl, - \c_@@_name_author_tl, - \c_@@_name_supervisor_tl, - \c_@@_name_date_tl, - } -% \end{macrocode} -% 设置信息栏右侧宽度。读取各字段,并将最宽者的宽度赋给 -% \cs{l_@@_tmpb_dim}。 -% \begin{macrocode} - \clist_set:Nx \l_@@_tmpb_clist - { - { \l_@@_info_department_tl }, - { \l_@@_info_major_tl }, - { \l_@@_info_author_tl }, - { \l_@@_info_supervisor_tl }, - { \l_@@_info_date_tl } - } - \@@_get_max_text_width:NN \l_@@_tmpb_dim \l_@@_tmpb_clist -% \end{macrocode} -% 用循环输出各字段。 -% \begin{macrocode} - \bool_until_do:nn - { \clist_if_empty_p:N \l_@@_tmpa_clist } - { - \clist_pop:NN \l_@@_tmpa_clist \l_@@_tmpa_tl - \clist_pop:NN \l_@@_tmpb_clist \l_@@_tmpb_tl - \@@_spread_box:nn { 6 em } { \l_@@_tmpa_tl } - \c_@@_fwid_colon_tl - \@@_center_box:Vn \l_@@_tmpb_dim { \l_@@_tmpb_tl } - \skip_vertical:n { 1 ex } - } - \end{minipage} - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_cover_signature:N} -% 签名行。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_cover_signature:N #1 - { - \clist_map_inline:Nn #1 - { - ##1 \c_@@_fwid_colon_tl - \@@_blank_underline:n { 6 em } - \@@_quad: - } - } -% \end{macrocode} -% \end{macro} -% -% \subsubsection{封面模板} -% -% \changes{v0.7}{2018/02/27}{使用 \pkg{xtemplate} 重构封面布局。} -% -% 声明封面对象。不需要带参数。 -% \begin{macrocode} -%<@@=fdu_cover> -\DeclareObjectType { fdu / cover } { \c_zero_int } -% \end{macrocode} -% -% \begin{macro}{\DeclareCoverTemplate,\fdu_cover_declare_template:nn} -% 声明封面模板。 -% \begin{arguments} -% \item 模板名称 -% \item 封面部件列表,以逗号分隔 -% \end{arguments} -% \begin{macrocode} -\NewDocumentCommand \DeclareCoverTemplate { m m } - { \fdu_cover_declare_template:nn {#1} {#2} } -\cs_new_protected:Npn \fdu_cover_declare_template:nn #1#2 - { - \tl_set:Nn \l_@@_template_tl {#1} -% \end{macrocode} -% 构建模板接口。 -% \begin{macrocode} - \@@_declare_template_interface:nx {#1} - { - format : tokenlist, - top-skip : skip, - bottom-skip : skip, - \clist_map_function:nN {#2} \@@_key_type:n - } -% \end{macrocode} -% 声明所用变量。 -% \begin{macrocode} - \tl_new:c { l_@@ / #1 / format_tl } - \skip_new:c { l_@@ / #1 / top_skip } - \skip_new:c { l_@@ / #1 / bottom_skip } - \clist_map_inline:nn {#2} - { - \tl_new:c { l_@@ / #1 / ##1 / content_tl } - \tl_new:c { l_@@ / #1 / ##1 / format_tl } - \skip_new:c { l_@@ / #1 / ##1 / bottom_skip } - } -% \end{macrocode} -% 声明模板代码。^^A 以下名字空间为 `fdu_cover' 而非 `fdu' -% \begin{macrocode} - \@@_declare_template_code:nxn {#1} - { - format = \exp_not:c { l_@@ / #1 / format_tl }, - top-skip = \use:c { l_@@ / #1 / top_skip }, - bottom-skip = \use:c { l_@@ / #1 / bottom_skip }, - \clist_map_function:nN {#2} \@@_key_binding:n - } - { - \AssignTemplateKeys - \tl_use:c { l_@@ / #1 / format_tl } - \__fdu_vspace:c { l_@@ / #1 / top_skip } - \clist_map_inline:nn {#2} - { - \use:c { @@ / #1 / ####1 / align:n } - { - \tl_use:c { l_@@ / #1 / ####1 / format_tl } - \tl_use:c { l_@@ / #1 / ####1 / content_tl } - \par - } - \__fdu_vspace:c { l_@@ / #1 / ####1 / bottom_skip } - } - \__fdu_vspace:c { l_@@ / #1 / bottom_skip } - } - } -% \end{macrocode} -% \end{macro} -% -% \begin{variable}{\l_@@_template_tl} -% 保存模板名称。 -% \begin{macrocode} -\tl_new:N \l_@@_template_tl -% \end{macrocode} -% \end{variable} -% -% \begin{macro}{\@@_declare_template_interface:nn, -% \@@_declare_template_code:nnn, -% \@@_declare_template_interface:nx, -% \@@_declare_template_code:nxn} -% 为了展开的方便,这里需要封装 \pkg{xtemplate} 的一些函数。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_declare_template_interface:nn #1#2 - { \DeclareTemplateInterface { fdu / cover } {#1} { \c_zero_int } {#2} } -\cs_new_protected:Npn \@@_declare_template_code:nnn #1#2#3 - { \DeclareTemplateCode { fdu / cover } {#1} { \c_zero_int } {#2} {#3} } -\cs_generate_variant:Nn \@@_declare_template_interface:nn { nx } -\cs_generate_variant:Nn \@@_declare_template_code:nnn { nxn } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_key_type:n} -% \begin{macrocode} -\cs_new:Npn \@@_key_type:n #1 - { - #1 / content : tokenlist, - #1 / format : tokenlist, - #1 / bottom-skip : skip, - #1 / align : choice { left, right, center, normal } = normal, - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_key_binding:n} -% \begin{macrocode} -\cs_new:Npn \@@_key_binding:n #1 - { - #1 / content = - \exp_not:c - { l_@@ / \l_@@_template_tl / #1 / content_tl }, - #1 / format = - \exp_not:c - { l_@@ / \l_@@_template_tl / #1 / format_tl }, - #1 / bottom-skip = - \exp_not:c - { l_@@ / \l_@@_template_tl / #1 / bottom_skip }, - #1 / align = - { - left = - \exp_not:N \cs_set_protected:cpn - { @@ / \l_@@_template_tl / #1 / align:n } - \exp_not:n {##1} - { - \exp_not:n - { - \group_begin: - \flushleft ##1 \endflushleft - \group_end: - } - }, - right = - \exp_not:N \cs_set_protected:cpn - { @@ / \l_@@_template_tl / #1 / align:n } - \exp_not:n {##1} - { - \exp_not:n - { - \group_begin: - \flushright ##1 \endflushright - \group_end: - } - }, - center = - \exp_not:N \cs_set_protected:cpn - { @@ / \l_@@_template_tl / #1 / align:n } - \exp_not:n {##1} - { - \exp_not:n - { - \group_begin: - \center ##1 \endcenter - \group_end: - } - }, - normal = - \exp_not:N \cs_set_protected:cpn - { @@ / \l_@@_template_tl / #1 / align:n } - \exp_not:n {##1} - { \exp_not:n { \group_begin: ##1 \group_end: } } - }, - } -%<@@=fdu> -% \end{macrocode} -% \end{macro} -% -% \subsubsection{绘制封面} -% -% \begin{macro}{\makecoveri,\makecoverii,\makecoveriii} -% 使用实例(instance)构建封一、封二、封三。 -% \begin{macrocode} -\NewDocumentCommand \makecoveri { } - { - \thispagestyle { empty } - \UseInstance { fdu / cover } { cover-i-default } - } -\NewDocumentCommand \makecoverii { } - { - \thispagestyle { empty } - \UseInstance { fdu / cover } { cover-ii-default } - } -\NewDocumentCommand \makecoveriii { } - { - \cleardoublepage - \thispagestyle { empty } - \UseInstance { fdu / cover } { cover-iii-default } - } -% \end{macrocode} -% \end{macro} -% -% 声明各封面模板组成部分。 -% \begin{macrocode} -\DeclareCoverTemplate { cover-i } - { id, logo, type, degree, title, title-en, info } -\DeclareCoverTemplate { cover-ii } { title, name-list } -\DeclareCoverTemplate { cover-iii } - { - originality-decl-name, - originality-decl-text, - originality-decl-sig, - authorization-decl-name, - authorization-decl-text, - authorization-decl-sig - } -% \end{macrocode} -% -% \changes{v0.7d}{2019/03/29}{封面中文标题改为加粗宋体(可能使用伪粗)。} -% -% 定义封面的具体配置参数。 -% \begin{macrocode} -\DeclareInstance { fdu / cover } { cover-i-default } { cover-i } - { -% format = \@@_line_spread:N \c_@@_line_spread_fp, - bottom-skip = 0 pt plus 1.5 fill, - id / content = \@@_cover_id:, - logo / content = \@@_cover_logo:, - type / content = \@@_cover_type:, - degree / content = \@@_cover_degree:, - title / content = - \@@_fixed_width_center_box:nn - { 0.9 \textwidth } { \l_@@_info_title_tl }, - title-en / content = - \@@_fixed_width_center_box:nn - { 0.9 \textwidth } { \l_@@_info_title_en_tl }, - info / content = \@@_cover_info:, - id / format = \zihao { -5 }, - type / format = \zihao { 2 }, - degree / format = \zihao { 4 }, - title / format = \zihao { -2 } \bfseries, - title-en / format = \@@_line_spread:n { 1.2 } \zihao { 4 } \bfseries, - id / bottom-skip = 0 pt plus 1.6 fill, - logo / bottom-skip = 0 pt plus 0.3 fill, - type / bottom-skip = -18 pt, - degree / bottom-skip = 0 pt plus 0.8 fill, - title-en / bottom-skip = 0 pt plus 2.5 fill, - id / align = right, - logo / align = center, - type / align = center, - degree / align = center, - title / align = center, - title-en / align = center, - info / align = center, - } -\DeclareInstance { fdu / cover } { cover-ii-default } { cover-ii } - { -% format = \@@_line_spread:N \c_@@_line_spread_fp, - title / content = - \@@_spread_box:nn { 7 em } { \c_@@_name_instructors_tl }, - name-list / content = - \clist_use:Nn \l_@@_info_instructors_clist { \par }, - title / format = \zihao { 2 } \sffamily, - name-list / format = \large, - title / align = center, - name-list / align = center, - } -\DeclareInstance { fdu / cover } { cover-iii-default } { cover-iii } - { - format = -% \@@_line_spread:n { 1.8 }, -% \@@_line_spread:n { 1.8 } \dim_set:Nn \parindent { 2 \ccwd }, - top-skip = 0 pt plus 0.2 fill, - bottom-skip = 0 pt plus 2.5 fill, - originality-decl-name / content = \c_@@_name_orig_decl_tl, - originality-decl-text / content = \c_@@_orig_decl_text_tl, - originality-decl-sig / content = - \@@_cover_signature:N \c_@@_orig_decl_sign_clist, - authorization-decl-name / content = \c_@@_name_auth_decl_tl, - authorization-decl-text / content = \c_@@_auth_decl_text_tl, - authorization-decl-sig / content = - \@@_cover_signature:N \c_@@_auth_decl_sign_clist, - originality-decl-name / format = - \@@_line_spread:n { 1.2 } \zihao { -2 } \bfseries, - authorization-decl-name / format = - \@@_line_spread:n { 1.2 } \zihao { -2 } \bfseries, - originality-decl-name / bottom-skip = 0.4 cm, - originality-decl-text / bottom-skip = 0.4 cm, - originality-decl-sig / bottom-skip = 0 pt plus 2.5 fill, - authorization-decl-name / bottom-skip = 0.4 cm, - authorization-decl-text / bottom-skip = 0.4 cm, - originality-decl-name / align = center, - originality-decl-sig / align = right, - authorization-decl-name / align = center, - authorization-decl-sig / align = right, - } -% \end{macrocode} -% -% \begin{macro}{style/auto-make-cover} -% \begin{variable}{\l_@@_auto_make_cover_bool} -% 是否自动生成封面。 -% \begin{macrocode} -\bool_new:N \l_@@_auto_make_cover_bool -\keys_define:nn { fdu / style } - { - auto-make-cover .bool_set:N = \l_@@_auto_make_cover_bool, - auto-make-cover .default:n = true - } -% \end{macrocode} -% \end{variable} -% \end{macro} -% -% 在 \env{document} 开始位置添加封面以及指导小组成员名单。 -% \begin{macrocode} -\AtBeginDocument - { - \bool_if:NT \l_@@_auto_make_cover_bool - { - \begin{titlepage} - \makecoveri \newpage \makecoverii - \end{titlepage} - } - } -% \end{macrocode} -% -% 在 \env{document} 结束位置添加声明页。 -% \begin{macrocode} -\AtEndDocument - { \bool_if:NT \l_@@_auto_make_cover_bool { \makecoveriii } } -% \end{macrocode} -% -% \subsection{目录} -% -% 设置目录标题。 -% \begin{macrocode} -\keys_set:nn { ctex } - { -% contentsname = \c_@@_name_toc_tl, -% listfigurename = \c_@@_name_lof_tl, -% listtablename = \c_@@_name_lot_tl, -% \end{macrocode} -% -% 设置目录中章节标题的样式。 -% \begin{macrocode} - chapter / tocline = - { -% \normalfont \sffamily -% \bfseries - \CTEXnumberline {#1} #2 - }, - section / tocline = - { -% \bfseries - \CTEXnumberline {#1} #2 - }, - subsection / tocline = - { -% \fdu@kai - \CTEXnumberline {#1} #2 - } - } -% \end{macrocode} -% -% \changes{v0.7e}{2019/05/12}{增加对插图、表格目录的处理。} -% -% \begin{macro}{\tableofcontents,\listoffigures,\listoftables} -% 修改 \cs{tableofcontents}、\cs{listoffigures} 和 \cs{listoftables} 的定义, -% 使得页眉正确显示,并出现在目录及 PDF 书签中。来自于 \LaTeXe{} 标准文档类 -% \file{book.cls} -% \footnote{原代码中只有 \cs{tableofcontents} 的 \cs{@mkboth} 出现在 -% \cs{chapter*} 内部,这是出于兼容性的考虑而非 typo。}。 -% \begin{macrocode} -\@@_patch_cmd:Nnn \tableofcontents - { - \chapter*{\contentsname - \@mkboth{\MakeUppercase\contentsname} - {\MakeUppercase\contentsname}} - } - { \@@_chapter_no_toc:V \contentsname } -\@@_patch_cmd:Nnn \listoffigures - { - \chapter*{\listfigurename} - \@mkboth{\MakeUppercase\listfigurename} - {\MakeUppercase\listfigurename} - } - { \@@_chapter:V \listfigurename } -\@@_patch_cmd:Nnn \listoftables - { - \chapter*{\listtablename} - \@mkboth{\MakeUppercase\listtablename} - {\MakeUppercase\listtablename} - } - { \@@_chapter:V \listtablename } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}[int]{\@starttoc} -% 修改 \tn{@starttoc} 的定义以调整英文模板中的目录行距。 -% \begin{macrocode} -%<*class-en> -\@@_patch_cmd:Nnn \@starttoc - { \begingroup } - { - \begingroup - \@@_line_spread:N \c_@@_line_spread_fp - } -% -% \end{macrocode} -% \end{macro} -% -% \subsection{摘要} -% -% \begin{environment}{abstract} -% \begin{environment}{abstract*} -% \changes{v0.7}{2018/03/05}{整理代码。} -% 摘要环境。在中文模板定义了中英文双语摘要,但在英文模板中则没有 -% 定义中文摘要。 -% \begin{macrocode} -\NewDocumentEnvironment { abstract } { } -% { \@@_abstract_begin: } { \@@_abstract_end: } -% { \@@_abstract_en_begin: } { \@@_abstract_en_end: } -%<*class> -\NewDocumentEnvironment { abstract* } { } - { \@@_abstract_en_begin: } { \@@_abstract_en_end: } -% -% \end{macrocode} -% \end{environment} -% \end{environment} -% -% \begin{macro}{\@@_abstract_begin:,\@@_abstract_en_begin:} -% 摘要页标题。 -% \begin{macrocode} -%<*class> -\cs_new_protected:Npn \@@_abstract_begin: - { \@@_chapter:V \c_@@_name_abstract_tl } -% -\cs_new_protected:Npn \@@_abstract_en_begin: - { \@@_chapter:V \c_@@_name_abstract_en_tl } -% \end{macrocode} -% \end{macro} -% -% \changes{v0.7d}{2019/03/28}{优化关键字列表的显示。} -% -% \begin{macro}{\@@_abstract_end:,\@@_abstract_en_end:} -% 摘要正文完成后,输出关键字列表和中图分类号(CLC)。 -% \begin{macrocode} -%<*class> -\cs_new_protected:Npn \@@_abstract_end: - { - \@@_keywords:nNn - { \sffamily \c_@@_name_keywords_tl \c_@@_fwid_colon_tl } - \l_@@_info_keywords_clist { \c_@@_fwid_semicolon_tl } - \@@_clc:nn - { \sffamily \c_@@_name_clc_tl \c_@@_fwid_colon_tl } - { \l_@@_info_clc_tl } - } -% -\cs_new_protected:Npn \@@_abstract_en_end: - { - \@@_keywords:nNn - { \bfseries \c_@@_name_keywords_en_tl \@@_quad: } - \l_@@_info_keywords_en_clist { ; ~ } - \@@_clc:nn - { \bfseries \c_@@_name_clc_en_tl \@@_quad: } - { \l_@@_info_clc_tl } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_keywords:nNn,\@@_keywords_prevdepth:,\@@_clc:nn} -% 关键字列表前要空一行,使用悬挂缩进;中图分类号不缩进。|\parbox| 之后的间距 -% 需要调整,见 \url{https://tex.stackexchange.com/a/34982}。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_keywords:nNn #1#2#3 - { - \par \mode_leave_vertical: \par \noindent - \@@_get_text_width:Nn \l_@@_tmpa_dim {#1} - \group_begin: #1 \group_end: - \parbox [t] { \dim_eval:n { \textwidth - \l_@@_tmpa_dim } } - { - \clist_use:Nn #2 {#3} \par - \cs_gset:Npx \@@_keywords_prevdepth: { \dim_use:N \tex_prevdepth:D } - } - } -\cs_new_protected:Npn \@@_clc:nn #1#2 - { - \par \tex_prevdepth:D \@@_keywords_prevdepth: \noindent - \group_begin: #1 \group_end: - #2 - } -% \end{macrocode} -% \end{macro} -% -% \subsection{符号表} -% -% \begin{environment}{notation} -% \changes{v0.7}{2018/03/05}{整理代码。} -% 符号表环境,利用 \env{longtable} 封装。可选参数为表格列格式说明符。 -% \begin{macrocode} -\NewDocumentEnvironment { notation } { O { l p { 7.5 cm } } } - { - \@@_notation_begin: - \group_begin: - \@@_notation_long_table_setup: - \longtable {#1} - } - { - \endlongtable - \group_end: - } -% \end{macrocode} -% \end{environment} -% -% \begin{macro}{\@@_notation_begin:} -% 符号表页标题。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_notation_begin: - { -% \@@_chapter:V \c_@@_name_notation_tl -% \@@_chapter:V \c_@@_name_notation_en_tl - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_notation_long_table_setup:} -% 调整 \cs{LTpre} 和 \cs{LTpost},以删去 \env{longtable} 前后的空白。 -% 英文模板中还需要调整表格的行距。注意 \tn{arraystretch} 只是一个简单 -% 宏,不能使用 \cs{fp_set:Nn}。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_notation_long_table_setup: - { -% \tl_set:Nn \arraystretch { 1.3 } - \dim_set_eq:NN \LTpre \c_zero_dim - \dim_set_eq:NN \LTpost \c_zero_dim - } -% \end{macrocode} -% \end{macro} -% -% \subsection{参考文献著录与引用} -% -% \changes{v0.6}{2017/10/27}{支持 \BibTeX{},以实现参考文献的著录 -% 与引用。} -% \changes{v0.7}{2018/01/25}{支持 \biber{} 与 \pkg{biblatex}。} -% -% \begin{variable}{\l_@@_bibtex_bool} -% 是否使用 \BibTeX{} 作为参考文献处理程序。若为否,则使用 -% \pkg{biblatex}/\biber{}。 -% \begin{macrocode} -\bool_new:N \l_@@_bibtex_bool -% \end{macrocode} -% \end{variable} -% -% \begin{variable}{\l_@@_bib_style_tl,\l_@@_bib_gb_style_tl, -% \l_@@_cite_style_tl} -% 保存参考文献及引用样式。 -% \begin{macrocode} -\tl_new:N \l_@@_bib_style_tl -\tl_new:N \l_@@_bib_gb_style_tl -\tl_new:N \l_@@_cite_style_tl -% \end{macrocode} -% \end{variable} -% -% \begin{variable}{\l_@@_bib_resource_tl} -% 保存参考文献数据库列表。 -% \begin{macrocode} -\tl_new:N \l_@@_bib_resource_tl -% \end{macrocode} -% \end{variable} -% -% \changes{v0.6}{2017/10/28}{新增 \opt{style/bib-style} 选项。} -% \changes{v0.7}{2018/01/25}{新增 \opt{style/bib-backend}、\opt{style/cite-style} -% 和 \opt{style/bib-resource} 选项。} -% -% \begin{macrocode} -\keys_define:nn { fdu / style } - { -% \end{macrocode} -% \begin{macro}{style/bib-backend} -% 参考文献后端。 -% \begin{macrocode} - bib-backend .choice:, - bib-backend .value_required:n = true, - bib-backend / bibtex .code:n = - { \bool_set_true:N \l_@@_bibtex_bool }, - bib-backend / biblatex .code:n = - { \bool_set_false:N \l_@@_bibtex_bool }, -% \end{macrocode} -% \end{macro} -% \begin{macro}{style/bib-style} -% 参考文献样式。 -% \begin{macrocode} - bib-style .choice:, - bib-style .value_required:n = true, - bib-style / numerical .code:n = - { - \tl_set:Nn \l_@@_bib_gb_style_tl { numerical } - \tl_clear:N \l_@@_bib_style_tl - }, - bib-style / author-year .code:n = - { - \tl_set:Nn \l_@@_bib_gb_style_tl { author-year } - \tl_clear:N \l_@@_bib_style_tl - }, - bib-style / unknown .code:n = - { \tl_set_eq:NN \l_@@_bib_style_tl \l_keys_value_tl }, -% \end{macrocode} -% \end{macro} -% \begin{macro}{style/cite-style} -% 引用样式。 -% \begin{macrocode} - cite-style .code:n = - { - \bool_if:NTF \l_@@_bibtex_bool - { \@@_warning:n { cite-style-not-available } } - { \tl_set:Nn \l_@@_cite_style_tl {#1} } - }, -% \end{macrocode} -% \end{macro} -% \begin{macro}{style/bib-resource} -% 参考文献数据源。 -% \begin{macrocode} - bib-resource .tl_set:N = \l_@@_bib_resource_tl - } -\@@_msg_new:nn { cite-style-not-available } - { Option~ "cite-style"~ is~ not~ available~ in~ BibTeX. } -% \end{macrocode} -% \end{macro} -% -% 为了保证导言区中的设置能起作用,\pkg{natbib} 或 \pkg{biblatex} 宏包均需要在 -% 导言区末尾载入(仍在 \pkg{hyperref} 之前),并做相关设置。 -% \begin{macrocode} -\ctex_at_end_preamble:n - { - \bool_if:NTF \l_@@_bibtex_bool - { - \RequirePackage [ sort & compress ] { natbib } - \@@_bibtex_setup: - } - { - \@@_biblatex_pre_setup: - \RequirePackage { biblatex } - \@@_biblatex_post_setup: - } - } -% \end{macrocode} -% -% \changes{v0.7}{2018/01/25}{统一使用 \cs{printbibliography} 命令 -% 生成参考文献列表。} -% \changes{v0.7d}{2019/03/23}{使参考文献在目录中正常显示。} -% -% \begin{macro}{\@@_bibtex_setup:,\bibsection,\printbibliography} -% \BibTeX{} 相关设置。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_bibtex_setup: - { - \tl_if_empty:NTF \l_@@_bib_style_tl - { - \tl_if_eq:VnTF \l_@@_bib_gb_style_tl { numerical } - { - \bibliographystyle { gbt7714-unsrt } - \@@_set_cite_style_numerical: - } - { - \tl_if_eq:VnT \l_@@_bib_gb_style_tl { author-year } - { - \bibliographystyle { gbt7714-plain } - \@@_set_cite_style_author_year: - \cs_set_eq:NN \cite \citep - } - } - } - { \exp_args:NV \bibliographystyle \l_@@_bib_style_tl } -% \end{macrocode} -% 修改参考文献标题。 -% \begin{macrocode} - \cs_set:Npn \bibsection { \@@_chapter:V \bibname } -% \end{macrocode} -% \BibTeX{} 下接口与 \pkg{biblatex} 保持统一。 -% \begin{macrocode} - \NewDocumentCommand \printbibliography { o } - { - \exp_args:NV \bibliography \l_@@_bib_resource_tl - \IfValueT {##1} - { \@@_warning:nn { invalid-option-in-bibtex } {##1} } - } - } -\@@_msg_new:nn { invalid-option-in-bibtex } - { Option(s)~ "#1"~ are~ invalid~ in~ BibTeX. } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{ -% \@@_biblatex_pre_setup:, -% \@@_biblatex_post_setup:, -% \@@_pass_options_to_biblatex:n} -% \pkg{biblatex} 相关设置。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_biblatex_pre_setup: - { -% \end{macrocode} -% 参考文献样式。 -% \begin{macrocode} - \tl_if_empty:NTF \l_@@_bib_style_tl - { - \tl_if_eq:VnTF \l_@@_bib_gb_style_tl { numerical } - { \@@_pass_options_to_biblatex:n { style = gb7714-2015 } } - { - \tl_if_eq:VnT \l_@@_bib_gb_style_tl { author-year } - { \@@_pass_options_to_biblatex:n { style = gb7714-2015ay } } - } - } - { \@@_pass_options_to_biblatex:n { style = \l_@@_bib_style_tl } } -% \end{macrocode} -% 引用样式。 -% \begin{macrocode} - \tl_if_empty:NF \l_@@_cite_style_tl - { \@@_pass_options_to_biblatex:n { citestyle = \l_@@_bib_style_tl } } - \@@_pass_options_to_biblatex:n { backend = biber, hyperref = manual, natbib } - } -\cs_new_protected:Npn \@@_biblatex_post_setup: - { - \exp_args:NV \addbibresource \l_@@_bib_resource_tl - \@@_biblatex_allow_url_break: -% \end{macrocode} -% 修改参考文献标题。 -% \begin{macrocode} - \defbibheading { bibliography } [ \bibname ] { \@@_chapter:n {##1} } -%<*class-en> - \exp_args:Nnx \DefineBibliographyStrings { english } - { bibliography = { \c_@@_name_bib_en_tl } } -% - } -\cs_new_protected:Npn \@@_pass_options_to_biblatex:n #1 - { \PassOptionsToPackage {#1} { biblatex } } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_biblatex_allow_url_break:} -% \pkg{biblatex} 下允许 URL 在字母、数字和一些特殊符号处断行。 -% \begin{macrocode} -\cs_new:Npn \@@_biblatex_allow_url_break: - { - \int_set_eq:NN \c@biburlucpenalty \c_one_int - \int_set_eq:NN \c@biburlnumpenalty \c_one_int - \int_set_eq:NN \c@biburllcpenalty \c_one_int - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_set_cite_style_numerical:} -% 顺序编码制下的引用样式。 -% \begin{macrocode} -\cs_new:Npn \@@_set_cite_style_numerical: - { - \NAT@numberstrue \NAT@supertrue - \cs_set:Npn \NAT@open { [ } - \cs_set:Npn \NAT@close { ] } - \cs_set:Npn \NAT@sep { ,~ } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_set_cite_style_author_year:} -% 著者—出版年制下的引用样式。 -% \begin{macrocode} -\cs_new:Npn \@@_set_cite_style_author_year: - { - \NAT@numbersfalse -%<*class> - \cs_set_eq:NN \NAT@open \c_@@_fwid_left_paren_tl - \cs_set_eq:NN \NAT@close \c_@@_fwid_right_paren_tl - \cs_set_eq:NN \NAT@sep \c_@@_fwid_semicolon_tl - \cs_set_eq:NN \NAT@aysep \c_@@_fwid_comma_tl - \cs_set_eq:NN \NAT@yrsep \c_@@_ideo_comma_tl -% - } -% \end{macrocode} -% \end{macro} -% -% \changes{v0.7}{2018/01/25}{同步 \pkg{gbt7714} v1.0,移除有关超链接 -% 的额外设置。} -% -% \subsection{\pkg{hyperref} 相关配置} -% -% \changes{v0.4}{2017/08/13}{新增 \pkg{hyperref} 相关配置,包括超链接 -% 样式(\opt{style/hyperlink} 与 \opt{style/hyperlink-color} 选项) -% 及 PDF 元信息等。} -% \changes{v0.7}{2018/01/23}{将 \pkg{hyperref} 相关配置移至模板末尾, -% 以减少冲突。} -% -% \begin{macro}{\hypersetup,\fdu_hyperref_setup:n} -% \pkg{hyperref} 宏包是在导言区之后才引入的。若要在导言区中使用 -% \tn{hypersetup} 命令,必须另行定义。 -% \begin{macrocode} -\NewDocumentCommand \hypersetup { m } - { \fdu_hyperref_setup:n {#1} } -\cs_new_protected:Npn \fdu_hyperref_setup:n #1 - { \clist_gput_right:Nn \g_@@_to_hyperref_clist {#1} } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_set_hyperlink_color_key:n} -% 设置超链接颜色选项。最后的逗号用于确保 \pkg{l3keys} 可以正确解析,不能省去。 -% \begin{macrocode} -\cs_new:Npn \@@_set_hyperlink_color_key:n #1 - { - hyperlink-color / \clist_item:nn {#1} {1} .code:n = - { - \@@_define_hyperlink_color:nnn - { \clist_item:nn {#1} {2} } - { \clist_item:nn {#1} {3} } - { \clist_item:nn {#1} {4} } - \fdu_hyperref_setup:n - { - linkcolor = fdu@link, linkbordercolor = fdu@link, - urlcolor = fdu@url, urlbordercolor = fdu@url, - citecolor = fdu@cite, citebordercolor = fdu@cite - } - }, - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_define_hyperlink_color:nnn} -% 定义超链接颜色。 -% \begin{macrocode} -\cs_new_protected:Npn \@@_define_hyperlink_color:nnn #1#2#3 - { - \definecolorset { HTML } { fdu@ } { } - { link, #1; url, #2; cite, #3 } - } -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\keys_define:nx { fdu / style } - { -% \end{macrocode} -% -% \begin{macro}{style/hyperlink} -% 超链接样式。 -% \begin{macrocode} - hyperlink .choice:, - hyperlink .value_required:n = true, - hyperlink / border .code:n = { }, - hyperlink / color .code:n = - { \fdu_hyperref_setup:n { colorlinks = true } }, - hyperlink / none .code:n = - { \fdu_hyperref_setup:n { hidelinks = true } }, -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{style/hyperlink-color} -% 超链接颜色。 -% \begin{macrocode} - hyperlink-color .choice:, - hyperlink-color .value_required:n = true, - \clist_map_function:nN - { - { autumn, D70000, D75F00, AF8700 }, - { business, D14542, 295497, 1F6E43 }, - { classic, FF0000, 0000FF, 00FF00 }, - { default, 990000, 0000B2, 007F00 }, - { elegant, 961212, C31818, 9B764F }, - { fantasy, FF4A19, FF3F94, 934BA1 }, - { material, E91E63, 009688, 4CAF50 }, - { science, CA0619, 389F9D, FF8920 }, - { summer, 00AFAF, 5F5FAF, 5F8700 }, - { graylevel, 616161, 616161, 616161 }, - { prl, 2D3092, 2D3092, 2D3092 } - } - \@@_set_hyperlink_color_key:n - } -% \end{macrocode} -% \end{macro} -% -% \changes{v0.6}{2017/10/29}{优化 URL 断行设置。} -% -% \begin{macro}{\fdu_allow_url_break:,\@@_add_url_break_points:} -% 允许 URL 在字母、数字和一些特殊符号处断行。见 -% \url{https://bit.ly/2hhIjLW}。 -% \begin{macrocode} -\cs_new:Npn \fdu_allow_url_break: - { - \cs_new:Npn \@@_add_url_break_points: - { \tl_map_function:NN \c_@@_url_break_points_tl \do } - \@@_appto_cmd:Nn \UrlBreaks - { \UrlOrds \@@_add_url_break_points: } - } -% \end{macrocode} -% \end{macro} -% -% \begin{variable}{\c_@@_url_break_points_tl} -% 额外的断行位置是 26 个英文字母(大小写)以及 10 个阿拉伯数字。 -% \pkg{url} 提供的宏 \tn{UrlBreaks} 还包含了特殊符号 |*|、|-|、 -% |~|、|'|、|"|、|-|,也被设置为允许断行。 -% \begin{macrocode} -\tl_const:Nn \c_@@_url_break_points_tl - { - abcdefghijklmnopqrstuvwxyz - ABCDEFGHIJKLMNOPQRSTUVWXYZ - 0123456789 - } -% \end{macrocode} -% \end{variable} -% -% \changes{v0.7e}{2019/04/23}{处理 \pkg{hyperref} 与 \pkg{unicode-math} 的兼容性问题。} -% -% 在导言区末尾引入 \pkg{hyperref} 宏包。 -% \begin{macrocode} -\ctex_at_end_preamble:n - { - \RequirePackage { hyperref } -% \end{macrocode} -% 此后 \tn{hypersetup} 命令由 \pkg{hyperref} 宏包接管。 -% \begin{macrocode} - \hypersetup - { - bookmarksnumbered = true, - psdextra = true, - unicode = true, -% \end{macrocode} -% 填写 PDF 元信息。 -% \begin{macrocode} -%<*class> - pdftitle = \l_@@_info_title_tl, - pdfauthor = \l_@@_info_author_tl, - pdfkeywords = \l_@@_info_keywords_clist, -% -%<*class-en> - pdftitle = \l_@@_info_title_en_tl, - pdfauthor = \l_@@_info_author_en_tl, - pdfkeywords = \l_@@_info_keywords_en_clist, -% -% pdfsubject = , - pdfcreator = \c_@@_name_pdf_creator_tl - } -% \end{macrocode} -% 将导言区中通过 \cs{fdu_hyperref_setup:n} 进行的设置传入 -% \tn{hypersetup}。 -% \begin{macrocode} - \exp_args:NV \hypersetup \g_@@_to_hyperref_clist -% \end{macrocode} -% URL 断行处理。 -% \begin{macrocode} - \fdu_allow_url_break: -% \end{macrocode} -% 手动开启 \pkg{biblatex} 的 \pkg{hyperref} 支持。 -% \begin{macrocode} - \bool_if:NF \l_@@_bibtex_bool { \BiblatexManualHyperrefOn } - } -% \end{macrocode} -% -% 在 PDF 字符串中设置 \tn{fdu@kai} 命令为空,以抑制 \pkg{hyperref} -% 的警告信息。 -% \begin{macrocode} -\ctex_at_end_package:nn { hyperref } - { - \pdfstringdefDisableCommands - { - \cs_set_eq:NN \fdu@kai \prg_do_nothing: - \cs_set_eq:NN \quad \c_space_tl - \cs_set_eq:NN \qquad \c_space_tl - } - } -% \end{macrocode} -% -% \subsection{用户接口} -% -% \begin{macro}{info,style} -% 定义元(meta)键值对。 -% \begin{macrocode} -\keys_define:nn { fdu } - { - info .meta:nn = { fdu / info } {#1}, - style .meta:nn = { fdu / style } {#1} - } -% \end{macrocode} -% \end{macro} -% -% 文档类初始设置。 -% \begin{macrocode} -\keys_set:nn { fdu } - { - style / font = times, -% style / cjk-font = fandol, - style / font-size = -4, -% style / fullwidth-stop = false, - style / auto-make-cover = true, - style / logo = { fudan-name.pdf }, - style / logo-size = { 0.5 \textwidth }, - style / hyperlink = color, - style / hyperlink-color = default, - style / bib-style = numerical, - info / degree = academic, - info / secret-level = none, - info / school-id = { 10246 }, - info / date = { \zhtoday }, -% theorem / header-font = { \sffamily }, -% theorem / header-font = { \bfseries \upshape }, -% theorem / body-font = { \fdu@kai }, -% theorem / body-font = { \itshape }, - theorem / counter = { chapter } - } -% \end{macrocode} -% -% \begin{macro}{\fdusetup} -% 用户设置接口。 -% \begin{macrocode} -\NewDocumentCommand \fdusetup { m } - { \keys_set:nn { fdu } {#1} } -% \end{macrocode} -% \end{macro} -% -% \begin{environment}{proof} -% \begin{environment}{axiom} -% \begin{environment}{corollary} -% \begin{environment}{definition} -% \begin{environment}{example} -% \begin{environment}{lemma} -% \begin{environment}{theorem} -% 模板预定义的常用数学环境。 -% 其中的“证明”比较特殊,它不编号,但会添加证毕符号。 -% \begin{macrocode} -%<*class> -\newtheorem* { proof } { \c_@@_name_proof_tl } -\newtheorem { axiom } { \c_@@_name_axiom_tl } -\newtheorem { corollary } { \c_@@_name_corollary_tl } -\newtheorem { definition } { \c_@@_name_definition_tl } -\newtheorem { example } { \c_@@_name_example_tl } -\newtheorem { lemma } { \c_@@_name_lemma_tl } -\newtheorem { theorem } { \c_@@_name_theorem_tl } -% -%<*class-en> -\newtheorem* { proof } { \c_@@_name_proof_en_tl } -\newtheorem { axiom } { \c_@@_name_axiom_en_tl } -\newtheorem { corollary } { \c_@@_name_corollary_en_tl } -\newtheorem { definition } { \c_@@_name_definition_en_tl } -\newtheorem { example } { \c_@@_name_example_en_tl } -\newtheorem { lemma } { \c_@@_name_lemma_en_tl } -\newtheorem { theorem } { \c_@@_name_theorem_en_tl } -% -% -% \end{macrocode} -% \end{environment} -% \end{environment} -% \end{environment} -% \end{environment} -% \end{environment} -% \end{environment} -% \end{environment} -% -% \subsection{模板参数配置文件} -% -% \changes{v0.3}{2017/06/27}{分离文档类与参数配置文件。} -% -% \begin{macrocode} -%<*definition> -% \end{macrocode} -% -% \subsubsection{通用配置} -% -% \begin{variable}{\c_@@_name_simp_tl,\c_@@_name_trad_tl, -% \c_@@_name_en_tl} -% 学校名称。 -% \begin{macrocode} -\tl_const:Nn \c_@@_name_simp_tl { 复旦大学 } -\tl_const:Nn \c_@@_name_trad_tl { 復旦大學 } -\tl_const:Nn \c_@@_name_en_tl { Fudan~ University } -% \end{macrocode} -% \end{variable} -% -% 常用标点符号,见表~\ref{tab:punctuations}。 -% \begin{macrocode} -\clist_map_inline:nn - { - { ideo_comma } { "3001 }, - { ideo_full_stop } { "3002 }, - { fwid_comma } { "FF0C }, - { fwid_full_stop } { "FF0E }, - { fwid_colon } { "FF1A }, - { fwid_semicolon } { "FF1B }, - { fwid_left_paren } { "FF08 }, - { fwid_right_paren } { "FF09 } - } - { \@@_define_punct:nn #1 } -% \end{macrocode} -% -% \begin{table}[ht] -% \caption{常用标点符号} -% \label{tab:punctuations} -% \centering -% \begin{tabular}{cccc} -% \toprule -% \textbf{中文名称} & \textbf{英文名称} & \textbf{符号} & \textbf{Unicode} \\ -% \midrule -% 中文顿号 & Ideographic comma & \symbol{"3001} & U+3001 \\ -% 中文句号 & Ideographic full stop & \symbol{"3002} & U+3002 \\ -% 中文逗号 & Fullwidth comma & \symbol{"FF0C} & U+FF0C \\ -% 全角西文句点 & Fullwidth full stop & \symbol{"FF0E} & U+FF0E \\ -% 中文冒号 & Fullwidth colon & \symbol{"FF1A} & U+FF1A \\ -% 中文分号 & Fullwidth semicolon & \symbol{"FF1B} & U+FF1B \\ -% 中文左圆括号 & Fullwidth left parenthesis & \symbol{"FF08} & U+FF08 \\ -% 中文右圆括号 & Fullwidth right parenthesis & \symbol{"FF09} & U+FF09 \\ -% \bottomrule -% \end{tabular} -% \end{table} -% -% \begin{variable}{\c_@@_line_spread_fp} -% 行距倍数。行距倍数 $k$ 由下式确定: -% \begin{equation*} -% \num{1.2} \times k \times \SI{12}{bp} = \SI{20}{pt}. -% \end{equation*} -% 式中,\num{1.2} 是基本行距与文字大小之比,\SI{12}{bp} 是小四号字 -% 的大小,\SI{20}{pt} 是行距固定值。 -% \begin{macrocode} -\fp_const:Nn \c_@@_line_spread_fp - { \dim_ratio:nn { 20 pt } { 12 bp } / 1.2 } -% \end{macrocode} -% \end{variable} -% -% \subsubsection{声明页} -% -% \begin{variable}{\c_@@_orig_decl_text_tl} -% 论文独创性声明。 -% \begin{macrocode} -\tl_const:Nn \c_@@_orig_decl_text_tl - { - 本人郑重声明:所呈交的学位论文,是本人在导师的指导下,独立进行研究 - 工作所取得的成果。论文中除特别标注的内容外,不包含任何其他个人或机 - 构已经发表或撰写过的研究成果。对本研究做出重要贡献的个人和集体,均 - 已在论文中作了明确的声明并表示了谢意。本声明的法律结果由本人承担。 - } -% \end{macrocode} -% \end{variable} -% -% \begin{variable}{\c_@@_auth_decl_text_tl} -% 论文使用授权声明。 -% \begin{macrocode} -\tl_const:Nn \c_@@_auth_decl_text_tl - { - 本人完全了解复旦大学有关收藏和利用博士、硕士学位论文的规定,即:学 - 校有权收藏、使用并向国家有关部门或机构送交论文的印刷本和电子版本; - 允许论文被查阅和借阅;学校可以公布论文的全部或部分内容,可以采用影 - 印、缩印或其它复制手段保存论文。涉密学位论文在解密后遵守此规定。 - } -% \end{macrocode} -% \end{variable} -% -% \begin{variable}{\c_@@_orig_decl_sign_clist, -% \c_@@_auth_decl_sign_clist} -% 声明页签名项目。 -% \begin{macrocode} -\clist_const:Nn \c_@@_orig_decl_sign_clist - { 作者签名, 日期 } -\clist_const:Nn \c_@@_auth_decl_sign_clist - { 作者签名, 导师签名, 日期 } -% \end{macrocode} -% \end{variable} -% -% \subsubsection{杂项} -% -% \begin{variable}{\c_@@_thesis_type_clist, -% \c_@@_degree_type_clist} -% 论文类型与学位类型。 -% \begin{macrocode} -\clist_const:Nn \c_@@_thesis_type_clist - { 博士学位论文, 硕士学位论文, 本科毕业论文 } -\clist_const:Nn \c_@@_degree_type_clist - { 学术学位, 专业学位 } -% \end{macrocode} -% \end{variable} -% -% \begin{variable}{\c_@@_secret_clist} -% 三种密级。 -% \begin{macrocode} -\clist_const:Nn \c_@@_secret_clist { 秘密, 机密, 绝密 } -% \end{macrocode} -% \end{variable} -% -% 默认名称。注意空格是忽略掉的。 -% \begin{macrocode} -\clist_map_inline:nn - { - { secret_level } { 密 \qquad 级 }, - { secret_star } { \textrm { \bigstar } }, - { school_id } { 学校代码 }, - { student_id } { 学 \qquad 号 }, - { department } { 院系 }, - { major } { 专业 }, - { author } { 姓名 }, - { supervisor } { 指导教师 }, - { date } { 完成日期 }, - { instructors } { 指导小组成员 }, - { author_sign } { 作者签名 }, - { supervisor_sign } { 导师签名 }, - { sign_date } { 日期 }, - { toc } { 目 \quad 录 }, - { lof } { 插图目录 }, - { lot } { 表格目录 }, - { bib_en } { Bibliography }, - { pdf_creator } { LaTeX~ with~ fduthesis~ class }, - { orig_decl } { \c_@@_name_simp_tl \\ 学位论文独创性声明 }, - { auth_decl } { \c_@@_name_simp_tl \\ 学位论文使用授权声明 } - } - { \@@_define_name:nn #1 } -\clist_map_inline:nn - { - { abstract } { 摘 \quad 要 } { Abstract }, - { keywords } { 关键字 } { Keywords: }, - { clc } { 中图分类号 } { CLC~ number: }, - { notation } { 符号表 } { List~ of~ Symbols } - } - { \@@_define_name:nnn #1 } -% \end{macrocode} -% -% 默认定理头名称。 -% \begin{macrocode} -\clist_map_inline:nn - { - { proof } { 证明 } { Proof }, - { axiom } { 公理 } { Axiom }, - { corollary } { 推论 } { Corollary }, - { definition } { 定义 } { Definition }, - { example } { 例 } { Example }, - { lemma } { 引理 } { Lemma }, - { theorem } { 定理 } { Theorem } - } - { \@@_define_name:nnn #1 } -% -%<@@=> -% \end{macrocode} +% 以下代码中有一些形如 |<*class>| 的标记,这是 \pkg{DocStrip} 中的“guard”,用来 +% 选择性地提取文件。“\textsf{*}”和“\textsf{/}”分别表示该部分的开始和结束。不含 +% “\textsf{*}”和“\textsf{/}”的标记出现在行号右侧,它们用来确定单独一行代码的 +% 归属。这些标记的颜色深浅不一,用以明确嵌套关系。 % -% \clearpage +% 另有若干形如 |<@@=fdu>| 的标记,它们由 \pkg{l3docstrip} 定义,用来指示名字 +% 空间(模块)。 % % \end{implementation} % diff --git a/test/dtxtest.dtx b/test/dtxtest.dtx index 5b69f7f..3ad5563 100644 --- a/test/dtxtest.dtx +++ b/test/dtxtest.dtx @@ -304,6 +304,25 @@ % % \end{documentation} % +% \iffalse meta-comment +% +% Copyright (C) 2017--2019 by Xiangdong Zeng +% +% This work may be distributed and/or modified under the conditions of the +% LaTeX Project Public License, either version 1.3c of this license or (at +% your option) any later version. The latest version of this license is in: +% +% http://www.latex-project.org/lppl.txt +% +% and version 1.3 or later is part of all distributions of LaTeX version +% 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Xiangdong Zeng. +% +% \fi +% % \begin{implementation} % % \newgeometry{ diff --git a/testfiles/01-internal.luatex.tlg b/testfiles/01-internal.luatex.tlg index cddc120..853af79 100644 --- a/testfiles/01-internal.luatex.tlg +++ b/testfiles/01-internal.luatex.tlg @@ -37,28 +37,28 @@ l. ... } > \box...= \hbox(7.76903+0.18068)x9.14215, direction TLT .\whatsit4=[] -.\TU/LibertinusSerif-Regular.otf(0)/m/n/12.045 ① +.\TU/libertinusserif-regular.otf(0)/m/n/12.045 ① ! OK. \l_tmpa_box l. ... } > \box...= \hbox(7.76903+0.18068)x9.13011, direction TLT .\whatsit4=[] -.\TU/LibertinusSerif-Regular.otf(0)/m/n/12.045 ⓐ +.\TU/libertinusserif-regular.otf(0)/m/n/12.045 ⓐ ! OK. \l_tmpa_box l. ... } > \box...= \hbox(7.76903+0.18068)x9.14215, direction TLT .\whatsit4=[] -.\TU/LibertinusSerif-Regular.otf(0)/m/n/12.045 Ⓐ +.\TU/libertinusserif-regular.otf(0)/m/n/12.045 Ⓐ ! OK. \l_tmpa_box l. ... } > \box...= \hbox(7.76903+0.18068)x9.14215, direction TLT .\whatsit4=[] -.\TU/LibertinusSerif-Regular.otf(0)/m/n/12.045 ⓒ +.\TU/libertinusserif-regular.otf(0)/m/n/12.045 ⓒ ! OK. \l_tmpa_box l. ... } diff --git a/testfiles/01-internal.xetex.tlg b/testfiles/01-internal.xetex.tlg index a3f67bf..3168cc3 100644 --- a/testfiles/01-internal.xetex.tlg +++ b/testfiles/01-internal.xetex.tlg @@ -37,7 +37,7 @@ l. ... } l. ... } > \box...= \hbox(7.76903+0.1927)x9.14215 -.\TU/LibertinusSerif-Regular.otf(0)/m/n/12.045 ① +.\TU/libertinusserif-regular.otf(0)/m/n/12.045 ① .\kern -0.0002 .\kern 0.0002 ! OK. @@ -45,7 +45,7 @@ l. ... } l. ... } > \box...= \hbox(7.76903+0.1927)x9.13011 -.\TU/LibertinusSerif-Regular.otf(0)/m/n/12.045 ⓐ +.\TU/libertinusserif-regular.otf(0)/m/n/12.045 ⓐ .\kern -0.0002 .\kern 0.0002 ! OK. @@ -53,7 +53,7 @@ l. ... } l. ... } > \box...= \hbox(7.76903+0.1927)x9.14215 -.\TU/LibertinusSerif-Regular.otf(0)/m/n/12.045 Ⓐ +.\TU/libertinusserif-regular.otf(0)/m/n/12.045 Ⓐ .\kern -0.0002 .\kern 0.0002 ! OK. @@ -61,7 +61,7 @@ l. ... } l. ... } > \box...= \hbox(7.76903+0.1927)x9.14215 -.\TU/LibertinusSerif-Regular.otf(0)/m/n/12.045 ⓒ +.\TU/libertinusserif-regular.otf(0)/m/n/12.045 ⓒ .\kern -0.0002 .\kern 0.0002 ! OK. diff --git a/testfiles/02-basic.luatex.tlg b/testfiles/02-basic.luatex.tlg index da972f8..83208c8 100644 --- a/testfiles/02-basic.luatex.tlg +++ b/testfiles/02-basic.luatex.tlg @@ -65,6 +65,7 @@ Completed box being shipped out [1] ......\localbrokenpenalty=0 ......\localleftbox=null ......\localrightbox=null +.....\hbox(0.0+0.0)x0.0, direction TLT .....\hbox(21.1992+2.8908)x24.09, direction TLT ......\LTJY3/FandolHei(0)/m/n/24.09 摘 .....\glue 24.09 @@ -363,6 +364,7 @@ Completed box being shipped out [3] ......\localbrokenpenalty=0 ......\localleftbox=null ......\localrightbox=null +.....\hbox(0.0+0.0)x0.0, direction TLT .....\TU/texgyreheros(0)/m/n/24.09 A .....\kern0.12045 (font) .....\TU/texgyreheros(0)/m/n/24.09 b @@ -691,6 +693,7 @@ t}{\ETC.} .......\localbrokenpenalty=0 .......\localleftbox=null .......\localrightbox=null +......\hbox(0.0+0.0)x0.0, direction TLT ......\hbox(21.1992+2.8908)x24.09, direction TLT .......\LTJY3/FandolHei(0)/m/n/24.09 符 ......\glue 0.0 plus 2.07393 @@ -1144,6 +1147,7 @@ Completed box being shipped out [1] ......\localbrokenpenalty=0 ......\localleftbox=null ......\localrightbox=null +.....\hbox(0.0+0.0)x0.0, direction TLT .....\hbox(21.1992+2.8908)x24.09, direction TLT ......\LTJY3/FandolHei(0)/m/n/24.09 第 .....\glue 6.02249 plus 1.0 minus 1.0 @@ -1419,6 +1423,7 @@ Completed box being shipped out [3] ......\localbrokenpenalty=0 ......\localleftbox=null ......\localrightbox=null +.....\hbox(0.0+0.0)x0.0, direction TLT .....\hbox(21.1992+2.8908)x24.09, direction TLT ......\LTJY3/FandolHei(0)/m/n/24.09 第 .....\glue 6.02249 plus 1.0 minus 1.0 diff --git a/testfiles/02-basic.xetex.tlg b/testfiles/02-basic.xetex.tlg index 81f01a2..d10b762 100644 --- a/testfiles/02-basic.xetex.tlg +++ b/testfiles/02-basic.xetex.tlg @@ -49,6 +49,7 @@ Completed box being shipped out [1] ....\glue(\parskip) 0.0 plus 1.0 ....\hbox(18.5493+4.19165)x416.54877, glue set 172.13939fil .....\glue(\leftskip) 0.0 plus 1.0fil +.....\hbox(0.0+0.0)x0.0 .....\TU/FandolHei(0)/m/n/24.09 摘 .....\kern -0.00017 .....\kern 0.00017 @@ -263,6 +264,7 @@ Completed box being shipped out [3] ....\glue(\parskip) 0.0 plus 1.0 ....\hbox(17.56161+0.36133)x416.54877, glue set 164.15356fil .....\glue(\leftskip) 0.0 plus 1.0fil +.....\hbox(0.0+0.0)x0.0 .....\TU/texgyreheros(0)/m/n/24.09 Abstract .....\kern -0.0002 .....\kern 0.0002 @@ -444,6 +446,7 @@ Completed box being shipped out [5] .....\glue(\parskip) 0.0 plus 1.0 .....\hbox(18.64566+4.33618)x416.54877, glue set 172.13939fil ......\glue(\leftskip) 0.0 plus 1.0fil +......\hbox(0.0+0.0)x0.0 ......\TU/FandolHei(0)/m/n/24.09 符 ......\glue 0.0 plus 2.07393 ......\TU/FandolHei(0)/m/n/24.09 号 @@ -592,8 +595,6 @@ Completed box being shipped out [5] .........\glue 7.63654 minus 6.0225 .........\rule(0.0+0.0)x-7.63654 .........\TU/FandolSong(0)/m/n/12.045 ( -.........\penalty 10000 -.........\glue 0.0 .........\TU/XITS(0)/m/n/12.045 bra .........\penalty 10000 .........\TU/FandolSong(0)/m/n/12.045 ) @@ -638,8 +639,6 @@ Completed box being shipped out [5] .........\glue 7.63654 minus 6.0225 .........\rule(0.0+0.0)x-7.63654 .........\TU/FandolSong(0)/m/n/12.045 ( -.........\penalty 10000 -.........\glue 0.0 .........\TU/XITS(0)/m/n/12.045 ket .........\penalty 10000 .........\TU/FandolSong(0)/m/n/12.045 ) @@ -792,6 +791,7 @@ Completed box being shipped out [1] ....\glue(\parskip) 0.0 plus 1.0 ....\hbox(18.83838+4.26392)x416.54877, glue set 122.61035fil .....\glue(\leftskip) 0.0 plus 1.0fil +.....\hbox(0.0+0.0)x0.0 .....\TU/FandolHei(0)/m/n/24.09 第 .....\glue 6.69702 plus 3.34851 minus 2.23233 .....\TU/texgyreheros(0)/m/n/24.09 1 @@ -995,6 +995,7 @@ Completed box being shipped out [3] ....\glue(\parskip) 0.0 plus 1.0 ....\hbox(18.83838+4.26392)x416.54877, glue set 122.61035fil .....\glue(\leftskip) 0.0 plus 1.0fil +.....\hbox(0.0+0.0)x0.0 .....\TU/FandolHei(0)/m/n/24.09 第 .....\glue 6.69702 plus 3.34851 minus 2.23233 .....\TU/texgyreheros(0)/m/n/24.09 2 diff --git a/testfiles/03-basic-en.luatex.tlg b/testfiles/03-basic-en.luatex.tlg index 1b7044c..c04bfd0 100644 --- a/testfiles/03-basic-en.luatex.tlg +++ b/testfiles/03-basic-en.luatex.tlg @@ -65,6 +65,7 @@ Completed box being shipped out [1] ......\localbrokenpenalty=0 ......\localleftbox=null ......\localrightbox=null +.....\hbox(0.0+0.0)x0.0, direction TLT .....\TU/XITS(0)/bx/n/24.09 A .....\kern-0.4818 (font) .....\TU/XITS(0)/bx/n/24.09 b @@ -391,6 +392,7 @@ t}{\ETC.} .......\localbrokenpenalty=0 .......\localleftbox=null .......\localrightbox=null +......\hbox(0.0+0.0)x0.0, direction TLT ......\TU/XITS(0)/bx/n/24.09 L ......\TU/XITS(0)/bx/n/24.09 i ......\TU/XITS(0)/bx/n/24.09 s @@ -905,6 +907,7 @@ Completed box being shipped out [1] ......\localbrokenpenalty=0 ......\localleftbox=null ......\localrightbox=null +.....\hbox(0.0+0.0)x0.0, direction TLT .....\TU/XITS(0)/bx/n/22.08249 C .....\TU/XITS(0)/bx/n/22.08249 h .....\TU/XITS(0)/bx/n/22.08249 a @@ -1234,6 +1237,7 @@ Completed box being shipped out [3] ......\localbrokenpenalty=0 ......\localleftbox=null ......\localrightbox=null +.....\hbox(0.0+0.0)x0.0, direction TLT .....\TU/XITS(0)/bx/n/22.08249 C .....\TU/XITS(0)/bx/n/22.08249 h .....\TU/XITS(0)/bx/n/22.08249 a diff --git a/testfiles/03-basic-en.xetex.tlg b/testfiles/03-basic-en.xetex.tlg index 9fe5709..68fffeb 100644 --- a/testfiles/03-basic-en.xetex.tlg +++ b/testfiles/03-basic-en.xetex.tlg @@ -49,6 +49,7 @@ Completed box being shipped out [1] ....\glue(\parskip) 0.0 plus 1.0 ....\hbox(16.6221+0.33725)x416.54877, glue set 163.82834fil .....\glue(\leftskip) 0.0 plus 1.0fil +.....\hbox(0.0+0.0)x0.0 .....\TU/XITS(0)/bx/n/24.09 Abstract .....\kern -0.0002 .....\kern 0.0002 @@ -231,6 +232,7 @@ Completed box being shipped out [3] .....\glue(\parskip) 0.0 plus 1.0 .....\hbox(16.67027+4.93843)x416.54877, glue set 128.71716fil ......\glue(\leftskip) 0.0 plus 1.0fil +......\hbox(0.0+0.0)x0.0 ......\TU/XITS(0)/bx/n/24.09 List ......\kern -0.00021 ......\kern 0.00021 @@ -579,6 +581,7 @@ Completed box being shipped out [1] ....\glue(\parskip) 0.0 plus 1.0 ....\hbox(15.259+4.5269)x416.54877, glue set 160.86328fil .....\glue(\leftskip) 0.0 plus 1.0fil +.....\hbox(0.0+0.0)x0.0 .....\TU/XITS(0)/bx/n/22.08249 Chapter .....\kern -0.00021 .....\kern 0.00021 @@ -791,6 +794,7 @@ Completed box being shipped out [3] ....\glue(\parskip) 0.0 plus 1.0 ....\hbox(15.259+4.5269)x416.54877, glue set 160.86328fil .....\glue(\leftskip) 0.0 plus 1.0fil +.....\hbox(0.0+0.0)x0.0 .....\TU/XITS(0)/bx/n/22.08249 Chapter .....\kern -0.00021 .....\kern 0.00021 diff --git a/testfiles/04-cover.luatex.tlg b/testfiles/04-cover.luatex.tlg index 18b2aec..6e8388b 100644 --- a/testfiles/04-cover.luatex.tlg +++ b/testfiles/04-cover.luatex.tlg @@ -380,29 +380,29 @@ Completed box being shipped out [1] .........\localrightbox=null ........\hbox(0.0+0.0)x0.0, direction TLT ........\hbox(15.89938+2.1681)x18.06749, direction TLT -.........\LTJY3/FandolSong(0)/bx/n/18.06749 这 +.........\LTJY3/FandolHei(0)/m/n/18.06749 这 ........\glue 0.0 plus 0.9078 ........\hbox(15.89938+2.1681)x18.06749, direction TLT -.........\LTJY3/FandolSong(0)/bx/n/18.06749 是 +.........\LTJY3/FandolHei(0)/m/n/18.06749 是 ........\glue 0.0 plus 0.9078 ........\norule(15.89938+2.1681)x0.0 -........\LTJY3/FandolSong(0)/bx/n/18.06749 一 +........\LTJY3/FandolHei(0)/m/n/18.06749 一 ........\glue 0.0 plus 0.9078 ........\hbox(15.89938+2.1681)x18.06749, direction TLT -.........\LTJY3/FandolSong(0)/bx/n/18.06749 个 +.........\LTJY3/FandolHei(0)/m/n/18.06749 个 ........\glue 0.0 plus 0.9078 ........\hbox(15.89938+2.1681)x18.06749, direction TLT -.........\LTJY3/FandolSong(0)/bx/n/18.06749 论 +.........\LTJY3/FandolHei(0)/m/n/18.06749 论 ........\glue 0.0 plus 0.9078 ........\hbox(15.89938+2.1681)x18.06749, direction TLT -.........\LTJY3/FandolSong(0)/bx/n/18.06749 文 +.........\LTJY3/FandolHei(0)/m/n/18.06749 文 ........\glue 0.0 plus 0.9078 ........\hbox(15.89938+2.1681)x18.06749, direction TLT -.........\LTJY3/FandolSong(0)/bx/n/18.06749 标 +.........\LTJY3/FandolHei(0)/m/n/18.06749 标 ........\penalty 500 ........\glue 0.0 plus 0.9078 ........\hbox(15.89938+2.1681)x18.06749, direction TLT -.........\LTJY3/FandolSong(0)/bx/n/18.06749 题 +.........\LTJY3/FandolHei(0)/m/n/18.06749 题 ........\penalty 10000 ........\glue(\parfillskip) 0.0 ........\glue(\rightskip) 0.0 plus 1.0fil diff --git a/testfiles/04-cover.xetex.tlg b/testfiles/04-cover.xetex.tlg index eb2fd1e..21b4faa 100644 --- a/testfiles/04-cover.xetex.tlg +++ b/testfiles/04-cover.xetex.tlg @@ -258,8 +258,8 @@ Completed box being shipped out [1] ....\penalty -51 ....\glue 13.0 plus 7.0 minus 8.0 ....\glue(\parskip) 0.0 plus 1.0 -....\glue(\baselineskip) 17.07216 -....\hbox(12.92776+3.89307)x416.54877, glue set 20.82872fil +....\glue(\baselineskip) 16.78308 +....\hbox(13.21684+4.18214)x416.54877, glue set 20.82872fil .....\glue(\leftskip) 0.0 plus 1.0fil .....\hbox(0.0+0.0)x0.0 ......\glue 0.0 @@ -271,25 +271,25 @@ Completed box being shipped out [1] ......\glue 6.0 .....\penalty 0 .....\mathon -.....\vbox(12.92776+3.89307)x374.89134 -......\hbox(13.8939+2.92693)x374.89134, glue set 115.17572fil +.....\vbox(13.21684+4.18214)x374.89134 +......\hbox(14.20105+3.19794)x374.89134, glue set 115.17572fil .......\glue(\leftskip) 0.0 plus 1.0fil .......\hbox(0.0+0.0)x0.0 -.......\TU/FandolSong(0)/bx/n/18.06749 这 +.......\TU/FandolHei(0)/m/n/18.06749 这 .......\glue 0.0 plus 0.9078 -.......\TU/FandolSong(0)/bx/n/18.06749 是 +.......\TU/FandolHei(0)/m/n/18.06749 是 .......\glue 0.0 plus 0.9078 -.......\TU/FandolSong(0)/bx/n/18.06749 一 +.......\TU/FandolHei(0)/m/n/18.06749 一 .......\glue 0.0 plus 0.9078 -.......\TU/FandolSong(0)/bx/n/18.06749 个 +.......\TU/FandolHei(0)/m/n/18.06749 个 .......\glue 0.0 plus 0.9078 -.......\TU/FandolSong(0)/bx/n/18.06749 论 +.......\TU/FandolHei(0)/m/n/18.06749 论 .......\glue 0.0 plus 0.9078 -.......\TU/FandolSong(0)/bx/n/18.06749 文 +.......\TU/FandolHei(0)/m/n/18.06749 文 .......\glue 0.0 plus 0.9078 -.......\TU/FandolSong(0)/bx/n/18.06749 标 +.......\TU/FandolHei(0)/m/n/18.06749 标 .......\glue 0.0 plus 0.9078 -.......\TU/FandolSong(0)/bx/n/18.06749 题 +.......\TU/FandolHei(0)/m/n/18.06749 题 .......\kern -0.00017 .......\kern 0.00017 .......\penalty 10000 @@ -308,7 +308,7 @@ Completed box being shipped out [1] ....\penalty -51 ....\glue 13.0 plus 7.0 minus 8.0 ....\glue(\parskip) 0.0 plus 1.0 -....\glue(\baselineskip) 7.87547 +....\glue(\baselineskip) 7.5864 ....\hbox(8.467+1.43999)x416.54877, glue set 20.82872fil .....\glue(\leftskip) 0.0 plus 1.0fil .....\hbox(0.0+0.0)x0.0