我遇到过一种情况,我需要一张机器有 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}