用直線或箭頭連接方程式的各個部分

用直線或箭頭連接方程式的各個部分

我需要添加線條或箭頭來顯示隨著問題空間的擴展可能性的擴展。例如,我正在嘗試產生類似的內容(手動新增行):

方程線範例

我可以找到在方程式頂部添加箭頭的範例如何在方程式各部分之間繪製箭頭以顯示數學分配律(乘法)?我已經開始使用對齊塊創建我想要的佈局(如下所示),並且我嘗試用箭頭連接各部分,如鏈接問題所示,但我還沒有產生任何有用的東西。

\begin{align*}
&&&&(1, 1, 0, 0)&\\
&&(1, 0, 0, 0)&&(1,0,1,0)&\\
0&&(0, 1, 0, 0)&&(1,0,0,1)&\\
&&(0, 0, 1, 0)&&&\\
&&(0, 0, 0, 1)&&&
\end{align*}   

這感覺有點粗糙,任何人都可以幫助我完成我開始的工作或建議一種更優雅的方式(也許使用表格來存儲選項,然後鏈接單元格)?

答案1

實現結果的簡單方法是使用 TikZ 樹構造:

\documentclass{article}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}[grow=right, sibling distance=20pt,level distance=2.65cm,
edge from parent path={(\tikzparentnode.east) -- (\tikzchildnode.west)}]
\node {0}
child {node {(0, 0, 0, 1)}}
child {node {(0, 0, 1, 0)}}
child {node {(0, 1, 0, 0)}}
child {node {(1, 0, 0, 0)}
child {node {(1, 0, 0, 1)}}
child {node {(1, 0, 1, 0)}}
child {node {(1, 1, 0, 0)}}
};
\end{tikzpicture}
\end{document}

給出:

在此輸入影像描述

在哪裡:

  • grow=right意味著樹朝著正確的方向生長;
  • sibling distance=20pt意味著孩子之間的距離是20pt(改變這點來增加或減少這個距離);
  • level distance=2.65cm代表不同級別的距離;
  • edge from parent path={(\tikzparentnode.east) -- (\tikzchildnode.west)}重新定義從父節點到子節點的路徑(為直線);如果不使用這種構造,則路徑並不完美,因為某些連接並不指向節點的左側,而是指向節點的中心。

若要與最終箭頭連接,您只需變更:

edge from parent path={(\tikzparentnode.east) -- (\tikzchildnode.west)}

和:

edge from parent path={[-stealth](\tikzparentnode.east) -- (\tikzchildnode.west)}

透過使用\tikzmark巨集作為您連結的答案,可以如下進行:

  1. 巨集定義:
    % 參見參考:
    %在對齊或收集環境中使用 tikzpicture 矩陣
    \def\vertalignmath{\the\dimexpr\fontdimen22\textfont2\relax}
    \newcommand{\tikzmark}1{%
    \tikz[記住圖片,覆蓋,基線=-\vertalignmath] \node [座標] (#1){};
    }
    
    使用\vertalignmath是為了有正確的垂直設定;
  2. 區塊內宏的用法align
    \開始{對齊*}
    &&&&\tikzmark{d1}(1, 1, 0, 0)&\&&\tikzmark{b1}(1, 0, 0, 0)\tikzmark{c}&&\tikzmark{d2}(1,0,1, 0)&\0\tikzmark{a}&&\tikzmark{b2}(0, 1, 0, 0)&&\tikzmark{d3}(1,0,0,1)&\&&\tikzmark{b3}(0 , 0, 1, 0)&&&\&&\tikzmark{b4}(0, 0, 0, 1)&&&
    \結束{對齊*}
    
    標記放置在元素之前和之後:給出唯一的名稱很重要;
  3. 建立連接;另一個宏\connect定義了
    \newcommand{\連接}1{%
    \tikz[記住圖片,覆蓋,基線=-\vertalignmath]{
    \foreach \start/\end in {#1}{
      \drawshorten <=2pt,shorten >=2pt--(\end);
    }
    }
    }
    
    然後使用:
    \連接{a/b1,a/b2,a/b3,a/b4,
    c/d1,c/d2,c/d3}
    
    以正確的方式連接標記。

完整程式碼:

\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}

% see as reference:
% https://tex.stackexchange.com/questions/59658/use-of-tikzpicture-matrix-in-align-or-gather-environment#comment126261_59660
\def\vertalignmath{\the\dimexpr\fontdimen22\textfont2\relax}
\newcommand{\tikzmark}[1]{%
  \tikz[remember picture,overlay,baseline=-\vertalignmath]\node[coordinate](#1){};
}

\newcommand{\connect}[1]{%
  \tikz[remember picture,overlay,baseline=-\vertalignmath]{
    \foreach \start/\end in {#1}{
      \draw[shorten <=2pt,shorten >=2pt](\start)--(\end);
    }
  }
}

\begin{document}
\begin{align*}
&&&&\tikzmark{d1}(1, 1, 0, 0)&\\
&&\tikzmark{b1}(1, 0, 0, 0)\tikzmark{c}&&\tikzmark{d2}(1,0,1,0)&\\
0\tikzmark{a}&&\tikzmark{b2}(0, 1, 0, 0)&&\tikzmark{d3}(1,0,0,1)&\\
&&\tikzmark{b3}(0, 0, 1, 0)&&&\\
&&\tikzmark{b4}(0, 0, 0, 1)&&&
\end{align*}
\connect{a/b1,a/b2,a/b3,a/b4,
c/d1,c/d2,c/d3} 
\end{document}

至少運行兩次編譯後的結果是:

在此輸入影像描述

為了有箭頭,\connect巨集可以改為:

\newcommand{\connect}[2][-]{%
  \tikz[remember picture,overlay,baseline=-\vertalignmath]{
    \foreach \start/\end in {#2}{
      \draw[#1,shorten <=2pt,shorten >=2pt](\start)--(\end);
    }
  }
}

然後使用:

\connect[-stealth]{a/b1,a/b2,a/b3,a/b4,
c/d1,c/d2,c/d3} 

將生成:

在此輸入影像描述

相關內容