循环仅执行字节场环境中的第一次迭代

循环仅执行字节场环境中的第一次迭代

我遇到过一种情况,我需要一张机器有 16 个寄存器的图表。我试过这个代码,但它不起作用:

\documentclass{article}

\usepackage{bytefield}
\begin{document}
\newcount\X
\X=0
\begin{bytefield}
  \loop
     \bitbox{16}{r\the\X}
     \advance \X by 1
   \ifnum \X<16
   \repeat
\end{bytefield}

\end{document}

这导致仅打印第一次迭代。

答案1

您不能进行从比对单元格开始并在另一个单元格结束的循环。由于是bytefield建立在比对基础上的,因此这种循环是不可能的。

可以使用不同的循环机制。

\documentclass{article}
\usepackage{bytefield}

\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\makebitboxes}{mm}
 {
  \seq_clear:N \l_tmpa_seq
  \int_step_inline:nnn { 0 } { #1 - 1 }
   {
    \seq_put_right:Nn \l_tmpa_seq { \bitbox{ 1 }{ #2 } }
   }
  \seq_use:Nn \l_tmpa_seq {~}
 }
\ExplSyntaxOff

\begin{document}

\begin{bytefield}[bitwidth=2em]{8}
\makebitboxes{16}{r#1}
\end{bytefield}

\end{document}

在第一个参数中\makebitboxes指定位数;第二个参数是一个模板,其中#1代表循环中的当前位数。

在此处输入图片描述

如果您想要不同的输出(这可能是您的问题的对象),您必须使用位数来占用并添加\\到结束行。

\documentclass{article}
\usepackage{bytefield}

\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\makebitboxes}{mm}
 {
  \seq_clear:N \l_tmpa_seq
  \int_step_inline:nnn { 0 } { #1 - 1 }
   {
    \seq_put_right:Nn \l_tmpa_seq { \bitbox{ #1 }{ #2 } }
   }
  \seq_use:Nn \l_tmpa_seq { \\ }
 }
\ExplSyntaxOff

\begin{document}

\begin{bytefield}{8}
\bitheader{0-15}\\
\makebitboxes{16}{r#1}
\end{bytefield}

\end{document}

在此处输入图片描述

相关内容