在回答另一个问题时允许在内联数学模式中在 ',' 处换行,史蒂芬·柯特维茨提出了两种在内联数学模式中允许换行的绝佳方法。一种方法是在逗号后,
使用命令,另一种方法是全局重新定义以允许换行。\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
在与巴别塔,对于某些语言来说,双引号是有效的。)