首先,如果问题看起来重复,我很抱歉:我试图在以前提出的问题中找到解决方案,但提供的所有提示似乎都对我不起作用。
我的情况如下。我正在编写一个新类来排版我的论文(希望能够帮助其他想使用 LaTeX 而不是 Hangul 的学生),方法是自定义 memoir 包。
一切都进行得很顺利,直到我陷入困境:我有许多自定义命令,这些命令定义变量,然后由命令输出\prelims
(参见下面的代码)。
\newcommand*{\supervisor}[1]{\gdef\KNUsupervisor{#1}}
\newcommand*{\department}[1]{\gdef\KNUdepartment{#1}}
\newcommand*{\major}[1]{\gdef\KNUmajor{#1}}
\newcommand*{\degree}[1]{\gdef\KNUdegree{#1}}
%%% \asbtractEN
\newcommand*{\abstractEN}[1]
{
\gdef\KNUabstractEN
{
{
\begin{center}
\@title
\vspace{1em}
\@author
\vspace{1em}
School of \KNUdepartment \\
Major in \KNUmajor \\
The Graduate School \\
(Supervised by Professor \KNUsupervisor)
\end{center}
\vspace{2em}
(Abstract)
\vspace{1em}
\mbox{#1}
}
}
}
\newcommand{\prelims}{
\frontmatter
\tableofcontents \newpage
\listoffigures \newpage
\listoftables \newpage
\cleardoublepage
\phantomsection
\addcontentsline{toc}{chapter}{Abstract}
\KNUabstractEN
\mainmatter
\setcounter{secnumdepth}{2}
}
我的问题是,当指定由多个段落组成的摘要时,例如
\abstractEN{
Par1
Par2
}
编译器向我吐出了“通常”Paragraph ended before \abstractEN was complete.
我尝试将参数放在单独的块中、框中、甚至小页面中,但错误仍然存在。
周围有热心人吗?
PS 摘要命令中的任何英文错误均严格按照我们大学的模板要求-.-
答案1
用 TeX 术语来说,这是因为您的命令未定义为,\long
因此不允许在其参数中出现段落分隔符,因为您已用\newcommand*
而不是 来定义它们\newcommand
。
如果使用\def
和变体来定义带有参数的命令(并且希望它们也接受段落分隔符),则需要使用前缀\long
。Andrew Swann 指出,您使用\gdef
所以应该注意这一点,但\gdef
您的示例中定义的命令似乎都没有带参数,因此不需要这样做。
解决方案:*
从 中删除\newcommand*{\abstractEN}
。
看\newcommand
和有什么区别\newcommand*
?
这个问题的答案解释了为什么非形式\long
是有用的。