这是昨天问题的后续问题这里。
我希望能够以两个不同的细节层次生成我的文档。
- (未设置草稿时):普通版
- (使用草稿选项时):更详细的版本。给出了一些额外的解释文字。有些计算包括额外的步骤,以便更容易理解。添加的部分应以不同的颜色显示(灰色)。
@JasperHabicht 如果唯一的添加是aligned
环境中的线条,那么给出了一个很好的解决方案。
现在我希望我的添加更加灵活,即插入文本和方程式。我已经承认我不理解@Jasper Habicht 在旧问题中的解决方案,这就是为什么我无法修改它以使其按我想要的方式工作。
我修改了 MWE 以包含“旧”解决方案:
\documentclass[
draft,
]{article}
\usepackage{amsmath}
\usepackage{ifdraft}
\usepackage{xcolor}
\ExplSyntaxOn
\NewDocumentCommand{\insertexplaincolor} { m } {
\tl_set:Nn \l__myexplcol_explcolbody_tl { #1 }
\regex_replace_all:nnN { \& } { \& \c{explaincolor} } \l__myexplcol_explcolbody_tl
\regex_replace_all:nnN { \c{\\} } { \c{\\} \c{explaincolor} } \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}
It follows
\explain{%
using \(-b\) in the place of \(b\)
}
that
\begin{equation}
{(a - b)}^2 = a^2 - 2ab + b^2.
\end{equation}
\explain{%
There is also the third version
\begin{equation}
(a + b)(a - b) = a^2 - b^2.
\end{equation}
}
\end{document}
根据选项正确插入draft
。但是,颜色仅在第一个内正确aligned
。
再次感谢您的帮助。Franz
答案1
这我的答案中的原始代码执行以下操作:读取作为 参数的所有内容,并在每次出现或后\explain
添加。这样,以下\color{gray}
&
\\
{(a + b)}^2
\explain{
& = (a + b)(a + b) \\
& = a^2 + ab + ba + b^2 \\
}
& = a^2 + 2ab + b^2
将会变成类似
{(a + b)}^2
\explain{ \color{gray}
& \color{gray} = (a + b)(a + b) \\ \color{gray}
& \color{gray} = a^2 + ab + ba + b^2 \\
}
& = a^2 + 2ab + b^2
现在,如果向宏输入\explain
不包含任何&
或的参数\\
,它将不会插入\color
宏,因此文本不会以灰色打印。
幸运的是,将\color
宏放在某个地方不太可能破坏代码。即使没有文本,也不会造成任何损害。因此,我们可以\color{gray}
在宏的参数前面添加另一个\explain
,并在最后重置颜色。为了使它工作,我们需要事先获取默认颜色(存储在.
文档开头)并将其保存为default
我们以后可以访问的颜色。
如果在句子中使用宏,则应在参数末尾放置一个空格。否则该空格不会显示在draft
模式中。
\documentclass[
draft,
]{article}
\usepackage{amsmath}
\usepackage{ifdraft}
\usepackage{xcolor}
\colorlet{explain}{gray} % this is just to make it easier to change the color of the explanations
\AtBeginDocument{\colorlet{default}{.}}
\ExplSyntaxOn
\NewDocumentCommand{\insertexplaincolor} { m } {
\tl_set:Nn \l__myexplcol_explcolbody_tl { \color{explain} #1 \color{default} }
% add \color{explain} after every occurance of &
\regex_replace_all:nnN { \& } { \& \c{color}\{explain\} } \l__myexplcol_explcolbody_tl
% add \color{explain} after every \\
\regex_replace_all:nnN { \c{\\} } { \c{\\} \c{color}\{explain\} } \l__myexplcol_explcolbody_tl
\tl_use:N \l__myexplcol_explcolbody_tl
}
\ExplSyntaxOff
\newcommand{\explain}[1]{%
\ifdraft{\insertexplaincolor{#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}
It follows
\explain{
using \(-b\) in the place of \(b\)
}
that
\begin{equation}
{(a - b)}^2 = a^2 - 2ab + b^2.
\end{equation}
\explain{
There is also the third version
\begin{equation}
(a + b)(a - b) = a^2 - b^2.
\end{equation}
}
\explain{
Even this works
\begin{equation}
\begin{aligned}
{(a + b)}^2
& = (a + b)(a + b) \\
& = a^2 + ab + ba + b^2 \\
& = a^2 + 2ab + b^2
\end{aligned}
\end{equation}
}
Using the macro \explain{inside } a sentence. % <-- space at the end of argument
\end{document}