TikZ
노드 상자 크기를 지정한 제어 이론 흐름 시트를 작성 중입니다 . 이러한 흐름 시트를 많이 만들고 있기 때문에 box
현재 사용 중인 스타일 과 같은 전역 스타일을 설정했습니다 .
box/.style={rectangle, draw, minimum width = 8ex,
minimum height = 4ex, inner sep = 1ex}
노드의 텍스트 양은 다양합니다. 문제는 노드 텍스트가 다음보다 더 많은 공간을 요구하는 경우입니다.minimum
해당 그림의 나머지 노드는 가장 큰 노드와 동일한 크기를 유지해야 한다는 것입니다. 어떻게 해야 하나요? 의 솔루션이 질문제 생각에는 너무 "수동적"이므로 자동화가 필요하기 때문에 피하고 싶습니다.
MWE:
\documentclass[12pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\tikzset{
box/.style={rectangle, draw, minimum width = 8ex,
minimum height = 4ex, inner sep = 0},
split/.style={circle, draw, minimum size = 2.5pt, fill=black,
inner sep = 0},
}
\begin{document}
\begin{tikzpicture}[
every path/.style={>={stealth}, ->, draw, node distance = 1pt, inner sep = 0pt},
]
\node[split] (split) {};
\node[box] (I) at ($(split) + (4,0)$) {Short};
\node[box] (P) at ($(I)+(0,1)$) {This node has long node text};
\node[box] (D) at ($(I)+(0,-1)$) {Short};
\draw (split.north) |-(P);
\draw (split.east) -- (I) ;
\draw (split.south) |-(D);
\end{tikzpicture}
\end{document}
답변1
이 답변자체 TikZ 라이브러리로 변환되었습니다.ext.node-families
내 일부로tikz-ext
엔션스 패키지.
제 생각에는 이것이 거의 자동으로 이루어지는 것 같습니다. 그것은.aux
그림이 외부화되면 작동하지 않습니다.external
도서관.
네임스페이스에 모두 있는 다음 키를 사용하여 동일한 차원을 갖는 노드 계열을 지정합니다 /tikz/node family
.
유형: 텍스트 상자.
노드를 구성하기 전에 노드의 텍스트( )가 포함된 텍스트 상자의 크기를
\pgfnodeparttextbox
측정하고 비교합니다. 가장 큰 값이 사용됩니다.text height=<name>
: 동일한 노드는 동일한 텍스트 높이를 갖습니다.<name>
text depth=<name>
: 동일한 노드는 동일한 텍스트 깊이를 갖습니다.<name>
text width=<name>
: 동일한 노드는 동일한 텍스트 너비를 갖습니다.<name>
text width align = left|center|right
:텍스트 상자의 너비를 설정하면 상자가 오른쪽으로만 확장됩니다. 상자의 내용을 다시 정렬해야 합니다. 키
text width align
(기본값center
)는 해당 작업이 올바르게 수행되었는지 확인합니다.text=<name>
모두text height
및text depth
를text width
동일하게 설정합니다 .<name>
rectangle
기본적으로 이는 기본 모양 및 에 대해서만 설정됩니다circle
. 다른 모양이 선언된 후(일반적으로 라이브러리 중 하나를 로드하여shapes.*
) 다음을 사용하여 동일한 방식으로 설정할 수 있습니다.\tikzset{node family/setup shape=<shape name>}
이 작업은 모양당 한 번만 수행해야 합니다.
이는 텍스트 상자의 크기만 변경하므로 동일한 패밀리에 있는 다양한 모양의 경우 크기가 텍스트 상자의 크기에 따라 다르게 계산되므로 모양의 너비나 높이가 달라질 수 있습니다. 다음 예를 고려하십시오.
\tikz[nodes=draw, node family/text width=test] \node {Foo} node[circle] {Barbarbar};
결과는 다음과 같습니다.
유형: 최소 높이 및 최소 너비.
텍스트 상자 측정과 달리 이는 도형 선언 자체에 의해 계산된 도형의 높이와 너비를 사용합니다. 이 계산은 모양의 선언 내부 깊은 곳에서 수행되므로 새로운 모양 선언이 필요합니다:
Circle
및Rectangle
.width=<name>
: 동일한 노드는 동일한 너비를 갖습니다.<name>
height=<name>
: 동일한 노드는 동일한 높이를 갖습니다.<name>
/pgf/minimum width
및 와 마찬가지로 이는 및 선 너비 자체/pgf/minimum height
의 값을 무시합니다 ./pgf/outer xsep
/pgf/outer ysep
빈 값으로 설정하면 이 라이브러리의 작업이 비활성화됩니다.<name>
내부적으로는 ( )를 .aux
사용하는 그림의 끝 부분에 파일 쓰기가 발생합니다 .\tikz@atend@picture
execute at end picture
키는 모든 노드 제품군에 대해 prefix
지정합니다 . prefix
기본적으로 이는 \pgfpictureid-
노드 패밀리가 TikZpictures에만 개별적으로 적용되도록 합니다.
아래 예에서는 모든 가족의 이름이 지정되어 있지만 test
모두 다릅니다.
positioning
또한 효과를 더욱 눈에 띄게 만드는 라이브러리를 사용했습니다 .
코드는 파일에 의해 정의된 7개의 추가 매크로가 아래 예와 같이 여전히 약간 최적화될 수 있습니다 .aux
. 한 계열의 모든 값을 하나의 매크로에 저장하는 것이 더 나을까요?
암호
\documentclass[12pt,tikz]{standalone}
\usetikzlibrary{
positioning, % better positioning (right=of …)
ext.node-families, % node families
arrows.meta % arrow tips
}
\begin{document}
\begin{tikzpicture}[
node distance=.3cm and 1cm,
box/.style={
rectangle, draw, minimum width=+8ex, minimum height=+4ex, inner sep=+0pt,
node family/text width=test},
split/.style={
circle, draw, minimum size=+2.5pt, fill=black, inner sep=+0pt}]
\node[split] (split) {};
\node[box, right=of split] (I) {Short};
\node[box, above=of I] (P) {This node has long node text};
\node[box, below=of I] (D) {Short};
\draw[-Stealth] (split.north) |-(P);
\draw[-Stealth] (split.east) -- (I) ;
\draw[-Stealth] (split.south) |-(D);
\end{tikzpicture}
\tikz % only the same height (text is still centered)
\foreach \cnt[count=\Cnt] in {a,...,h}
\node[draw, Circle, node family/height=test] at (right:\Cnt) {\cnt};
\tikz % height and text height (text depth set to zero)
\foreach \cnt[count=\Cnt] in {a,...,h}
\node[draw, Circle, text depth=+0pt,
node family={height=test, text height=test}]
at (right:\Cnt) {\cnt};
\begin{tikzpicture}[% http://tex.stackexchange.com/q/134983
nodes={circle, draw=black, node family/text=test}]
\node (A) {$n$};
\node[right=0pt of A] (B) {$n+1$};
\end{tikzpicture}
\end{document}
산출
첫 번째 편집
두 번째 편집
출력(예)