恢复原始数组代码

恢复原始数组代码

array软件包array以各种方式重新定义。我想知道是否有人制作过包含本地化(前缀)内核版本的软件包array

我有一份文档,其中我们有一个简单构造,它利用了array我们使用的一些配置,但一旦加载array包,它就无法正常工作(这对于其他事情来说可能很好),所以我想创建一个副本前缀,\my@这样我就可以同时使用两者。到目前为止没有成功。

基本上唯一的问题是对格式解析器的限制array,所以我也可以本地恢复格式解析器。

有任何想法吗?

对于 MWE 来说:

\documentclass{article}
%\usepackage{array}
\def\test{cc}
\begin{document} 
\[
  \begin{array}{\test}
    a & b \\ c & d
  \end{array}
\]
\end{document}

如果没有这个array包,代码也可以编译成功

编辑:

再介绍一些背景知识。在一本书中,我们有很多线性方程式,而传统上,该领域通过这些方程式进行排版,array以便排列变量等。我们称之为系统。现在,array我们不必记住所有不同的序言,而是创建一个可以通过key-val界面进行控制的新环境。这样,我们就可以确保所有系统都\arraycolsep与文档的其余部分不同。我们可以扩展系统等。

通常所有列具有相同的对齐方式(r),但对于某些系统来说,最好能够指定特定的格式,甚至只指定列数,然后指定最后一列的格式。

正如前面提到的,这是简单的与内核,但由于包加载array时的限制,无法工作。array

对于系统我们(目前)不需要任何额外的array功能。

希望这能澄清一些事情

答案1

您可以保留数组包定义,但只需预先扩展序言

\documentclass{article}
\usepackage{array}


\makeatletter

\let\savearray\@@array
\def\@@array[#1]#2{%
\protected@edef\temp{\noexpand\savearray[#1]{#2}}\temp}
\makeatother

\def\test{cc}

\begin{document} 
\[
  \begin{array}{\test}
    a & b \\ c & d
  \end{array}
\]
\end{document}

只要放置的任何命令>{...}都是 latex 健壮的,这种重新定义就不会停止通常的数组包功能,因此不会在受保护的 edef 中失败。

答案2

使用风险自负

\documentclass{article}
\usepackage{array}

\makeatletter
\let\array@@array\array
\def\after@array#1#2{\array@@array[#2]{#1}}
\renewcommand{\array}[2][c]{\expandafter\after@array\expandafter{#2}{#1}}
\makeatother

\def\test{cc}
\begin{document}
\[
  \begin{array}{\test}
    a & b \\ c & d
  \end{array}
\]
\end{document}

答案3

为什么你不能使用这个定义?也许我没有理解你的问题......

\documentclass{article}
\usepackage{array}
\newcolumntype{C}{cc}
\begin{document} 
\[
  \begin{array}{C}
    a & b \\ c & d
  \end{array}
\]
\end{document}

答案4

我已经array在 中本地化了包xepersian。以下是一些代码片段及其解释:

\def\@testpach{\@chclass
 \ifnum \@lastchclass=6 \@ne \@chnum \@ne \else
  \ifnum \@lastchclass=7 5 \else
   \ifnum \@lastchclass=8 \tw@ \else
    \ifnum \@lastchclass=9 \thr@@
   \else \z@
   \ifnum \@lastchclass = 10 \else
   \edef\@nextchar{\expandafter\string\@nextchar}%
   \@chnum
   \if \@nextchar c\z@ \else
   \if \@nextchar و\z@ \else
    \if \@nextchar \if@RTLtab r\else l\fi\@ne \else
    \if \@nextchar \if@RTLtab ر\else چ\fi\@ne \else
     \if \@nextchar \if@RTLtab l\else r\fi\tw@ \else
     \if \@nextchar \if@RTLtab چ\else ر\fi\tw@ \else
   \z@ \@chclass
   \if\@nextchar |\@ne \else
    \if \@nextchar !6 \else
     \if \@nextchar @7 \else
      \if \@nextchar <8 \else
       \if \@nextchar >9 \else
  10
  \@chnum
  \if \@nextchar m\thr@@\else
  \if \@nextchar م\thr@@\else
   \if \@nextchar p4 \else
  \if \@nextchar پ4 \else
    \if \@nextchar b5 \else
    \if \@nextchar ز5 \else
   \z@ \@chclass \z@ \@preamerr \z@ \fi \fi \fi \fi \fi \fi \fi
   \fi \fi  \fi  \fi  \fi  \fi  \fi \fi \fi \fi \fi \fi \fi \fi \fi}%

此代码来自文件misc-localise-xepersian.def。它本地化了位置参数。波斯语و‍for cر‍for rچfor lمfor mپfor pزfor b

\eqenvironment{آرایه}{array}

这是来自文件environments-ltx.def。它使波斯语环境آرایه等同于array环境。

\eqenvironment{جدول}{tabular}

与上面类似。它使波斯语环境جدول等同于tabular环境。

相关内容