根据家庭作业的要求,我被要求用红色框围住我的答案,因此我导入mathtools
并xcolor
尝试:
\color{red}\Aboxed{\color{black}#1}
方程式是哪里#1
,但它不起作用。所以我决定观察一下的实现mathtools
,我发现它的定义\Aboxed{}
是:
\newcommand\Aboxed[1]{\let\bgroup{\romannumeral-`}\@Aboxed#1&&\ENDDNE}
\def\@Aboxed#1\ENDDNE{%
\ifnum0=`{}\fi \setbox \z@
\hbox{$\displaystyle#1{}\m@th$\kern\fboxsep \kern\fboxrule }%
\edef\@tempa {\kern \wd\z@ &\kern -\the\wd\z@ \fboxsep
\the\fboxsep \fboxrule \the\fboxrule }\@tempa \boxed {#1#2}%
}
我认为我理解了\setbox
的一部分\@tempa
。
我画了一张小图来说明我认为那里发生了什么,\setbox
创建一个宽度为 的框,该框位于等式左侧,可通过 访问\wd\z@
。然后\@tempa
将该字距调整放在左侧,之后是对齐符号,但我不知道右侧的负字距调整。
但是我找不到有关\let\bgroup{\romannumeral-`}
、命令\ENDDNE
或 if 语句的任何信息\ifnum0=`{}\fi
。我问了很多问题,但如果有人能向我解释这一点或给我一个好的起点,我将不胜感激。
答案1
首先,如果您想要彩色版本\Aboxed
,这里有一个快速解决方法:
\documentclass{article}
\usepackage{mathtools}
\usepackage{xcolor}
\makeatletter
\newcommand*\Acolorboxed[2][red]{%
\let\bgroup{\romannumeral-`}%
\@Acolorboxed{#1}#2&&\ENDDNE
}
\def\@Acolorboxed#1#2\ENDDNE{%
\ifnum0=`{}\fi
\setbox\z@\hbox{$\displaystyle#2{}\m@th$\kern\fboxsep \kern\fboxrule}%
\edef\@tempa{\kern\wd\z@ & \kern-\the\wd\z@ \fboxsep\the\fboxsep \fboxrule\the\fboxrule}%
\@tempa
\fcolorbox{#1}{white}{\m@th$\displaystyle#2#3$}%
}
\makeatother
\begin{document}
\begin{align*}
\Aboxed{a&=b} \\
\Acolorboxed{a&=b} \\
\Acolorboxed[green]{a&=b}
\end{align*}
\end{document}
解释\Aboxed
这比较棘手:让我首先通过删除两个括号技巧来“简化”定义(请参阅下文),即让我们假设定义只是
\newcommand\Aboxed[1]{\@Aboxed#1&&\ENDDNE}
\def\@Aboxed#1\ENDDNE{%
\setbox0=\hbox{$\displaystyle#1{}\m@th$\kern\fboxsep \kern\fboxrule}%
\edef\@tempa{\kern\wd0 & \kern-\the\wd0 \fboxsep=\the\fboxsep \fboxrule=\the\fboxrule}%
\@tempa
\boxed {#1#2}%
}
定义
\def\@Aboxed#1\ENDDNE{...}
意味着\@Aboxed
期望分隔参数。第一个之前的所有内容&
都是第一个参数;第一个和第二个之间的所有内容&
都是第二个参数;第二个&
和之间的所有内容\ENDDNE
都是第三个参数。宏\ENDDNE
只是一些虚拟分隔符。但是,这两个&
和这个\ENDDNE
必须在那里:TeX 会一直扫描文件,直到找到它们,如果它们不在那里,你就会遇到麻烦,这就是为什么\Aboxed
把它放在那里。你可以定义
\def\Aboxed#1\MaryPoppins{...}
这不会改变任何事情,当然前提是你相应地使用了
\newcommand\Aboxed[1]{\@Aboxed#1&&\MaryPoppins}
事实上\Aboxed
二 &
它的参数之后是一个安全措施,我推测这在第一个版本中是不存在的mathtools
(见! \@Aboxed 的参数有一个额外的 })。它允许您(滥用)使用它并\Aboxed{a}
在不引发错误的情况下写入 no &
(尽管您应该简单地使用\boxed
它)。
让我们举个例子:TeX 扩展宏,当它发现
\Aboxed{E&=mc^2}
这扩展为
% remember:
% \def\@Aboxed#1\ENDDNE
\@Aboxed E&=mc^2&&\ENDDNE
因此这里E
是第一个参数,=mc^2
是第二个参数,而杂散&
是第三个参数。根据这个定义,\@Aboxed
现在变成
\setbox0=\hbox{$\displaystyle E{}\m@th$\kern\fboxsep \kern\fboxrule}%
\edef\@tempa{\kern\wd0 & \kern-\the\wd0 \fboxsep=\the\fboxsep \fboxrule=\the\fboxrule}%
\@tempa
\boxed {E=mc^2}%
然后,盒子寄存器\box0
包含E
加上的宽度\fbox
和分离。现在的想法是
- 插入宽度等于的不可见水平空间
\box0
, - 转到下一栏,
- 返回的宽度
\box0
, - 打印
\boxed
方程式。
为什么\edef
?单元格的作用类似于组,并且\box0
设置在单元格中。如果我们写
kern\wd0 & \kern-\wd0 \boxed {E=mc^2}
那么负数\kern
就是错误的。确保\edef
扩展\the
,以便我们得到正确的值。(问题:为什么不使用\global\setbox\@ne
?)
支撑技巧,即两位\let\bgroup{\romannumeral-`}
和\ifnum0=`{}\fi
,相当棘手。您可以阅读一些内容,例如大括号技巧展示:}、\egroup、\iffalse{\fi} 等。。我对括号技巧的掌握有限,但我认为这归结为 TeX 在扫描时不会增加/减少主计数器`{
。`}
我猜想它们的存在是出于某种安全原因,但老实说,我的测试没有显示没有它们的任何差异。希望比我更了解 TeX 的人能阐明这一点。
答案2
\colorboxed
我建议根据来自的\fcolorbox
命令定义一个命令,该命令xcolor
具有两个强制参数(线条颜色和框的内容)和一个用于背景颜色的可选参数(默认为白色),并使用来修补该\Aboxed
命令xpatch
:
\documentclass{article}
\usepackage[svgnames]{xcolor}
\usepackage{mathtools}
\usepackage{xpatch}
\makeatletter
\newcommand{\colorboxed}[3][white]{\fcolorbox{#2}{#1}{\m@th$\displaystyle#3$}}
\xpatchcmd{\@Aboxed}{\boxed}{\colorboxed[LavenderBlush!40]{IndianRed}}{}{}
\makeatother
\begin{document}
\begin{align}
x & = \frac{-b\pm\sqrt{b^2-4ac}}{2a}\\
\Aboxed{x & = \frac{-b'\pm\sqrt{b'^2-ac}}{a}}
\end{align}
\end{document}