我已经下载了博士论文的精彩模板 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。