使用 LaTex 的位串图

使用 LaTex 的位串图

我对制作一些类似示例图片的图表很感兴趣。我不确定是否可以使用 Latex 来完成。有人能给我一些想法吗?谢谢。

示例图片

答案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} 

在此处输入图片描述

相关内容