在方程式或数学环境中突出显示某一列

在方程式或数学环境中突出显示某一列

在解释两个负数的乘积时,我想突出显示的垂直部分,以强调要乘以的因数:

\documentclass[letterpaper]{article}
\usepackage{fullpage}
\usepackage{amsmath,amssymb,amsthm,enumitem}
\newcommand{\red}[1]{%
{\color{OrangeRed}#1}}
\begin{document}
    \begin{equation*}
    \left.\begin{array}{cc}
      -2\cdot \red{2}=& -4 \\
      -2\cdot \red{1}=& -2 \\
      -2\cdot \red{0}=& 0
    \end{array}\right\} \text{\small Product increases by 2 each time.}
    \end{equation*}
\end{document}

得出: 在此处输入图片描述

因此我选择使用颜色,但我还想实现如下效果: 在此处输入图片描述

我对黄色红色边框不感兴趣。我所寻找的是一个箭头指向红色数字,周围有垂直边框,如图所示,并且可以添加一个节点,节点中的文本格式与“产品”一词对齐。

编辑

我可以用这种方法来实现这个目的吗: 在此处输入图片描述

答案1

为了完成这个任务,你可以使用tikzmark宏。此解决方案允许获得:

在此处输入图片描述

代码:

\documentclass[letterpaper]{article}
\usepackage{fullpage}
\usepackage{amsmath,amssymb,amsthm,enumitem}
\usepackage{xcolor}
\newcommand{\red}[1]{%
{\color{red}#1}}

\usepackage{tikz}

% to change colors
\newcommand{\fillcol}{white}
\newcommand{\bordercol}{red}

%% code by Andrew Stacey 
% https://tex.stackexchange.com/questions/51582/background-coloring-with-overlay-specification-in-algorithm2e-beamer-package#51582

\makeatletter
\tikzset{%
     remember picture with id/.style={%
       remember picture,
       overlay,
       draw=\bordercol,
       save picture id=#1,
     },
     save picture id/.code={%
       \edef\pgf@temp{#1}%
       \immediate\write\pgfutil@auxout{%
         \noexpand\savepointas{\pgf@temp}{\pgfpictureid}}%
     },
     if picture id/.code args={#1#2#3}{%
       \@ifundefined{save@pt@#1}{%
         \pgfkeysalso{#3}%
       }{
         \pgfkeysalso{#2}%
       }
     }
   }

   \def\savepointas#1#2{%
  \expandafter\gdef\csname save@pt@#1\endcsname{#2}%
}

\def\tmk@labeldef#1,#2\@nil{%
  \def\tmk@label{#1}%
  \def\tmk@def{#2}%
}

\tikzdeclarecoordinatesystem{pic}{%
  \pgfutil@in@,{#1}%
  \ifpgfutil@in@%
    \tmk@labeldef#1\@nil
  \else
    \tmk@labeldef#1,(0pt,0pt)\@nil
  \fi
  \@ifundefined{save@pt@\tmk@label}{%
    \tikz@scan@one@point\pgfutil@firstofone\tmk@def
  }{%
  \pgfsys@getposition{\csname save@pt@\tmk@label\endcsname}\save@orig@pic%
  \pgfsys@getposition{\pgfpictureid}\save@this@pic%
  \pgf@process{\pgfpointorigin\save@this@pic}%
  \pgf@xa=\pgf@x
  \pgf@ya=\pgf@y
  \pgf@process{\pgfpointorigin\save@orig@pic}%
  \advance\pgf@x by -\pgf@xa
  \advance\pgf@y by -\pgf@ya
  }%
}
\makeatother

\newcommand{\tikzmarkin}[1]{%
      \tikz[remember picture with id=#1]
      \draw[line width=1pt,rectangle,rounded corners,fill=\fillcol]
      (pic cs:#1) ++(0.065,-0.15) rectangle (-0.05,0.32)
      ;}

\newcommand\tikzmarkend[2][]{%
\tikz[remember picture with id=#2] #1;}


\begin{document}
    \begin{equation*}
    \left.\begin{array}{cc}
      -2\cdot \tikzmarkin{a}\red{2}=& -4 \\
      -2\cdot \red{1}=& -2 \\
      -2\cdot \red{0}\tikzmarkend{a}=& 0
    \end{array}\right\} \text{\small Product increases by 2 each time.}
    \end{equation*}
\end{document}

注意需要编译两次。

解释

里面tikzset有要绘制的图片的样式的定义(remember picture with id)然后是定义和上的写法.aux ),然后是标记的 id 和位置的https://tex.stackexchange.com/a/50054/13304。最后,您需要在文档中使用\tikzmarkin\tikzmarkend定义的命令。

编辑:插入注释

为了达到这个目的,我采用了同样的技巧标记伪代码块并在其附近插入注释:在宏中插入一个锚点\tikzmarkin,随后将其用作插入注释的参考。以前的 MWE 有什么变化?

你应该在序言中添加:

\usetikzlibrary{calc} % <= needed for some computations

\usepackage{lipsum} % <= needed to insert some text later

\tikzmarkin改进如下:

\newcommand{\tikzmarkin}[1]{%
      \tikz[remember picture with id=#1]
      \draw[line width=1pt,rectangle,rounded corners,fill=\fillcol]
      (pic cs:#1) ++(0.065,-0.15) rectangle (-0.05,0.32) node [anchor=base] (#1){}
      ;}

其中相关的新部分就是node [anchor=base] (#1){}

最后,document

\begin{document}
    \begin{equation*}
    \left.\begin{array}{cc}
      -2\cdot \tikzmarkin{a}\red{2}=& -4 \\
      -2\cdot \red{1}=& -2 \\
      -2\cdot \red{0}\tikzmarkend{a}=& 0
    \end{array}\right\} \text{\small Product increases by 2 each time.}
    \end{equation*}

    % To insert the annotation
    \begin{tikzpicture}[remember picture,overlay]
        \coordinate (aa) at ($(a)+(1.825,-1.65)$); % <= adjust this parameter to move the position of the annotation 
        \node[align=left,right] at (aa) {\small{Annotation}};
        \path[-latex,red,draw] (aa) -| ($(a)+(0.15,-1.3)$);
    \end{tikzpicture}
    \linebreak

    \lipsum[1]

\end{document}

最后一部分是插入注释所需的部分:首先,我根据之前保存的锚点定义了插入注释的坐标(为了实现这一点,重要的是具有tikzpicture选项remember picture,overlay)。最后一条命令:

\path[-latex,red,draw] (aa) -| ($(a)+(0.15,-1.3)$);

绘制箭头:起点是注释的坐标,终点应根据参考锚点a位于红色矩形的左上角来计算。

这将导致:

在此处输入图片描述

最后一点:我认为最好在\linebreak后面插入一个,tikzpicture以避免注释放置得离后续文本太近。

相关内容