悬挂式包装因撇号而堵塞

悬挂式包装因撇号而堵塞

我正在用 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执行它的职责。

相关内容