使用字节字段作为自定义宏的参数会引发错误

使用字节字段作为自定义宏的参数会引发错误

我定义了一个简单的 LaTeX 宏\bansen,它接受一个参数:

\newcommand{\bansen}[1]{#1}

不幸的是,我注意到我不能使用bytefield环境作为这个宏的参数,就像

\documentclass{article}
\usepackage{bytefield}
\newcommand{\bansen}[1]{#1}    \usepackage{bytefield}

\begin{document}
\bansen{
    \begin{bytefield}{16}
        \wordbox{1}{A 16-bit field}\\
        \bitbox{8}{8 bits} & \bitbox{8}{8 more bits}
    \end{bytefield}
}
\end{document}

因为这会在宏的右括号处产生错误}

! Extra alignment tab has been changed to \cr.
<template> \endtemplate 

l.11 }

显然是由&角色引入的——将那句台词替换为

        \bitbox{8}{8 bits} % & \bitbox{8}{8 more bits}

让错误与该行的第二列一起消失。

谁能告诉我出了什么问题以及如何解决这个问题?

动机:我的真实宏\bansen包含其他几个排版命令和更多参数。使用该宏的 LaTeX 代码是计算机生成的,这使我能够将内容(生成器)和形式(LaTeX 样式)分开,因此我不太喜欢不使用宏的想法。

答案1

出于其内部目的,在启动环境时bytefield更改的类别代码。此更改不能影响已被吸收的参数,因此您必须事先进行类别更改:&\bansen

\documentclass{article}
\usepackage{bytefield}

\newcommand{\bansen}{%
  \begingroup\catcode`&=10
  \banseninternal}
\newcommand{\banseninternal}[1]{%
  #1%
  \endgroup
}

\begin{document}

\begin{bytefield}{16}
\wordbox{1}{A 16-bit field}\\
\bitbox{8}{8 bits} & \bitbox{8}{8 more bits}
\end{bytefield}

\bigskip

\bansen{%
  \begin{bytefield}{16}
  \wordbox{1}{A 16-bit field}\\
  \bitbox{8}{8 bits} & \bitbox{8}{8 more bits}
  \end{bytefield}%
}

\end{document}

补充格式说明将\banseninternal代替\bansen

在此处输入图片描述

相关内容