newtheorem 中的数学模式溢出

newtheorem 中的数学模式溢出

我想在新定理环境中有一个长的数学模式“标题”:

\documentclass[twocolumn]{article}
\usepackage{amsthm}

\newtheorem{definition}{Definition}

\begin{document}
\begin{definition}
[$ABC \rightarrow DEF \rightarrow GHI \rightarrow JKL \rightarrow MNO \rightarrow PQR$] 

Here's some text that runs over onto the next line, to show the overrun.
\end{definition}

\end{document}

但是,虽然如果标题是文本,文本会正确换行,但内联数学模式标题似乎不会换行。(由于它不是显示数学,因此期望它换行似乎是合理的,但也许我错了。)

我在这里使用的特定公式具有说明性:我想要一些可以与任意(可破坏)数学公式一起使用的东西。

有一些重叠latex 中 newtheorem 溢出那里讨论的“手动干预”(自己格式化定理的名称)当然有效,但我想知道是否有更好的解决方案。

另请注意,我正在使用amsthm

答案1

在没有其他建议的情况下,这里有两种有点黑客的方法:

  • \allowbreak在数学字符串中的适当位置插入;MNO在这种情况下,就在之前似乎是最好的。

  • 定义一个\newtheoremstyle没有结尾句号的,将“可选”部分移到主文本中,超出其范围\trivlist(我真的不喜欢将用作\trivlist这种元素!),然后自行插入结束标点符号。

这是第二种方法的代码:

\documentclass[twocolumn]{article}
\usepackage{amsthm}

\newtheorem{definition}{Definition}

\makeatletter
\newtheoremstyle{defnopunct}%
  {\thm@preskip}{\thm@postskip}%
  {\itshape}%  body font
  {\z@}%       indent
  {\bfseries}% theorem head font
  {}%          punctuation after theorem head
  { }%         space after theorem head
  {}%          "theorem head spec"; empty = "normal"
\makeatother

\theoremstyle{defnopunct}
\newtheorem{defnopunct}[definition]{Definition}

\begin{document}

\begin{defnopunct}
\textup{($ABC \rightarrow DEF \rightarrow GHI \rightarrow JKL \rightarrow MNO \rightarrow PQR$)}\textbf{.}

Here's some text that runs over onto the next line, to show the overrun.

\end{defnopunct}

\end{document}

奇怪的是,如果长可选材料是普通文本,就不会出现问题;这个错误在 1999 年被捕获并消灭,但从来没有人用长数学表达式尝试过它,或者至少之前没有报告过它。

我已将其添加到amsthm错误列表中...

答案2

调整(来自纯 TeX)的定义\*,您可以制作一个可以使用连字符连接的箭头\discretionary{}{}{}

\def\brkarrow{\discretionary{\enspace\the\textfont2\char33}{}{}}

\begin{definition}
     [$ABC \rightarrow DEF \rightarrow GHI \rightarrow JKL \brkarrow MNO \rightarrow PQR$]     
     Here's some text that runs over onto the next line, to show the overrun.
\end{definition}    

您不能将数学放在自由选择符内,但可以使用数学字体中的字符。在本例中,我们使用数学符号字体​​中的字符编号 33。(参见 TeX Book 的附录 F)。但这样做的问题是,如果没有中断,则不会产生任何结果,因为 a 的第三部分discretionary在数学模式下必须为空白。因此,您不妨\allowbreak在适当的位置放入 an。

\begin{definition}
    [$ABC \rightarrow DEF \rightarrow GHI \rightarrow JKL \rightarrow \allowbreak MNO \rightarrow PQR$] 
Here's some text that runs over onto the next line, to show the overrun.
\end{definition}

要么可以得到这个

在此处输入图片描述

但第二种可能更简单,您可以\allowbreak随意输入。或者甚至可以定义一个微小的宏来扩展\rightarrow\allowbreak

相关内容