答案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 中的库来定位它们。它由选项定义start chain = A going right
,其中 A 是链名。因此,链中的节点被命名为 A-1、A-2、...、A-27。链中节点之间的距离由 决定
node distance
。其默认值为 15 毫米,因此将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}