Tabela de um layout/modelo definido para entrada

Tabela de um layout/modelo definido para entrada

Estou fazendo um projeto onde preciso copiar diversas vezes uma tabela ao longo de um documento. A estrutura básica da tabela é a mesma, porém, algumas das entradas precisam mudar. Gostaria de saber se é possível definir um layout básico (ou algum tipo de template) onde eu precise apenas preencher os dados variáveis ​​e não configurar a tabela inteira mais uma vez.

Meu problema é que há uma grande chance de erro humano ao copiar e colar tabelas, para alterá-las posteriormente.

Vamos dar um exemplo do que eu gostaria. Primeiro, aqui está uma definição de tabela:

\begin{table}[h]
\makebox[\linewidth]
{
    \begin{tabular}{|l|l|l|}
    \hline
    [static]            & [static]  & [static]  \\ \hline
    [static]            & [DYNAMIC] & [DYNAMIC] \\ \hline
    [static]            & [DYNAMIC] & [DYNAMIC] \\ \hline
    [static]            & [DYNAMIC] & [DYNAMIC] \\ \hline
    \end{tabular}
}
\caption{[DYNAMIC}
\label{[DYNAMIC]}
\end{table}

O que procuro é uma forma de replicar a tabela onde as coisas marcadas com [estático] não devam ser alteradas sempre que eu replicar a tabela, porém, as coisas que estão marcadas com [DYNAMIC] devem ser alteradas em cada tabela. Então, o que estou procurando é algum tipo de maneira de definir o layout base que facilite a "cola" dos dados que precisam ser alterados.

Tenho pesquisado isso no Google, mas sem sorte, agora estou me perguntando se isso é possível com látex e, em caso afirmativo, qual é a maneira correta de fazer isso?

Obrigado :)

Responder1

Você pode usar um sistema de valores-chave, por exemplo expl3.

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\archietable}{m}
 {
  \begin{table}[htp]
  \centering
  \keys_set:nn { archie/table } { #1 }
  \begin{tabular}{|l|l|l|}
  \hline
  STATIC & STATIC & STATIC \\ \hline
  STATIC & \l_archie_table_XA_tl & \l_archie_table_YA_tl \\ \hline
  STATIC & \l_archie_table_XB_tl & \l_archie_table_YB_tl \\ \hline
  STATIC & \l_archie_table_XC_tl & \l_archie_table_YC_tl \\ \hline
  STATIC & \l_archie_table_XD_tl & \l_archie_table_YD_tl \\ \hline
  \end{tabular}
  \caption{\l_archie_table_caption_tl}
  \label{\l_archie_table_label_tl}
  \end{table}
 }

\keys_define:nn { archie/table }
 {
  XA      .tl_set:N = \l_archie_table_XA_tl,
  XB      .tl_set:N = \l_archie_table_XB_tl,
  XC      .tl_set:N = \l_archie_table_XC_tl,
  XD      .tl_set:N = \l_archie_table_XD_tl,
  YA      .tl_set:N = \l_archie_table_YA_tl,
  YB      .tl_set:N = \l_archie_table_YB_tl,
  YC      .tl_set:N = \l_archie_table_YC_tl,
  YD      .tl_set:N = \l_archie_table_YD_tl,
  caption .tl_set:N = \l_archie_table_caption_tl,
  label   .tl_set:N = \l_archie_table_label_tl,
 }

\ExplSyntaxOff

\begin{document}

\archietable{
  XA = foo,
  XB = bar,
  XC = baz,
  XD = foobar,
  YA = gnu,
  YB = gnat,
  YC = gnocco,
  YD = whatever,
  caption=First caption,
  label=flabel,
}

\archietable{
  XA = 1,
  XB = 2,
  XC = 3,
  XD = 4,
  YA = 5,
  YB = 6,
  YC = 7,
  YD = 8,
  caption=Second caption,
  label=slabel,
}

\end{document}

Altere os STATICvalores; lembre-se que os espaços no texto na definição de \archietabledevem ser inseridos como ~.

A ordem em que você especifica as chaves é irrelevante.

insira a descrição da imagem aqui

informação relacionada