如何在表格环境中重新定义 \\?

如何在表格环境中重新定义 \\?

我想重新定义表格环境,例如

\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 标记,以便它仍然可以作为对齐点,然后您可以在特殊环境中将其设置为。通常的表格定义是(根据是否加载,其定义不同。tabularparbox&\let\def,\\\@tabularcrarray

因此,如果您想在&大多数时间充当对齐点,但对逗号有局部定义,请执行以下操作。请注意,重新定义甚至在参数内部也有效,\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}

相关内容