
문제 공간이 확장됨에 따라 가능성의 확장을 보여주기 위해 선이나 화살표를 추가해야 합니다. 예를 들어 다음과 같은 것을 생성하려고 합니다(손으로 줄을 추가함).
방정식 상단에 화살표를 추가하는 예를 찾을 수 있습니다.수학 분배 속성(곱셈)을 표시하기 위해 방정식 부분 사이에 화살표를 그리는 방법은 무엇입니까?그리고 정렬 블록(아래 표시)을 사용하여 원하는 레이아웃을 생성하는 것으로 시작했으며 링크된 질문에 표시된 대로 화살표가 있는 섹션을 결합하려고 시도하고 있지만 아직 유용한 것을 생성하지 못했습니다.
\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
링크한 답변으로 매크로를 사용하면 다음과 같이 진행할 수 있습니다.
- 매크로 정의:
% 참조로 참조: %정렬 또는 수집 환경에서 tikzpicture 매트릭스 사용 \def\vertalignmath{\the\dimeexpr\fontdimen22\textfont2\relax} \new명령{\tikzmark}1{% \tikz[그림 기억,오버레이,기준선=-\vertalignmath] \node [좌표] (#1){}; }
의 사용은\vertalignmath
올바른 수직 설정을 갖는 것입니다. - 블록 내 매크로 사용법
align
:\begin{정렬*} &&&&\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{정렬*}
마커는 요소 앞과 뒤에 배치됩니다. 고유한 이름을 지정하는 것이 중요합니다. - 연결을 생성하십시오. 다른 매크로가
\connect
정의되었습니다:\new명령{\connect}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}
다음을 생성합니다.