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