使用用户定义的命令在 NiceTabular 环境 (nicematrix 包) 中对齐单元格

使用用户定义的命令在 NiceTabular 环境 (nicematrix 包) 中对齐单元格

我正在输入一份报告,其中我使用 NiceTabular 环境来处理大表格以显示数据表。我希望能够在编译时设置给定一组单元格/块的对齐方式(l、c 或 r)(以允许用户轻松更改它们),并让其他单元格/块保持给定的对齐方式。当然,在每次编译时,我都可以手动更改每个我想更改对齐方式的块中的每个对齐命令。但我的表格非常大,每当我想更改这些单元格的对齐方式时,这都会花费很长时间。

因此,我的想法是定义一个仅适用于某些单元格/块的命令 \MyAlignment:

\documentclass[12pt,a4paper]{article}
\usepackage{nicematrix}

\newcommand{\MyAlignment}{r}

\begin{document}

\begin{NiceTabular}{cccc}
    \Block[r]{1-1}{11} & \Block[\MyAlignment]{1-2}{12} & & 14 \\
    \Block[\MyAlignment]{2-1}{23} & \Block[r]{1-2}{22} & & 24 \\
    & 32 & 33 & 34 \\
    41 & 42 & \Block[\MyAlignment]{1-2}{43} &
\end{NiceTabular}

\end{document}

但是,当我尝试编译它时,编译器返回“键 '\MyAlignment' 对于命令 \Block 来说是未知的。如果继续,它将被忽略”。我尝试使用 \def、\edef、\xdef 和 \gdef 代替 \newcommand,但它没有改变任何东西。

您是否知道是否可以做到这一点以及如何做到这一点?我通常会在 StackExchange 上找到所有问题的答案,但这次,尽管我尽了最大努力,却没有找到任何可以解决这个问题的主题。

太感谢了!

答案1

这是一个通过定义新命令来解决的问题\MyBlock

\documentclass[12pt,a4paper]{article}
\usepackage{nicematrix}

\newcommand{\MyAlignment}{r}

\ExplSyntaxOn
\NewDocumentCommand { \MyBlock } { O { } }
  { \use:x { \exp_not:N \Block [ #1 ] } }
\ExplSyntaxOff

\begin{document}

\begin{NiceTabular}{cccc}
    \MyBlock[r]{1-1}{11} & \MyBlock[\MyAlignment]{1-2}{12} & & 14 \\
    \MyBlock[\MyAlignment]{2-1}{23} & \MyBlock[r]{1-2}{22} & & 24 \\
    & 32 & 33 & 34 \\
    41 & 42 & \MyBlock[\MyAlignment]{1-2}{43} &
\end{NiceTabular}

\end{document}

相关内容