\bTABLEbody
我似乎在宏中使用和时遇到了问题\eTABLEbody
。例如,我想将这些命令包装在另一个命令中:
\def\BeginChemicalTable{%
% ... other stuff goes here
\bTABLE
\bTABLEhead
\bTR
\bTH Chemical name \eTH
\bTH Data \eTH
\bTH Date \eTH
\eTR
\eTABLEhead
\bTABLEbody
}
\def\EndChemicalTable{%
\eTABLEbody
\eTABLE
}
当\bTABLEbody
和\eTABLEbody
位于不同的宏中并且我运行 ConTeXt 时,它会停止并只让我停留在“请输入命令或说 \end”提示符下,但是当我用它们各自的内容替换\BeginChemicalTable
和\EndChemicalTable
并再次运行 ConTeXt 时,一切都正常工作。
\bTABLEbody
我是不是想做一些愚蠢的事情,或者\eTABLEbody
在不同的宏中表现不佳?
答案1
您不能将表格块的开始和结束标记放在自定义宏中,因为 ConTeXt 在存储内容时会使用它们\eTABLEbody
作为分隔符\bTABLEbody
。使用缓冲机制保存自定义环境的内容并将其内容传递到表格的主体块时,您可以解决此问题。
\def\startChemicalTable
{\grabbufferdata[ChemicalTable][startChemicalTable][stopChemicalTable]}
\def\stopChemicalTable
{\bTABLE
\bTABLEhead
\bTR
\bTH Chemical name \eTH
\bTH Data \eTH
\bTH Date \eTH
\eTR
\eTABLEhead
\bTABLEbody
\getbufferdata[ChemicalTable]
\eTABLEbody
\eTABLE}
\starttext
\startChemicalTable
\bTR
\bTD XXX \eTD
\bTD YYY \eTD
\bTD ZZZ \eTD
\eTR
\stopChemicalTable
\stoptext
表格的布局应该像 Aditya 所说的那样,最好将其移动到一个setups
块中,然后可以使用命令加载\bTABLE
。
\startsetups[ChemicalTable]
\setupTABLE[start][frame=off]
\stopsetups
\def\stopChemicalTable
{\bTABLE[setups=ChemicalTable]
...
\eTABLE}