表内のバイトフィールド

表内のバイトフィールド

バイトフィールド環境を表形式に簡単に組み込めないのはなぜだろう。このMWE

\documentclass[border=2mm]{standalone}
\usepackage{bytefield}
\begin{document}
\begin{tabular}{c}
    \begin{bytefield}{2}
         \bitheader{0-1} \\ \bitbox{1}{0} \bitbox{1}{2}
    \end{bytefield}
\end{tabular}
\end{document}

次の pdflatex エラーが発生します:

! Extra }, or forgotten \endgroup.
<template> \unskip \hfil }
                          \hskip \tabcolsep \endtemplate 
l.5 \begin{bytefield}{2}

有効な答えのためこの質問、これはまた、バイトフィールドによって壊されたキーコードの一部であるのではないかと心配しています。しかし、解決策を見つける能力がありません。

編集(追記):

バイトフィールドを中括弧で囲むと、単純な例では役立ちますが、より複雑な使用では問題が発生することに気付きました。バイトフィールドの配置が少し奇妙なので、\raiseboxバイトフィールド番号が前の行と重ならないように、 を使用せざるを得ない気がします。

驚いたことに、これは最初の行でしか機能しません。次の高度な例を考えてみましょう。

\documentclass[border=2mm]{standalone}
\usepackage{bytefield}
\begin{document}
\begin{tabular}{l}\hline
    \raisebox{-1ex}[5ex][1.5ex]{
        {\begin{bytefield}[endianness=big,bitwidth=5em]{1}
        \bitheader{0} \\ \bitbox{1}{uint8}
        \end{bytefield}}}
    \\ \hline
    \raisebox{-1ex}{
        {\begin{bytefield}[endianness=little,bitwidth=5em]{2}
        \bitheader{0,1} \\ \bitbox{1}{MSB} & \bitbox{1}{LSB}
        \end{bytefield}}}
\end{tabular}

エラーが発生する

! Extra alignment tab has been changed to \cr.
<template> \endtemplate 
l.13    \end{bytefield}}}

2 行目\raiseboxを削除すると、1 行目のレイアウトは正しくなりますが、2 行目は正しくありません。 ここに画像の説明を入力してください

答え1

環境を整えるだけでいいのですbytefield:

\documentclass[border=2mm]{standalone}
\usepackage{bytefield}

\begin{document}

\begin{tabular}{c}
  {\begin{bytefield}{2}
   \bitheader{0-1} \\ \bitbox{1}{0} \bitbox{1}{2}
   \end{bytefield}}
\end{tabular}

\end{document}

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

補遺

行末を適切に保護すれば、位置ずれは発生しません。bytefield内部にがある場合\raisebox、 によって既に(暗黙的に)提供されている追加の中括弧は必要ありません\raiseboxが、中括弧があっても害はありません。

\documentclass[border=2mm]{standalone}
\usepackage{bytefield}

\begin{document}
\begin{tabular}{l}\hline
    \raisebox{-1ex}[5ex][1.5ex]{% <---- HERE
        \begin{bytefield}[endianness=big,bitwidth=5em]{1}
        \bitheader{0} \\ \bitbox{1}{uint8}
        \end{bytefield}}
    \\ \hline
    \raisebox{-1ex}[5ex][1.5ex]{% <---- HERE
        \begin{bytefield}[endianness=little,bitwidth=5em]{2}
        \bitheader{0,1} \\ \bitbox{1}{MSB} \bitbox{1}{LSB}
        \end{bytefield}}
\end{tabular}
\end{document}

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

関連情報