当用创建一个盒装环境时mdframed
,我遇到了一个带有方程式的问题,这也恰好是定义的第一行。
有没有办法自动修复问题,而无需使用\linebreak
?如果没有,最佳实践解决方案是什么?
完整 MWE:
\documentclass{article}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{mdframed}
\theoremstyle{definition}
\newtheorem{defn}{Definition}
\surroundwithmdframed[leftmargin=20pt,rightmargin=20pt]{defn}
\begin{document}
\begin{defn}
The double integral of $f$ on $R$, denoted as $\iint_R f(x,y) \, \operatorname{d}\!A$
\end{defn}
\end{document}
答案1
首先要说的是:算法很可能永远不会一次覆盖所有用例。一个好的经验法则是假设 LaTeX 文档在没有任何直接干预的情况下平均能达到最终质量的 90%。也就是说,在\linebreak
这里或那里插入一个不应该是世界末日,即
\begin{defn}
The double integral of $f$ on $R$, denoted as \linebreak $\iint_R f(x,y) \, \operatorname{d}\!A$
\end{defn}
将会完美运行。
如果您确实想自动化此操作,您可以将定义文本包装到\parbox
具有固定宽度的定义中:
\documentclass{article}
\usepackage{lipsum}
\usepackage{amsmath}
\usepackage{amsthm}
\theoremstyle{definition}
\newtheorem{definition}{Definition}
\usepackage{mdframed}
\usepackage{environ}
\makeatletter
\parindent\z@
\NewEnviron{defn}{%
\mdframed[leftmargin=20\p@, rightmargin=20\p@]
\centering
\parbox[c]{\hsize}{\definition\BODY\enddefinition}
\endmdframed
}
\makeatother
\begin{document}
\lipsum[1]
\begin{defn}
The double integral of $f$ on $R$, denoted as $\iint_R f(x,y) \, \operatorname{d}\!A$
\end{defn}
\lipsum[2]
\end{document}
但是,我认为你不需mdframed
要这样做。你可能想尝试以下定义defn
:
\NewEnviron{defn}{%
\vskip10\p@
\begingroup\centering
\fbox{%
\hskip5\p@
\parbox[c]{\dimexpr\hsize-60\p@\relax}{%
\definition\BODY\enddefinition}
\hskip5\p@}
\par
\endgroup
\vskip10\p@
}
答案2
\documentclass{article}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{mdframed}
\theoremstyle{definition}
\newtheorem{defn}{Definition}
\surroundwithmdframed[leftmargin=-10pt,rightmargin=20pt]{defn}
\begin{document}
\begin{defn}
The double integral of $f$ on $R$, denoted as $\iint_R f(x,y) \,
\operatorname{d}\!A$
\end{defn}
\end{document}
Same code only left margin is assigned with -10pt