我正在编写一个宏来排版定理的证明。通过删除与这个问题无关的内容,它可以简化为
\def\demo#1\enddemo{\noindent{\it Proof.\quad}#1\quad\copy\cvdbox\medskip}
其中cvdbox
是包含证明结束符号的框。例如,设它是:
\newbox\cvdbox
\setbox\cvdbox=\hbox{\bf CVD}
宏按预期完成其工作,但当证明以显示的公式结尾时除外,该公式位于两个美元符号之间。事实上,\cvdbox
单独放置在新行上,而不是放置在最后一行的右侧。我希望,当证明以显示的公式结尾时, 设置\cvdbox
在显示的末尾,就在结束的两个美元符号之前。例如,我希望
\demo
...
$$\int_a^bf.$$
\enddemo
转化为
\noindent{\it Proof.\quad}... $$\int_a^bf.\quad\copy\cvdbox$$\medskip}
代替
\noindent{\it Proof.\quad}... $$\int_a^bf.$$\quad\copy\cvdbox\medskip}
我能怎么做?
答案1
如果您不需要将 QED 标记放在显示行中的公式后面,而是放在此行的右对齐位置,那么您可以使用以下命令:
\input plipsum
\def\demo{\par\noindent{\it Proof.\quad}}
\def\enddemo{\ifdim\lastskip=0pt % after display
\par \dimen0=\lastskip \removelastskip
\advance\dimen0 by\prevdepth \kern-\prevdepth
\nointerlineskip \vbox to0pt{\vss\line{\hss\bf QED}}
\vskip\dimen0
\else \unskip \quad\hbox{\bf QED}\fi
\medskip
}
\demo
\lipsum{1}
$$
\int_a^bf.
$$
\enddemo
\demo
\nopar\lipsum{1}
\enddemo
\end
答案2
我认为你想定义一个\qedhere
宏来使用
\input plipsum
\long\def\demo#1\enddemo{%
\global\qedtrue
\noindent{\it Proof.\quad}%
#1%
\ifqed\quad\copy\cvdbox\fi
\medskip
}
\newif\ifqed
\def\qedhere{\global\qedfalse\rlap{\quad\copy\cvdbox}}
\newbox\cvdbox
\setbox\cvdbox=\hbox{\bf CVD}
\demo
\lipsum{1}
$$
\int_a^bf.\qedhere
$$
\enddemo
\demo
\nopar\lipsum{1}
\enddemo
\bye