在宏中使用 ConTeXt \bTABLEbody 和 \eTABLEbody

在宏中使用 ConTeXt \bTABLEbody 和 \eTABLEbody

\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}

相关内容