我正在用 TeXshop 在 LaTeX2e 中编写一个文件,其中我想要一些段落,其中段落的所有行后第一行是预期的(与字典条目一样)。我发现了悬挂包——这种段落称为悬挂段落,我以前不知道——并尝试使用它。唉,我收到了“致命错误”消息。
最终,我确定问题在于,如果数学模式中有一个撇号,悬挂包就会阻塞,例如在 中会发现的那样$f'(x)$
。我在以下短文件中隔离了这个问题:
\documentclass[11pt]{amsart}
\usepackage{hanging}
\begin{document}
$f'(x)$
\end{document}
那就是整个文件。当我尝试编译它时,我收到以下错误消息:
! TeX capacity exceeded, sorry [input stack size=5000].
'->\futurelet
\next \h@ngrqtest
l.7 $f'(
x)$
! ==> Fatal error occurred, no output PDF file produced!
Transcript written on test.log.
谁能告诉我如何解决这个问题?
我在网上查看是否有人写过关于此事的文章,结果只找到了 2010 年的一篇文章http://handyfloss.wordpress.com/2006/11/30/tex-capacity-exceeded-error/,Joshua Sasmor 在回复 13 中报告说他发现了这个问题。但是没有提供允许使用悬挂包的解决方案。
答案1
问题在于该hanging
包的“悬挂标点符号”(不管它是什么?)功能。它使所有类型的标点符号都处于活动状态,而不检查它们是在数学模式还是文本模式下使用。幸运的是,有选项可以禁用该行为:
\documentclass[11pt]{amsart}
\usepackage[notquote]{hanging} % possibly you need to add notcomma, ...
% (see the package manual)
\begin{document}
$f'(x)$
\end{document}
答案2
如果您想保留“悬挂引号”(在环境中hangpunct
),那么序言中的这段代码应该可以起作用:
\usepackage{hanging}
\makeatletter
\def\latex@@rquote{^\bgroup\prim@s} % kernel meaning of math active quote
\let\hang@@h@ngrquote\h@ngrquote
\renewcommand{\h@ngrquote}{%
\relax\ifmmode
\expandafter\latex@@rquote
\else
\expandafter\hang@@h@ngrquote
\fi}
\makeatother
改变应该很简单:我们检查我们是否处于数学模式;如果是,我们根据 LaTeX 内核执行活动引号应该做的事情,否则我们让它hanging
执行它的职责。