如何输入/包含单个文件作为表的行?

如何输入/包含单个文件作为表的行?

在尝试构建多个文档的情况下,每个文档将有一个页面,其中包含使用公共数据的自己的(长)表。以下是表定义的最小示例:

\documentclass{article}
\usepackage{tabularray}
\begin{document}

\begin{longtblr}{
    colspec={m{100pt}X},
    rowhead=1,
    width=\textwidth,
}
    Key & Value \\
    first & desc1 \\
    second & desc2 \\
\end{longtblr}

\end{document}

我希望使用\input命令定义表格将使用哪些行,从而允许一个文档中的表格定义使用与另一个文档不同的行集。例如:

[测试.tex]
\begin{longtblr}{
    colspec={m{100pt}X},
    rowhead=1,
    width=\textwidth,
}
    Key & Value \\
    \input{test-row1}
    \input{test-row2}
\end{longtblr}
[测试-行1.tex]
second & desc1 \\

但是,这种方法会产生以下错误:

! Misplaced alignment tab character &.

有没有什么办法可以让它工作?

当前的解决方法是将每列拆分为自己的包含文件,如下所示,但希望避免这种情况:

    \input{test-r2c1} & \input{test-r2c2} \\

答案1

使用上面链接问题中 David Carlisle 的“可怕的黑客”,我们有(也阅读代码中的注释以了解它的作用)

%! TEX program = pdflatex
\documentclass{article}
\usepackage{tabularray}
\begin{document}


\ExplSyntaxOn
% read the file content
\file_get:nnN {test-row1} {\ExplSyntaxOff} \testrowone
\ExplSyntaxOff

\begin{longtblr}[expand=\expandafter]{
    colspec={m{100pt}X},
    rowhead=1,
    width=\textwidth
}
    Key & Value \\
    first & desc1 \\
    \expandafter\empty\testrowone
    %\expandafter\empty\testrowtwo, etc.
\end{longtblr}

\end{document}

答案2

使用最新functional版本 2022G(2022-05-22)和tabularray版本 2022B(2022-06-01),可以轻松地在表格内输入文件。

有一个新的 functional库和包evaluate中的外部规范tabularray。使用此库,您可以tabularray评估指定的每次出现受保护函数(必须用 定义\prgNewFunction)并在分割表体之前将其替换为返回值:

\documentclass{article}

\usepackage{tabularray}
\UseTblrLibrary{functional}

\begin{filecontents*}[overwrite]{test1.tex}
first & desc1 \\
\end{filecontents*}

\begin{filecontents*}[overwrite]{test2.tex}
second & desc2 \\
\end{filecontents*}

\begin{document}

\begin{tblr}[evaluate=\fileInput]{hlines}
  Key & Value \\
  \fileInput{test1}
  \fileInput{test2}
\end{tblr}

\end{document}

示例中\fileInput是包中的一个预定义函数functional

在此处输入图片描述

一般来说,用这个库的一个函数就可以生成整个表体。

相关内容