在我的自定义课程大纲类的以下示例中,自从今天将 TeXLive 2015 发行版更新到最新版本后,我遇到了一个新错误。错误是TeX capacity exceeded
。
据我所知,该错误是\let
、\addcontentsline
命令和hyperref
包之间交互的结果。如果我将其定义\term
为常规\newcommand
,或者如果我省略\addcontentsline
,那么它可以与 hyperref 一起使用。
为什么我不能使用with\let
里面的命令?\addcontentsline
hyperref
\documentclass{article}
\usepackage{xparse}
\newcounter{Week}
\newcommand{\WeekLabel}{Week \theWeek\quad}
\DeclareDocumentCommand{\Week}{o m}{%
\stepcounter{Week}
\def\ThisWeek{\WeekLabel #2}
\subsection*{\ThisWeek}
\addcontentsline{toc}{subsection}{\ThisWeek}%
}
\newcommand{\term}[1]{\emph{#1}} % no error
%\let\term\emph % produces error with hyperref, why?
\usepackage{hyperref}
\begin{document}
\section*{Syllabus}
\tableofcontents
\section{Eighteenth-Century Opera}
\Week[11/09]{Italian \term{opera seria}}
\Week[11/15]{Italian \term{opera buffa}}
\end{document}
答案1
中的标题\addcontentsline
也用于书签中。其中,文本应该是可扩展的。\emph
因此无法使用。此外,无法在书签字符串中更改字体。包在书签内hyperref
重新定义。但是,当通过 定义时,它不再可见。\emph
\emph
\term
\let
最简单的解决方案是使用\newcommand
问题中的略微优化的方法:
\newcommand{\term}{\emph}
否则,\term
需要在书签内重新定义:
\usepackage{hyperref}
\pdfstringdefDisableCommands{\let\term\relax}