我创建了一个据称很强大的命令,通过\DeclareRobustCommand{\plusplus}{\relsize{-3}{++}}
它可以修改一些++
符号,并在文档中使用它。但是,当我使用\relsize
和设置了计数器hyperref
的包时tocdepth
,我得到了一个神秘的错误(至少对我来说)
参数失控?{\@tempcnta >\z@ \relax \advance \@tempcnta \m@ne \@tempdimb !超出 TeX 容量,抱歉 [主内存大小=10000000]。...\@tempcnta \m@ne \@tempdimb \@tempa \@tempdimb \relax l.15 \subsubsection{test\plusplus}
我甚至尝试增加内存大小,如您所见,最多增加到 10000000。并且,在我的完整文档中,错误变为
失控定义?->\protect 5.3.4 test\protect \<>-\kernel@ifnextchar [4]\<>-\@ifnextchar \ETC . ! TeX 容量超出,抱歉 [主内存大小=10000000]。 \new@ifnex tchar l.108 \subsection{test\plusplus}
我不明白为什么错误会改变。但是,下面的代码是我在删除错误之前得到的最短的代码。但是,我需要使用包hyperref
和目录。我该如何解决这个问题?
\documentclass{book}
\usepackage{relsize}
\DeclareRobustCommand{\plusplus}{\relsize{-3}{++}}
\usepackage{hyperref}%remove hyperref and it compiles
\begin{document}
\setcounter{tocdepth}{3}%or remove teh tocdepth and it compiles
%but use both and it doesn't
\tableofcontents
\subsubsection{test\plusplus}
\end{document}
答案1
问题在于hyperref
它试图扩展\plusplus
并发现自己陷入了无限循环。
\plusplus
解决方案:为书签提供特殊的定义。
\documentclass{book}
\usepackage{relsize}
\usepackage{hyperref}
\DeclareRobustCommand{\plusplus}{\relsize{-3}{++}}
\pdfstringdefDisableCommands{%
\def\plusplus{++}%
}
\begin{document}
\tableofcontents
%%% the following would work also without \pdfstringdefDisableCommands
\section{test\texorpdfstring{\plusplus}{++}}
\section{test\plusplus}
\end{document}
对于“一次性”事件,使用\texorpdfstring{\plusplus}{++}
更简单。这种\pdfstringDisableCommands
方法更好,因为它不需要考虑命令对于书签是否安全。
您可以定义\plusplus
不同的方式,而无需relsize
:
\documentclass{book}
\usepackage{hyperref}
\makeatletter
\DeclareRobustCommand{\plusplus}{%
{\check@mathfonts\fontsize{\ssf@size}{\f@baselineskip}\selectfont++}%
}
\pdfstringdefDisableCommands{%
\def\plusplus{++}%
}
\makeatother
\begin{document}
\tableofcontents
%%% the following would work also without \pdfstringdefDisableCommands
\section{test\texorpdfstring{\plusplus}{++}}
\section{test\plusplus}
\end{document}
如果要提高两个 + 符号,可以将定义改为
\makeatletter
\DeclareRobustCommand{\plusplus}{%
\raisebox{.25ex}{\check@mathfonts\fontsize{\ssf@size}{\f@baselineskip}\selectfont++}%
}
\pdfstringdefDisableCommands{%
\def\plusplus{++}%
}
\makeatother