对于我目前正在撰写的一篇论文,我想强调并解释方程中的一些数学变换(以解释为什么变换成立)。当然,我可以“打断”数学证明并在新行中解释变换,但我认为如果注释直接写在它们相关的行旁边会更好。我已经考虑过创建一个或两个小页面的表格,但我不确定是否有更好的方法来做到这一点。
附件中有一个简单的例子(实际方程更复杂),只是为了让你了解我在想什么。箭头不是强制性的,但如果注释写在数学线之间就更好了(但方程的间距不应因注释而改变)。谢谢你的帮助!
\documentclass{scrartcl}
\usepackage{amsthm}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{mathtools}
\begin{document}
\begin{equation*}
\begin{split}
\textrm{OPT} & = \textrm{OPTL} + \textrm{OPTR} \\
& = (x+y) + (y+z) \\
& \leq 2* (y+z) \\
& = \textrm{OPTR} + \textrm{OPTR}
\end{split}
\end{equation*}
\end{document}
答案1
这witharrows
包可以做这样的事情。
\documentclass{scrartcl}
\usepackage{amsthm}
\usepackage{amssymb}
\usepackage{mathtools}
\usepackage{witharrows}
\WithArrowsOptions{tikz={font={\normalfont\small}}}
\begin{document}
\begin{equation*}
\begin{WithArrows}
\mathrm{OPT} & = \mathrm{OPTL} + \mathrm{OPTR}\Arrow{Definition of $\mathrm{OPT}$ and $\mathrm{OPTR}$} \\
& = (x+y) + (y+z)\Arrow{As $x \leq z$} \\
& \leq 2* (y+z)\Arrow{Definition of $\mathrm{OPTR}$} \\
& = \mathrm{OPTR} + \mathrm{OPTR}
\end{WithArrows}
\end{equation*}
\end{document}
还有一种半自动的方式可以在文本中获取换行符,您需要指定文本宽度,然后标签将被断开以适合水平空间。
\mathrm{OPT} & = \mathrm{OPTL} + \mathrm{OPTR}
\Arrow[tikz={text width=5.3cm}]{Definition of $\mathrm{OPT}$ and $\mathrm{OPTR}$,
furthermore we use the well-known Unicorn theorem} \\
该解决方案是半自动的,因为您必须为text-width
自己找到一个好的值,这意味着偶尔使用时它可能并不比手动中断更快\\
。
一旦文本占据多行,您就会面临碰到上面或下面的标签的风险。
版本 1.9witharrows
定义了一个替换环境,align
其中标签可以自动换行。感谢 F. Pantigny 在评论中提供的提示。
\begin{DispWithArrows*}[wrap-lines]
\mathrm{OPT} & = \mathrm{OPTL} + \mathrm{OPTR}\Arrow{Definition of $\mathrm{OPT}$ and $\mathrm{OPTR}$,
and the Unicorn theorem} \\
& = (x+y) + (y+z)\Arrow{As $x \leq z$} \\
& \leq 2* (y+z)\Arrow{Definition of $\mathrm{OPTR}$} \\
& = \mathrm{OPTR} + \mathrm{OPTR}
\end{DispWithArrows*}
答案2
我提出以下两种可能性之一,基于以下理由alignat
:
\documentclass{scrartcl}
\usepackage{amsthm}
\usepackage{amssymb}
\usepackage{mathtools}
\usepackage{showframe}
\renewcommand{\ShowFrameLinethickness}{0.3pt}
\DeclareFontFamily{U}{mathb}{\hyphenchar\font45}
\DeclareFontShape{U}{mathb}{m}{n}{ <-6> mathab5 <6-7> mathb6 <7-8>
mathb7 <8-9> mathb8 <9-10> mathb9 <10-12> mathb10 <12-> mathb12 }{}
\DeclareSymbolFont{mathb}{U}{mathb}{m}{n}
%
\DeclareMathSymbol{\dlsh}{\mathrel}{mathb}{"EA}
\begin{document}
\begin{alignat*}{2}
\textrm{OPT} & = \textrm{OPTL} + \textrm{OPTR} \\
& = (x+y) + (y+z) & \hspace{4em}& \rlap{\footnotesize Definition of OPTL and OPTR}\\
& \leq 2* (y+z) & & \text{\footnotesize As $ x \le z $}\\
& = \textrm{OPTR} + \textrm{OPTR} & &\rlap{\footnotesize Definition of OPTR}
\end{alignat*}
\begin{alignat*}{2}
\textrm{OPT} & = \textrm{OPTL} + \textrm{OPTR} \\[-1ex]
& &\quad &\dlsh\quad\text{\footnotesize Definition \rlap{of OPTL and OPTR}} \\[-1ex]
& = (x+y) + (y+z) \\[-1ex] %
& & & \dlsh \quad \text{\footnotesize As $ x \le z $} \\[-1ex]
& \leq 2* (y+z) \\[-1ex]
& & & \dlsh\quad\text{\footnotesize Definition \rlap{of OPTR}} \\[-1ex]
& = \textrm{OPTR} + \textrm{OPTR}
\end{alignat*}
\end{document}
答案3
Bernard 答案的一个变体,将其中一个箭头旋转了90 度。此箭头也是 Unicode 格式,因此此代码也amssymb
可以立即使用。unicode-math
\documentclass[varwidth, preview]{standalone}
\usepackage{mathtools}
\usepackage{amssymb} % or unicode-math
\usepackage{graphicx}
\newcommand\arrownext{\rotatebox[origin=c]{-90}{\ensuremath{\curvearrowright}}}
\newcommand\OPTL{\mathop{\mathrm{OPTL}}}
\newcommand\OPTR{\mathop{\mathrm{OPTR}}}
\newcommand\OPT{\mathop{\mathrm{OPT}}}
\begin{document}
\begin{alignat*}{2}
\OPT & = \OPTL + \OPTR \\[-1ex]
& & &\arrownext\quad
\text{\footnotesize Definition of $\OPTL$ and $\OPTR$} \\[-1ex]
& = (x+y) + (y+z) \\[-1ex] %
& & &\arrownext\quad \text{\footnotesize As \(x \le z \)} \\[-1ex]
& \leq 2* (y+z) \\[-1ex]
& & & \arrownext\quad
\text{\footnotesize Definition of $\OPTR$} \\[-1ex]
& = \OPTR + \OPTR
\end{alignat*}
\end{document}