\let 与 hyperrref

\let 与 hyperrref

在我的自定义课程大纲类的以下示例中,自从今天将 TeXLive 2015 发行版更新到最新版本后,我遇到了一个新错误。错误是TeX capacity exceeded

据我所知,该错误是\let\addcontentsline命令和hyperref包之间交互的结果。如果我将其定义\term为常规\newcommand,或者如果我省略\addcontentsline,那么它可以与 hyperref 一起使用。

为什么我不能使用with\let里面的命令?\addcontentslinehyperref

\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}

相关内容