结合 ragged2e 和 mdframed

结合 ragged2e 和 mdframed

最小示例:

\documentclass{article}

\usepackage[document]{ragged2e}
\usepackage{mdframed}
\newmdtheoremenv{definition}{Definition}

\begin{document}

\begin{definition}[experiment]
Cubum autem in duos cubos, aut quadratoquadratum in duos quadratoquadratos,
et generaliter nullam in infinitum ultra quadratum potestatem in duos
eiusdem nominis fas est dividere cuius rei demonstrationem mirabilem sane detexi.
Hanc marginis exiguitas non caperet.
\end{definition}

\end{document}

给了我这个:

TEX 输出的图像

似乎正在发生的事情是,ragged2e 不仅允许在 ragged-right 环境中使用连字符,还会在它认为这样可以使行更合适时,擅自将宽度稍微超出分配的宽度。(这种情况不仅发生在人为设置的长单词中,也发生在正常的英语文本中,这引发了这个问题。)

我该如何关闭它?我想要的行为是

  1. 在任何情况下,任何一条线的长度都不得超过最大长度。
  2. 随意使用连字符来改善文本流畅度而不破坏 1。
  3. 使线条尽可能短以实现 1。

有趣的是,这里三行连字符中的一行确实符合该标准。

原文归功于 Pierre de Fermat,他的边距似乎也存在问题。:)

答案1

mdframed 重置了环境中的一些边距,基本上切换回对齐。但它不会切换回\spaceskipragged2e 已更改的内容,这意味着 TeX 不再能找到好的换行符,因为它无法拉伸空格。

如果你想让所有地方都正确,你可以尝试这样的操作:

\documentclass{article}

\usepackage[document]{ragged2e}
\usepackage{mdframed}
\newmdtheoremenv{definition}{Definition}
\makeatletter\AddToHook{cmd/mdf@lrbox/after}{\RaggedRight}\makeatother
\begin{document}


\begin{definition}[experiment] 
Cubum autem in duos cubos, aut quadratoquadratum in duos quadratoquadratos,
et generaliter nullam in infinitum ultra quadratum potestatem in duos
eiusdem nominis fas est dividere cuius rei demonstrationem mirabilem sane detexi.
Hanc marginis exiguitas non caperet.
\end{definition}

\end{document}

在此处输入图片描述

一般来说,我建议放弃mdframed大约 10 年未维护的版本,并改用其他版本tcolorbox

相关内容