alltt 包和带有 italian 选项的 babel 之间的交互不佳

alltt 包和带有 italian 选项的 babel 之间的交互不佳

鉴于以下 MWE:

\documentclass{article}
\usepackage[italian]{babel}

\usepackage{alltt}


\begin{document}
\begin{alltt}
    \(\sb{1,1}\)
\end{alltt}
\end{document}

我收到错误:

TeX capacity exceeded, sorry [main memory size=5000000].
,->\leavevmode \kern \z@ 
                         \char `\,
l.9 \(\sb{1,1
             }\)

更改\usepackage[italian]{babel}\usepackage[english]{babel}可解决问题(但这不是我需要的)。

我怀疑这可能是由于 babel 的简写造成的,但我不知道该italian选项定义了哪些简写,也不知道哪一个可能导致了问题。

答案1

这显然是 中的一个错误babel-italian。我对添加“智能逗号”功能并不满意。添加\NoIntelligentComma并不能解决问题,因为它将逗号保留为数学活动字符,而这正是 中的问题所在alltt

如果你不需要“智能逗号”,你可以简单地添加

\AtBeginDocument{\mathcode`,=\virgola}

到你的序言(加载后babel)。

如果您只想解决中的问题alltt,那么您可以将设置添加到alltt

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[italian]{babel}
\usepackage{alltt}

% fix alltt for the comma in math mode
\usepackage{etoolbox}
\AtBeginEnvironment{alltt}{\mathcode`,=\virgola}

\begin{document}

\begin{alltt}
    \(\sb{1,1}\)
\end{alltt}
\end{document}

相关内容