使用 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 的函式庫來進行定位。它由 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} 

在此輸入影像描述

相關內容