用线连接方程各部分

用线连接方程各部分

例如,在写出表达式时收集术语时,通过在术语之间画线来指示哪些术语相似通常很有用。例如

\documentclass{article}
\begin{document}
\[(a+b)(a+b)-(a+b)(a-b)=aa+ab+ba+bb-(aa-ab+ba-bb)=2ab+2bb.\]
\end{document}

在此处输入图片描述

使用以下几行代码会更容易阅读:

在此处输入图片描述

有没有办法在 LaTeX 中做到这一点(唯一想到的就是编辑\underbrace和的形状\overbrace,但这似乎不是最佳做法)?

答案1

您可以使用tikzmark来自 TikZ 的库(编译两次以便线条到达其最终位置):

在此处输入图片描述

代码:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{tikzmark}

\newcommand\JoinUp[4][10pt]{
\draw
  ([shift={#2}]pic cs:start#4) -- ++(0pt,#1) -| ([shift={(#3)}]pic cs:end#4);
}
\newcommand\JoinDown[4][10pt]{
\draw
  ([shift={#2}]pic cs:start#4) -- ++(0pt,-#1) -| ([shift={(#3)}]pic cs:end#4);
}

\begin{document}

\[
(a+b)(a+b)-(a+b)(a-b)=
\tikzmark{starta}aa+\tikzmark{startc}ab+\tikzmark{endc}ba+
\tikzmark{startd}bb-(\tikzmark{enda}aa-\tikzmark{startb}ab+
\tikzmark{endb}ba-\tikzmark{endd}bb)=2ab+2bb.
\]

\begin{tikzpicture}[remember picture,overlay,line width=1.5pt]
\JoinUp{(6pt,10pt)}{(6pt,10pt)}{a}
\JoinUp{(5pt,10pt)}{(5pt,10pt)}{b}
\JoinDown{(5pt,-2pt)}{(5pt,-2pt)}{c}
\JoinDown{(5pt,-2pt)}{(5pt,-2pt)}{d}
\end{tikzpicture}

\end{document}

答案2

一个小补充贡萨洛的回答。

为了减少打字量,并使整个内容与文档的字体大小相匹配,我认为最好将答案合并到获取当前字体大小作为长度并使每个尺寸相应缩放:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{tikzmark}

\newlength{\mytextsize}
\makeatletter
      \setlength{\mytextsize}{\f@size pt}
\makeatother

\newcommand{\JoinUp}[5]{\begin{tikzpicture}[remember picture,overlay,line width=0.05\mytextsize]
    \draw([shift={(#1\mytextsize,#2\mytextsize)}]pic cs:start#5) -- ++(0pt,0.7\mytextsize) -| ([shift={(#3\mytextsize,#4\mytextsize)}]pic cs:end#5);
    \end{tikzpicture}}
\newcommand{\JoinDown}[5]{\begin{tikzpicture}[remember picture,overlay,line width=0.05\mytextsize]
    \draw([shift={(#1\mytextsize,#2\mytextsize)}]pic cs:start#5) -- ++(0pt,-0.7\mytextsize) -| ([shift={(#3\mytextsize,#4\mytextsize)}]pic cs:end#5);
    \end{tikzpicture}}

\begin{document}
\[(a+b)(a+b)-(a+b)(a-b)=\tikzmark{starta}aa+\tikzmark{startc}ab+\tikzmark{endc}ba+\tikzmark{startd}bb-(\tikzmark{enda}aa-\tikzmark{startb}ab+\tikzmark{endb}ba-\tikzmark{endd}bb)=2ab+2bb.\]
\JoinUp{0.5}{1}{0.5}{1}{a}
\JoinUp{0.5}{1}{0.5}{1}{b}
\JoinDown{0.5}{-0.4}{0.5}{-0.4}{c}
\JoinDown{0.5}{-0.4}{0.5}{-0.4}{d}
\end{document}

输出

这稍微改变了\JoinUp\JoinDown命令,因为位移现在是根据字体大小给出的。

笔记:\mytextsize由于长度是在前言中定义的,因此这不会随着本地字体大小而缩放。

相关内容