我已经开始使用 suftesi 来编写包含多篇文章的书,并尝试使用第 5 节中的最小示例:
\documentclass[structure=collection]{suftesi}
%process with pdflatex
\begin{document}
\input{articleTest}
\end{document}
以及从手册中复制的一篇文章:
\begin{article}
\author{Author}
\title{Title of the paper}
% The abstract is optional.
% \begin{abstract}
% The abstract
% \end{abstract}
\maketitle
Text of the paper
\end{article}
这会产生 pdflatex 错误
Undefined control sequence. \maketitle
必须改变什么?
答案1
我认为实际上不是\maketitle
未定义的,你的编辑器可能没有很好地解析错误消息。我得到的完整错误是
! Undefined control sequence.
\@maketitle ...{title.\thearticle }\Hy@raisedlink
{\hyper@anchorstart {\@cur...
l.20 \maketitle
?
因此,导致错误的宏是\Hy@raisedlink
(错误消息中换行符之前的最后一个宏),它在suftesi
的定义中使用\maketitle
。该宏由包定义hyperref
,因此添加
\usepackage{hyperref}
解决了问题。(至少在我的系统上。)
\
顺便说一下,我之前添加了缺失的内容begin{article}
,我认为那是一个复制粘贴错误。
\documentclass[structure=collection]{suftesi}
%process with pdflatex
\usepackage{hyperref} % <-- add this
\begin{document}
\begin{article}
\author{Author}
\title{Title of the paper}
% The abstract is optional.
% \begin{abstract}
% The abstract
% \end{abstract}
\maketitle
Text of the paper
\end{article}
\end{document}
答案2
我想说这是一个错误suftesi
,可以通过进一步检查来解决:
\begin{filecontents}{\jobname-test.tex}
\begin{article}
\author{Author}
\title{Title of the paper}
% The abstract is optional.
% \begin{abstract}
% The abstract
% \end{abstract}
\maketitle
Text of the paper
\end{article}
\end{filecontents}
\documentclass[structure=collection]{suftesi}
%process with pdflatex
\usepackage{etoolbox}
\makeatletter
\AtBeginDocument{%
\patchcmd{\@maketitle}
{%
\xdef\@currentHref{title.\thearticle}%
\Hy@raisedlink{\hyper@anchorstart{\@currentHref}\hyper@anchorend}%
}
{%
\@ifundefined{Hy@raisedlink}{\let\texorpdfstring\@firstoftwo}{%
\xdef\@currentHref{title.\thearticle}%
\Hy@raisedlink{\hyper@anchorstart{\@currentHref}\hyper@anchorend}%
}%
}
{}{}%
}
\makeatother
\begin{document}
\input{\jobname-test}
\end{document}
该filecontents
环境仅用于使示例自成一体。
如果\Hy@raisedlink
没有定义,我们可以假设hyperref
还没有被加载(\@ifundefined
当所有的包都已经被加载时才会执行);在这种情况下我们定义返回它的第一个参数;否则,执行\texorpdfstring
与当前相同的代码。suftesi