bytefield dentro da tabela

bytefield dentro da tabela

Eu me pergunto por que não é facilmente possível colocar um ambiente de campo de bytes em uma tabela. Este 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}

produz este erro pdflatex:

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

Por causa da resposta válida paraessa questão, temo que sejam novamente alguns códigos-chave que foram alterados pelo bytefield. Mas não tenho a capacidade de encontrar a solução.

Editar (adendo):

Embora colocar o campo de bytes entre colchetes ajude no exemplo simples, percebi que o problema surge com um uso mais complicado. Como o alinhamento do campo de bytes é um pouco estranho, sinto-me forçado a usar \raiseboxpara que os números do campo de bytes não se sobreponham mais à linha anterior.

Estranhamente, isso funciona apenas com a primeira linha. Considere este exemplo avançado:

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

que produz o erro

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

Se a segunda \raiseboxfor removida, o layout da primeira linha estará correto, a segunda não: insira a descrição da imagem aqui

Responder1

Você só precisa preparar o bytefieldambiente:

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

insira a descrição da imagem aqui

Termo aditivo

Não há desalinhamento se você proteger adequadamente o fim de linha; se você tiver bytefieldinside \raisebox, não há necessidade de chaves adicionais, já fornecidas por \raisebox(implicitamente), mas elas não causam danos.

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

insira a descrição da imagem aqui

informação relacionada