多条对齐方程的颜色变化

多条对齐方程的颜色变化

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

  1. (draft未设定时) :普通版
  2. 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}

相关内容