答案1
作為您學習的起點(如果您選擇 TikZ 套件作為基本工具)可以提供以下 MWE:
\documentclass[tikz, border=3mm]{standalone}
\usetikzlibrary{chains,decorations.pathreplacing}
\begin{document}
\begin{tikzpicture}[
node distance=0pt,
start chain = A going right,
X/.style = {rectangle, draw,% styles of nodes in string (chain)
minimum width=2ex, minimum height=3ex,
outer sep=0pt, on chain},
B/.style = {decorate,
decoration={brace, amplitude=5pt,
pre=moveto,pre length=1pt,post=moveto,post length=1pt,
raise=1mm,
#1}, % for mirroring of brace, if necessary
thick},
B/.default=mirror, % by default braces are mirrored
]
\foreach \i in {0,1,1,0,0,0,1,0,0,
0,1,0,1,0,0,0,1,0,
0,0,1,1,0,0,1,0,0}% <-- content of nodes
\node[X] {\i};
\draw[B] ( A-1.south west) -- node[below=2mm] {Channel 1 Links} ( A-9.south east);
\draw[B] (A-10.south west) -- node[below=2mm] {Channel 2 Links} (A-18.south east);
\draw[B] (A-19.south west) -- node[below=2mm] {Channel 3 Links} (A-27.south east);
\node (B1) [inner sep=1pt,above=of A-10.north west] {$\times$};
\node (B2) [inner sep=1pt,above=of A-19.north west] {$\times$};
\draw[B=](B1.north) -- node[above=2mm] {Crossover Points}(B2.north);
\end{tikzpicture}
\end{document}
這使:
程式碼簡短說明: 上面的程式碼(非常)簡潔,因此了解一些 TikZ 套件的經驗是必要的。在設計中我考慮了以下幾點:
圖片結構簡單。它有27個形狀相同的節點,形成一條鏈。因此,
chains
使用 TikZ 的函式庫來進行定位。它由 option 定義start chain = A going right
,其中 A 是鏈名稱。因此,鏈中的節點被命名為 A-1、A-2、...、A-27。鏈中節點之間的距離由 決定
node distance
。它的預設值為 15 mm,因此將其設為零,因此節點僅透過形狀參數node distance=0pt
來分隔。outer sep
邊界線正確重疊,該距離也設為零(在節點樣式的定義中,它被命名為 X)在 TikZ 中,
foreach
循環旨在執行重複任務。這樣的任務就是在鏈中設定節點。和\forach \i in {...}\node[X] {\i};
形成一個節點鏈(樣式為 X),其內容由花括號中的清單決定。由於它們的位置是由鏈決定的,所以循環實際上只決定它們的數量和內容。
節點下方和上方的大括號是使用
decorations.pathreplacing
庫繪製的。在其參數定義中,參數mirror
被選為自由參數,可以稍後確定。由於四個大括號中的三個是鏡像的,因此這被設定為預設值,並且“本地”確定異常。大括號的設計使得它們
1pt
每側都比座標之間的距離短,並且raise=1mm
從給定座標向下移動(當鏡像時)或向上移動(當不鏡像時)。「通道 2 連結」的開始和結束上方的十字是以「經典方式」設定的,
above=of <coordinate name>
因為它使用數學符號進行乘法。
這裡使用的 TikZ 原理更深入的描述在 TikZ 手冊:
- 對於鏈條:第 46 章鏈條,第 541 頁
- for
\foreach
迴圈:第 83 章重複事物:Foreach 語句,第 901 頁 - 對於大括號:第 48.3 小節“路徑替換裝飾”,第 581 頁
答案2
簡短的程式碼pstricks
:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{mathtools}
\usepackage{pstricks-add, multido}
\usepackage{auto-pst-pdf}
\begin{document}
\sffamily
\begin{pspicture}
\psset{dimen=middle, linewidth=0.6pt, braceWidthOuter=4pt, braceWidthInner=4pt, braceWidth=0.8pt, labelsep =-2ex}
\multido{\i = 0 + 1, \n=0+0.5}{27}{\fnode[framesize=0.5](\n, 0){A\i}}%
\rmultiput{$0$}(A0)(A3)(A4)(A5)(A7)(A8)(A9)(A11)(A13)(A14)(A15)(A17)(A18)(A19)(A22)(A23)(A25)(A26)
\rmultiput{$1$}(A1)(A2)(A6)(A10)(A12)(A16)(A20)(A21)(A24)
\psset{rot=90, nodesepB=2ex}
\multido{\ia=0 + 9, \ib=8 + 9}{3}{\pnode[-0.15, -0.35](A\ia){B\ia}\pnode[0.15, -0.35](A\ib){B\ib}\psbrace(B\ia)(B\ib){\clap{Channel\,1 Links}}}
\multido{\i=8 + 9}{2}{\pnode[0.25,0.6](A\i){C\i}\uput{1pt}[d](C\i){$\times$}}
\psbrace[rot=-90, nodesepB=-0.5ex](C17)(C8){\clap{Crossover Points}}
\end{pspicture}
\end{document}