我想重新定义表格环境,例如
\begin{tabular}{c|c}
AAA&BBB\\
CCC&DDD\\
\end{tabular}
会产生(例如)
AAA,BBB;CCC,DDD;
问题 1为了重新定义&
,我使用以下内容:
\catcode`\&=\active
\gdef&{,}
它可以工作,但我不知道它是否安全。具体来说,只有当我将其放在 的定义之外时tabular
,它才会起作用,但我更愿意将其放在 的定义内部,这样当我退出 时,这个定义就会消失Tabular
。
问题2我不知道如何重新定义\\
。
答案1
如果您将重新定义添加到定义的开头,\tabular
它们将只在环境范围内,因为来自的组\begin
\end
虽然 catcode 更改在文档中从来都不稳定,但您可以将其&
激活,并且您的定义将在顶层工作,但如果在或 ams 对齐中或在任何其他地方它已被读取为宏参数,因此已经被标记化tabular
,它将不起作用。最好在文档的开头将其激活并设置为正常的 catcode 4 标记,以便它仍然可以作为对齐点,然后您可以在特殊环境中将其设置为。通常的表格定义是(根据是否加载,其定义不同。tabular
parbox
&
\let
\def
,
\\
\@tabularcr
array
因此,如果您想在&
大多数时间充当对齐点,但对逗号有局部定义,请执行以下操作。请注意,重新定义甚至在参数内部也有效,\fbox
并且活动&
在局部重新定义之前和之后有效。
\documentclass{article}
\let\savedtabular\tabular
\catcode`&\active
\catcode`A=4
\let&A
\catcode`A=11
\makeatletter
\def\commatable{%
\def\tabular{\def&{,}\def\@tabularcr{;}\savedtabular}}
\makeatother
\begin{document}
\begin{tabular}{ll}
a&b\\
c&d
\end{tabular}
{\commatable
\begin{tabular}{ll}
a&b\\
c&d
\end{tabular}
\fbox{\begin{tabular}{ll}
a&b\\
c&d
\end{tabular}}
}
\begin{tabular}{ll}
a&b\\
c&d
\end{tabular}
\end{document}
答案2
\documentclass[]{report}
\usepackage{array}
\begingroup
\catcode`\&=\active
\gdef&{,}
\endgroup
\newcommand\semikolon{;}
\begin{document}
\begin{tabular}{>{\catcode`\&=\active\let\\\semikolon}c|ccc}
AAA&BBB&CCC&DDD\\ CCC&DDD\\ \end{tabular}
\begin{tabular}{c|ccc}
AAA&BBB&CCC&DDD\\ CCC&DDD\\ \end{tabular}
\end{document}