“在内联数学模式中允许在‘,’处换行”会破坏引用

“在内联数学模式中允许在‘,’处换行”会破坏引用

在回答另一个问题时允许在内联数学模式中在 ',' 处换行史蒂芬·柯特维茨提出了两种在内联数学模式中允许换行的绝佳方法。一种方法是在逗号后,使用命令,另一种方法是全局重新定义以允许换行。\allowbreak,

我使用了第二种方法,并且非常喜欢它,直到我注意到该命令\cite{}不再按预期工作:如果我引用了多个参考文献,它会显示[?]正确的引用。以下是一个例子:

\documentclass{article}

%----------Redefining `,` ------------------%
\makeatletter
\def\old@comma{,}
\catcode`\,=13
\def,{%
  \ifmmode%
    \old@comma\discretionary{}{}{}%
  \else%
    \old@comma%
  \fi%
}
\makeatother
%-------------------------------------------%

\begin{document}

\cite{A,B}

\begin{thebibliography}{A}
\bibitem{A} ABC
\bibitem{B} DEF
\end{thebibliography}

\end{document}

重新定义有什么问题,?如何纠正?

答案1

\cite尝试拆分参数时,它找不到预期的分隔符,该分隔符是 12 类逗号,与 13 类逗号不同。

除了使用之外的正确方法布雷克是让逗号“数学活跃”,就像在包中所做的那样伊科马

\AtBeginDocument{%
  \mathchardef\mathcomma\mathcode`\,
  \mathcode`\,="8000 
}
{\catcode`,=\active
  \gdef,{\mathcomma\discretionary{}{}{}}
}

但是我应该警告不要做出这样的定义,因为 TeX 可能会破坏诸如 $(a,b)$ 之类的公式。我建议

\mathchardef\breakingcomma\mathcode`\,
{\catcode`,=\active
  \gdef,{\breakingcomma\discretionary{}{}{}}
}
\newcommand{\mathlist}[1]{$\mathcode`\,=\string"8000 #1$}

并使用\mathlist{a,b,c,d}可跨行拆分的列表。(\string在与巴别塔,对于某些语言来说,双引号是有效的。)

相关内容