байтовое поле внутри табличного

байтовое поле внутри табличного

Интересно, почему не так просто поместить окружение байтового поля в табличное. Это 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}}}

Если удалить вторую \raisebox, то расположение первой строки будет правильным, а второй — нет: введите описание изображения здесь

решение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}

введите описание изображения здесь

Связанный контент