使用 657851 的“解释”命令来解释文本和方程式

使用 657851 的“解释”命令来解释文本和方程式

这是昨天问题的后续问题这里

我希望能够以两个不同的细节层次生成我的文档。

  1. (未设置草稿时):普通版
  2. (使用草稿选项时):更详细的版本。给出了一些额外的解释文字。有些计算包括额外的步骤,以便更容易理解。添加的部分应以不同的颜色显示(灰色)。

@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}

在此处输入图片描述

相关内容