I have to draw lots of bytefield with different number of bitbox with different shapes.
For that I define 3 functions:
mybytefield that takes a variable number of arguments (using xparse with
\SplitListand\ProcessList) and defines the bytefield environmentbitboxlist that takes args in a sequential way and sends them to mybitbox
mybitbox that takes the 2 arguments needed for \bitbox in a sequence and invokes
\bitbox{\value{{bitfieldsize}}{#1}when the 2 arguments are ready.
It almost works ... I can invoke \mybytefield with different numbers of args and it draws several bytefield BUT the position of the bitbox are wrong or "corrupted" by the \ProcessListcall.
Any idea ?
Here is a sample code :
\documentclass[a4paper, 12pt,english]{article}
\usepackage{graphicx}
\usepackage{bytefield}
\usepackage{calc}
\usepackage{xparse}
\usepackage{etoolbox}
\newtoggle{newarg}
\toggletrue{newarg}
\newcounter{bitfieldsize}
\newcommand\mybitbox[1] {
\iftoggle{newarg}{
\setcounter{bitfieldsize}{ #1 }
\togglefalse{newarg}
}{
\bitbox{\value{bitfieldsize}}{#1}
\toggletrue{newarg}}}
\NewDocumentCommand\bitboxlist { >{\SplitList{;}}m} {
\ProcessList{#1}{\mybitbox}}
\newcounter{instsize}
\NewDocumentCommand\mybytefield{m >{\SplitList{;}}m} {
\setcounter{instsize}{#1 - 1 }
\begin{figure}[htbp]
\begin{center}
\begin{bytefield}[endianness=big,bitwidth=1em]{#1}
\bitheader{0-\value{instsize}} \\
\ProcessList{#2}{\bitboxlist}
\end{bytefield}
\end{center}
\end{figure}}
\newcommand\staticbitbox[4] {
\bitbox{#1}{#2} \bitbox{#3}{#4}}
\begin{document}
\mybytefield{32}{{28;part1};{4;part2}}
%should do
\begin{figure}[htbp]
\begin{center}
\begin{bytefield}[endianness=big,bitwidth=1em]{32}
\bitheader{0-31} \\
\staticbitbox{28}{part1}{4}{part2}
\end{bytefield}
\end{center}
\end{figure}
\end{document}
