我正在使用 texmaker 4.5。我试图在 Windows 10 上编译以下文本:
\documentclass[english]{MastersDoctoralThesis}
\begin{document}
\frontmatter
\begin{titlepage}
The Title.
\end{titlepage}
\begin{declaration}
The Declaration.
\end{declaration}
\end{document}
但是当我编译它时,出现以下错误:
''! Missing \endcsname inserted.
<to be read again>
\tex_let:D
\begin{document}''
我该如何解决?
该模板可以在以下位置找到:http://www.latextemplates.com/template/masters-doctoral-thesis
答案1
更新日期:2017/03/09xparse
从 2017/03/07 开始,随着和包的新更新,expl3
可以使用 \DeclareDocumentCommand
在\csname ...\endcsname
构造之前定义的命令,例如在“\pagestyle”的后台代码中就是这种情况。
该\blank@p@gestyle
宏定义在MDT
不可\DeclareDocumentCommand
扩展的地方,但\pagestyle
需要一个可扩展的名称,因此失败。
使用这个绕过代码
\makeatletter
\AtBeginDocument{
\renewcommand{\blank@p@gestyle}{empty}
}
\makeatother
宏可以再次扩展。
将来的版本xparse
将消除这种绕过的必要性。
这个小文档显示了相同的错误(并且是所发生情况的简短版本)
\documentclass{article}
\usepackage{xparse}
\DeclareDocumentCommand{\foo}{}{empty}
\begin{document}
\pagestyle{\foo}
\end{document}
答案2
该模板显示了一些\NewDocumentCommand
和的错误用法\DeclareDocumentCommand
。
例如,
\NewDocumentCommand{\supervisor}{m}{%
\DeclareDocumentCommand{\supname}{}{#1}%
}
(为了便于阅读,代码重新格式化)应该是
\newcommand\supname{}
\NewDocumentCommand{\supervisor}{m}{%
\renewcommand\supname{#1}%
}
因为\supname
只是一个变量,而不是文档命令。更好的方法是,使用expl3
编程,假设\ExplSyntaxOn
有效,
\NewDocumentCommand{\supervisor}{m}
{
\tl_set:Nn \supname { #1 }
}
更好的是,
\tl_new:Nn \g_mdt_supname_tl
\NewDocumentCommand{\supervisor}{m}
{
\tl_gset:Nn \g_mdt_supname_tl { #1 }
}
如果\supname
允许在文档中使用,
\cs_new:Npn \supname { \tl_use:N \g_mdt_supname_tl }
这个问题源于
\NewDocumentCommand{\blank@p@gestyle}{}{empty}
应该是
\tl_set:Nn \blank@p@gestyle { empty }
或者,使用传统编程,
\newcommand\blank@p@gestyle{empty}
因为的参数应该\pagestyle
是完全可扩展的,而定义的某些东西\NewDocumentCommand
却不是。
相似地,
\NewDocumentCommand{\setblankpagestyle}{ m }{%
\DeclareDocumentCommand{\blank@p@gestyle}{}{#1}%
}
应该
\NewDocumentCommand{\setblankpagestyle}{ m }
{
\tl_set:Nn \blank@p@gestyle { #1 }
}
或者,在传统编程中,
\NewDocumentCommand{\setblankpagestyle}{ m }{%
\renewcommand\blank@p@gestyle{#1}%
}