动态表格前导字符串

动态表格前导字符串

我想提供一个围绕 tabularx 的包装器,以便让用户定义整体内容对齐方式,而无需定义表格边框样式。

类似下面的内容。用户仍然可以定义列内容对齐和间距(例如 p 列),并且上述atable环境(应该)会默默添加边框样式并生成前导字符串c|c。如果是 5 列表,我会使用c|c|c|c|c前导字符串。

\documentclass{article}

\usepackage{tabularx}
\usepackage{xparse}

\newenvironment{atable}[2][]
    {%
        \tabularx{\linewidth}{#1}%
        #2 \tabularnewline \hline %
    }
    {\endtabularx}

\begin{document}

\begin{atable}[cX]{Header 1 & Header 2}
    Content 1 & Content 2 \tabularnewline \hline
\end{atable}

\end{document}

我考虑实现这一点的方法是将输入前导字符串视为一个列表,并将每个项目与|分隔符连接起来,最后将结果传递给 tabularx 环境。

尽管有大量关于使用 for 循环和 expl3 解决方案处理动态表格内容的文献,但我没有找到任何关于如何将前导字符串模块化的文章。我确实发现表格环境有一些语法糖来重复列,但这不是我想要的。

具体来说,我相信我所缺少的是如何生成由循环表达式生成的延迟可扩展命令,其中循环逐步构建前导字符串。

我尝试将 expl3 文档与在互联网上找到的示例进行匹配,但我对其语法感到困惑,并且无法真正掌握找到的解决方案的实际作用。

您能否向我指出实现我所寻找的正确方法?

一些背景知识使上下文更加清晰。我目前正在编写一个带有两个演示文稿 A 和 B 的自定义类。我将使用 tabularx 包装器根据所选的演示文稿提供一致的表格:例如,演示文稿 A 将在列之间有所有垂直线,而演示文稿 B 将只有外部边框。

答案1

这听起来像是该包的一个很好的用例tabularray,它允许您单独控制线条/边框和内容:

\documentclass{article}

\usepackage{tabularray}

\begin{document}

\SetTblrInner{vline{1,Z}={solid}}

\begin{tblr}{
  colspec={cc}
}
test & test\\
\end{tblr}

\SetTblrInner{vlines}

\begin{tblr}{
  colspec={cc}
}
test & test\\
\end{tblr}

\end{document}

在此处输入图片描述

相关内容