`siunitx` 干扰 `array` 和 `tabular environment`

`siunitx` 干扰 `array` 和 `tabular environment`

在下面的 MWE 中,加载siunitx会导致编译错误! Package array Error: Illegal pream-token (\l_rn_tableFormat_tl): c' used。我发现该包array最近已被完全重写,此外,它在我的MiKTeX 2.9发行版中与标准捆绑在一起LaTeX tools;最终确定包siunitx是罪魁祸首。

\documentclass{article}
% RN. 12 Nov 2017
%  `siunitx ` clashes with `array` and `tabular environment`.
%=======================
\usepackage[check-declarations]{expl3}
\usepackage{xparse}
%  \usepackage{siunitx}  
%-----------------------
\ExplSyntaxOn
\tl_new:N \l_rn_tableFormat_tl
\tl_new:N \l_rn_tableHeader_tl
\tl_new:N \l_rn_tableContent_tl

\NewDocumentCommand\myTable{}
  {
\group_begin:
  \tl_gset:Nn \l_rn_tableFormat_tl {|c|c|c|c|}
%  Format:~\l_rn_tableFormat_tl\\  
  \tl_gset:Nn \l_rn_tableHeader_tl {\hline \textbf{Item} & \textbf{col~1} & \textbf{col~2} & \textbf{col~3} \\\hline\hline}
  \tl_gset:Nn \l_rn_tableContent_tl {\#1 &\textit{italic} &  $\alpha$ & 3.14159  \\\hline}
  \tl_gput_right:Nn \l_rn_tableContent_tl {\#2 & XYZ &  $\zeta$ & 3.14159  \\\hline}
  \tl_gput_right:Nn \l_rn_tableContent_tl {\#3 & 1 &  2 & a  \\\hline}
  \tl_gput_right:Nn \l_rn_tableContent_tl {\#4 & A &  Z & XX  \\\hline}
  \tl_gput_right:Nn \l_rn_tableContent_tl {\#5 & sdf &  wrtw45 & 54qge  \\\hline}
  \begin{tabular}{\l_rn_tableFormat_tl}
    \l_rn_tableHeader_tl
    \l_rn_tableContent_tl
  \end{tabular}
\group_end:
  }  %  \myTable
\ExplSyntaxOff
%-----------------------
\begin{document}
  \myTable
\end{document}

答案1

array加载时,\begin{tabular}不执行强制参数的扩展,因此必须事先完成。使用起来expl3很简单。

\documentclass{article}
% RN. 12 Nov 2017
%  `siunitx ` clashes with `array` and `tabular environment`.
%=======================
\usepackage[check-declarations]{expl3}
\usepackage{xparse}
%  \usepackage{siunitx}  
%-----------------------
\ExplSyntaxOn
\tl_new:N \l_rn_tableFormat_tl
\tl_new:N \l_rn_tableHeader_tl
\tl_new:N \l_rn_tableContent_tl

\NewDocumentCommand\myTable{}
  {
\group_begin:
  \tl_gset:Nn \l_rn_tableFormat_tl {|c|c|c|c|}
%  Format:~\l_rn_tableFormat_tl\\  
  \tl_gset:Nn \l_rn_tableHeader_tl {\hline \textbf{Item} & \textbf{col~1} & \textbf{col~2} & \textbf{col~3} \\\hline\hline}
  \tl_gset:Nn \l_rn_tableContent_tl {\#1 &\textit{italic} &  $\alpha$ & 3.14159  \\\hline}
  \tl_gput_right:Nn \l_rn_tableContent_tl {\#2 & XYZ &  $\zeta$ & 3.14159  \\\hline}
  \tl_gput_right:Nn \l_rn_tableContent_tl {\#3 & 1 &  2 & a  \\\hline}
  \tl_gput_right:Nn \l_rn_tableContent_tl {\#4 & A &  Z & XX  \\\hline}
  \tl_gput_right:Nn \l_rn_tableContent_tl {\#5 & sdf &  wrtw45 & 54qge  \\\hline}
  \__rn_tablebegin:V \l_rn_tableFormat_tl % \begin{tabular}
    \l_rn_tableHeader_tl
    \l_rn_tableContent_tl
  \end{tabular}
\group_end:
  }  %  \myTable
\cs_new_protected:Nn \__rn_tablebegin:n { \begin{tabular}{#1} }
\cs_generate_variant:Nn \__rn_tablebegin:n { V }
\ExplSyntaxOff
%-----------------------
\begin{document}
  \myTable
\end{document}

相关内容