使用 `\NewDocumentEnvironment` 来自动化 `tabular` 和 `tikzpicture` 环境

使用 `\NewDocumentEnvironment` 来自动化 `tabular` 和 `tikzpicture` 环境

经过多次尝试和错误,我终于成功自动生成表格,如下面的 MWE 所示。通过在函数\l_rn_tableContent_tl中生成变量的内容\cs_,人们可以免去手动完成所有工作的繁琐工作。我非常希望将相同的原理应用于tikzpicture环境内容的生成,但即使调用\usepackage{tikz}也会产生编译错误!Missing number treated as zero。为什么?(第一个查询)。为什么我应该使用\NewDocumentEnvironmentover \DeclarDocumentEnvironment,两者似乎在下面的 MWE 中运行良好 - (第二个查询)。

\documentclass{article}
% RN. 10 Nov 2017
% BRIEF DESCRIPTION: Automating tabular and tikz environments. Tabular works as intended, but even invoking \usepackage{tikz} produces compile ERROR "!Missing number, treated as zero."
%=======================
\usepackage{comment}
\usepackage[check-declarations]{expl3}
\usepackage{xparse}
%\usepackage{tikz}
%-----------------------
\ExplSyntaxOn
\tl_new:N \l_rn_tableFormat_tl
\tl_new:N \l_rn_tableHeader_tl
\tl_new:N \l_rn_tableContent_tl

\NewDocumentEnvironment{myTreeTable}{mO{|c|c|c|}O{\hline \textbf{col~1} & \textbf{col~2} & \textbf{col~3} \\\hline\hline}}
{
  \begin{tabular}{#2}
  #3
  #1
  \end{tabular}
}
\ExplSyntaxOff
%-----------------------
\begin{document}
    \tl_set:Nn \l_rn_tableContent_tl {\textit{italic} &  $\alpha$ & 3.14159\\\hline}
    \tl_put_right:Nn \l_rn_tableContent_tl {yy &  $\zeta$ & 3.14159  \\\hline}
    \tl_put_right:Nn \l_rn_tableContent_tl {1 &  2 & a  \\\hline}
    \tl_put_right:Nn \l_rn_tableContent_tl {A &  Z & XX  \\\hline}
    \begin{myTreeTable}{\l_rn_tableContent_tl}
    \end{myTreeTable}
\end{document}

答案1

您的环境定义缺少环境末尾命令的参数,因此它“吃掉”了 \ExplSyntaxOff。这意味着 expl3-Syntax 仍然处于活动状态,\begin{document}并且 tikz 在此处加载的文件不喜欢这种情况。此处的运行没有错误:

\documentclass{article}
% RN. 10 Nov 2017
% BRIEF DESCRIPTION: Automating tabular and tikz environments. Tabular works as intended, but even invoking \usepackage{tikz} produces compile ERROR "!Missing number, treated as zero."
%=======================
\usepackage{comment}
\usepackage[check-declarations]{expl3}
\usepackage{xparse}
\usepackage{tikz}
%-----------------------
\ExplSyntaxOn
\tl_new:N \l_rn_tableFormat_tl
\tl_new:N \l_rn_tableHeader_tl
\tl_new:N \l_rn_tableContent_tl

\NewDocumentEnvironment{myTreeTable}{mO{|c|c|c|}O{\hline \textbf{col~1} & \textbf{col~2} & \textbf{col~3} \\\hline\hline}}
{
  \begin{tabular}{#2}
  #3
  #1
  \end{tabular}
}{} %<--- missing
\ExplSyntaxOff
%-----------------------
\begin{document}
\ExplSyntaxOn
    \tl_set:Nn \l_rn_tableContent_tl {\textit{italic} &  $\alpha$ & 3.14159\\\hline}
    \tl_put_right:Nn \l_rn_tableContent_tl {yy &  $\zeta$ & 3.14159  \\\hline}
    \tl_put_right:Nn \l_rn_tableContent_tl {1 &  2 & a  \\\hline}
    \tl_put_right:Nn \l_rn_tableContent_tl {A &  Z & XX  \\\hline}

    \begin{myTreeTable}{\l_rn_tableContent_tl}
    \end{myTreeTable}
\ExplSyntaxOff    
\end{document}

相关内容