我希望能够以两个不同的细节层次生成我的文档。
- (
draft
未设定时) :普通版 - (
draft
使用选项时):更详细的版本。一些计算包括额外的步骤,使其更容易理解。额外的线条应该用不同的颜色表示(灰色)。
explain
我为此想出了自己的命令。其参数应仅在draft
设置时显示,并应设置为灰色。
但是在下面的 MEW 中这不起作用。
\documentclass[
% draft,
]{article}
\usepackage{amsmath}
\usepackage{ifdraft}
\usepackage{xcolor}
\newcommand{\explain}[1]{%
\ifdraft{%
\textcolor{gray}{%
#1%
}\ignorespaces%
}{}%
}
\begin{document}
\begin{equation}
\begin{aligned}
{(a + b)}^2
\explain{%
&= (a + b)(a + b)\\
&= a^2 + ab + ba + b^2\\
}
&= a^2 + 2ab + b^2
\end{aligned}
\end{equation}
\end{document}
draft
使用时,示例无法编译。看来我的使用\textcolor
是无效的,因为它跨越了对齐字符&
。
我怎样才能改变我的新命令以使其工作?
泰·弗朗兹
答案1
问题是您无法同时格式化多个单元格(任何由环境分隔&
或\\
位于环境内的内容)。但是,您可以单独设置每个单元格内容的样式。因此,以下情况是可能的:aligned
\documentclass[
draft,
]{article}
\usepackage{amsmath}
\usepackage{ifdraft}
\usepackage{xcolor}
\newcommand{\explain}[1]{%
\ifdraft{#1}{}%
}
\newcommand{\explaincolor}{%
\ifdraft{\color{gray}}{}%
}
\begin{document}
\begin{equation}
\begin{aligned}
{(a + b)}^2
\explain{
& \explaincolor = (a + b)(a + b) \\
& \explaincolor = a^2 + ab + ba + b^2 \\
}
& = a^2 + 2ab + b^2
\end{aligned}
\end{equation}
\end{document}
禁用该draft
选项后,您将获得:
考虑到上述情况,您可以尝试在出现在参数中的每个之后&
和每个之后自动插入相关颜色\\
(除非参数末尾没有任何内容)\explain
(在参数的最开始处另外插入一次以覆盖第一个单元格)。但是,我不确定在某些情况下这是否不会破坏某些东西:
\documentclass[
draft,
]{article}
\usepackage{amsmath}
\usepackage{ifdraft}
\usepackage{xcolor}
\ExplSyntaxOn
\NewDocumentCommand { \insertexplaincolor } { m } {
\tl_set:Nn \l__myexplcol_explcolbody_tl { \explaincolor #1 }
% add \color macro after every occurance of &
\regex_replace_all:nnN { \& } { \& \c{explaincolor} } \l__myexplcol_explcolbody_tl
% add \color macro after every \\
\regex_replace_all:nnN { \c{\\} } { \c{\\} \c{explaincolor} } \l__myexplcol_explcolbody_tl
% remove \color macro after \\ if occuring at the end of the string (ignoring whitespace)
\regex_replace_all:nnN { \c{\\} \c{explaincolor} \s* \z } { \c{\\} } \l__myexplcol_explcolbody_tl
\tl_use:N \l__myexplcol_explcolbody_tl
}
\ExplSyntaxOff
\newcommand{\explaincolor}{\color{gray}}
\newcommand{\explain}[1]{%
\ifdraft{\insertexplaincolor{#1}}{}%
}
\begin{document}
\begin{equation}
\begin{aligned}
{(a + b)}^2
\explain{
& = (a + b)(a + b) \\
& = a^2 + ab + ba + b^2 \\
}
& = a^2 + 2ab + b^2
\end{aligned}
\end{equation}
\end{document}