如何正确地为表创建宏?

如何正确地为表创建宏?

我正在尝试应用以下答案:https://tex.stackexchange.com/a/72916/25124

这段代码有什么问题?我试图定义一个宏来指定一个有 3 列但中间列始终为箭头的表格。看起来错误来自 \begin{tabular},但我不确定。

\documentclass[a4paper]{article}
\usepackage[utf8x]{inputenc}
\usepackage{array}
\title{Your Paper}
\author{You}
\begin{document}
\newif\ifrulesetSep
\newcommand*{\ruleset}[1]{%
  \begin{center}\begin{tabular}[rcl]
  \rulesetSepfalse
  \ruleScan#1\relax\relax
}
\newcommand{\ruleScan}[2]{%
  \ifx\relax#1
    \end{tabular}\end{center}
  \else
    \ifrulesetSep
      \\
    \else
      \rulesetSeptrue
    \fi
    #1 & $\rightarrow$ & #2
    \expandafter\ruleScan
  \fi
}
\ruleset{
  {A}{B C}
  {B}{b}
  {C}{c A B}
}
\end{document}

我得到了错误

包数组错误:非法前缀标记(\rulesetSepfalse):使用了‘c’。

答案1

表格的列规范是强制性的,不是可选的,因此 {}不是[],并且您的开关将无法按书面形式工作,因为每个表格单元格都是一个组,因此每次true/false设置都会丢失&\\

\documentclass[a4paper]{article}
\usepackage[utf8x]{inputenc}
\usepackage{array}
\title{Your Paper}
\author{You}

\begin{document}
\newcommand*{\ruleset}[1]{%
  \begin{center}\begin{tabular}{rcl}%%
  \ruleScan#1\relax\relax
}
\newcommand{\ruleScan}[2]{%
  \ifx\relax#1%%
    \end{tabular}\end{center}%
  \else
    #1 & $\rightarrow$ & #2\\%%
    \expandafter\ruleScan
  \fi
}
\ruleset{
  {A}{B C}
  {B}{b}
  {C}{c A B}
}
\end{document}

相关内容