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 mm なので、node distance=0ptこれをゼロに設定すると、ノードはouter sepシェイプのパラメータによってのみ分離されます。境界線が適切に重なり合うように、この距離もゼロに設定されます (ノードのスタイルの定義では、X と呼ばれます)

  • TikZでは、foreachループは繰り返しタスクを実行することを目的としています。このようなタスクは、チェーン内のノードを設定することです。

    \forach \i in {...}\node[X] {\i};

    ノードのチェーン (スタイル X) が形成され、その内容は中括弧内のリストによって決定されます。ノードの位置はチェーンによって決定されるため、ループは実際にはノードの数と内容のみを決定します。

  • ノードの下と上の括弧は、ライブラリを使用して描画されます decorations.pathreplacing。その定義では、パラメータ間でパラメータmirrorがフリーパラメータとして選択され、後で決定できます。4 つの括弧のうち 3 つはミラーリングされているため、これがデフォルトとして設定され、例外は「ローカル」で決定されます。

  • 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} 

ここに画像の説明を入力してください

関連情報