我想知道为什么不能轻易地将字节域环境放入表格中。这个 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}
由于这个问题,我担心又是一些关键代码被bytefield弄乱了。但我缺乏找到解决方案的能力。
编辑(附录):
虽然用括号括住字节字段有助于简化示例,但我注意到,使用更复杂时会出现问题。由于字节字段的对齐有点奇怪,我感觉不得不使用,\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}}}
答案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}