테이블 형식 내부의 바이트 필드

테이블 형식 내부의 바이트 필드

바이트 필드 환경을 테이블 형식에 넣는 것이 왜 쉽게 불가능한지 궁금합니다. 이번 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}

여기에 이미지 설명을 입력하세요

부록

라인 끝을 적절하게 보호하면 정렬 오류가 발생하지 않습니다. bytefieldinside 가 있으면 \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}

여기에 이미지 설명을 입력하세요

관련 정보