硕士/博士论文模板中 \thesistitle 的问题

硕士/博士论文模板中 \thesistitle 的问题

我已经下载了博士论文的精彩模板 https://www.latextemplates.com/template/masters-doctoral-thesis

我以前用过它,并且已经为我的论文调整了内容。然而,当我在上次更新后尝试用 MiKTeX 编译它时,我遇到了这个问题:

("C:\Users\XXXX\AppData\Local\Programs\MiKTeX 2.9\tex\generic\oberdiek\atbegshi.sty"))
! Missing number, treated as zero.
<to be read again> 
               -
l.81 ...end of thesis title}
                                               % Your thesis title, this...

? 

问题似乎出在\thesistitle命令中。但是我检查了 .cls 文件,没有发现任何问题。我从 LaTeXtemplates 下载了原始文件并得到了相同的结果:

("C:\Users\XXXX\AppData\Local\Programs\MiKTeX 2.9\tex\latex\csquotes\csquotes.cfg"))
! Missing number, treated as zero.
<to be read again> 
               -
l.70 \thesistitle{Thesis Title}
                            % Your thesis title, this is used in the tit...

? 

这是一个最小的工作示例,它给出了相同的错误。但我无法摆脱类依赖关系:

\documentclass[11pt, english, singlespacing, headsepline]{MastersDoctoralThesis}

\usepackage[utf8]{inputenc} % Required for inputting international characters
\usepackage[T1]{fontenc} % Output font encoding for international characters

\thesistitle{Resilience of wastewater resource recovery to multiple stress conditions} 

\begin{document}
\begin{titlepage}

\HRule \\[0.4cm] % Horizontal line
{\huge \bfseries \ttitle\par}\vspace{0.4cm} % Thesis title
\HRule \\[1.5cm] % Horizontal line

\end{titlepage}
\end{document} 

在 LaTeX.org 上交叉发布

更新:临时解决方案是用以下内容替换\thetitle.tex 文件中的命令部分:

\newcommand{\ttitle}{Thesis title}
\makeatletter
\renewcommand{\@title}{Thesis title}
\makeatother

答案1

类滥用\DeclareDocumentCommand定义变量。无论如何,明显的错误是在第二行

\DeclareDocumentCommand{\thesistitle} { o m }{
        \IfBooleanTF{#1} {\DeclareDocumentCommand{\shorttitle}{ }{#1}
        {\DeclareDocumentCommand{\shorttitle}{}{#2}}}
        \DeclareDocumentCommand{\@title}{ }{#2}
        \DeclareDocumentCommand{\ttitle}{ }{#2}
}

哪里\IfBooleanTF没有意义,应该是\IfValueTF

代码应该是

\NewDocumentCommand{\thesistitle} { o m }{%
   \IfValueTF{#1}{\def\shorttitle{#1}}{\def\shorttitle{#2}}%
   \def\@title{#2}%
   \def\ttitle{#2}%
}

或者更巧妙地,

\NewDocumentCommand{\thesistitle} { O{#2} m }{%
   \def\shorttitle{#1}%
   \def\@title{#2}%
   \def\ttitle{#2}%
}

您可以通过在序言中使用来避免修改类

\makeatletter
\RenewDocumentCommand{\thesistitle} { O{#2} m }{%
   \def\shorttitle{#1}%
   \def\@title{#2}%
   \def\ttitle{#2}%
}
\makeatother

我更倾向于使用\def而不是\DeclareDocumentCommand。然而,修复这个类需要数周的工作(例如,\null\vfill没有地方,而且未受保护的行尾数是巨大的),所以我就放手了。

答案2

定义的代码\thesistitle是错误的。它用于\IfBooleanTF测试可选参数是否存在。正确的命令是\IfValueTF。可以使用此文档重现错误:

\documentclass{article}

\usepackage{xparse}
\begin{document}

%Faulty definition:
\DeclareDocumentCommand{\thesistitle} { o m }{%
    \IfBooleanTF{#1} %replace by \IfValueTF
    {\DeclareDocumentCommand{\shorttitle}{ }{#1}
    {\DeclareDocumentCommand{\shorttitle}{}{#2}}}
}

\thesistitle{some text some text}

\end{document}

此错误命令现在会给出错误,因为 expl3 中的更改导致您无法再使用未定义的布尔值。siunitx 的最新错误(siunitx 和 fontspec/unicode-math) 和 mhchem (请参阅本答案末尾的 egreg 解释:https://tex.stackexchange.com/a/383077/2388)。

答案3

由于此模板的代码不太有吸引力,因此这里只有一个解决方法:

\documentclass[11pt, english, singlespacing, headsepline]{MastersDoctoralThesis}

\usepackage[utf8]{inputenc} % Required for inputting international characters
\usepackage[T1]{fontenc} % Output font encoding for international characters

%\thesistitle{Resilience of wastewater resource recovery to multiple stress conditions} 

\newcommand{\ttitle}{Resilience of wastewater resource recovery to multiple stress conditions}

\begin{document}
\begin{titlepage}

\HRule \\[0.4cm] % Horizontal line
{\huge \bfseries \ttitle\par}\vspace{0.4cm} % Thesis title
\HRule \\[1.5cm] % Horizontal line

\end{titlepage}
\end{document} 

答案4

其他答案解释了错误发生的原因。但这个问题最简单的解决办法似乎是根本不使用\thesistitle。它没有做任何真正有用的事情。

\documentclass[11pt, english, singlespacing, headsepline]{MastersDoctoralThesis}

\usepackage[utf8]{inputenc} % Required for inputting international characters
\usepackage[T1]{fontenc} % Output font encoding for international characters


\begin{document}
\begin{titlepage}

{\centering\huge\bfseries \parbox{.7\textwidth}{\centering Resilience of wastewater resource recovery to multiple stress conditions}\par}\vspace{0.4cm} % Thesis title

\end{titlepage}
\end{document} 

模板已更新,可与最新版本xparse以及旧版本兼容。Overleaf 仍运行 TeX Live 2016。

相关内容