
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 \raisebox
para 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 \raisebox
for removida, o layout da primeira linha estará correto, a segunda não:
Responder1
Você só precisa preparar o bytefield
ambiente:
\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}
Termo aditivo
Não há desalinhamento se você proteger adequadamente o fim de linha; se você tiver bytefield
inside \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}