该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
环境。