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