Таблица из определенного макета/шаблона для ввода

Таблица из определенного макета/шаблона для ввода

Я работаю над проектом, в котором мне нужно скопировать таблицу несколько раз по всему документу. Базовая структура таблицы та же самая, однако часть ввода нужно изменить. Мне было интересно, можно ли определить базовый макет (или какой-то шаблон), в котором мне нужно будет только заполнить переменные данные и не настраивать всю таблицу заново.

Проблема в том, что при копировании и вставке таблиц существует большая вероятность человеческой ошибки с целью их последующего изменения.

Давайте рассмотрим пример того, что я хотел бы. Сначала вот определение таблицы:

\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}

Я ищу способ реплицировать таблицу, где вещи, отмеченные как [static], не должны изменяться всякий раз, когда я реплицирую таблицу, однако вещи, отмеченные как [DYNAMIC], должны изменяться в каждой таблице. Поэтому я ищу какой-то способ определить базовый макет, который позволяет легко «вставить» данные, которые необходимо изменить.

Я искал это в Google, но безуспешно, поэтому теперь мне интересно, возможно ли это вообще с латексом, и если да, то как правильно это сделать?

Спасибо :)

решение1

Например, можно использовать систему «ключ-значение» 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}

Измените STATICзначения; помните, что пробелы в тексте определения \archietableследует вставлять как ~.

Порядок указания ключей не имеет значения.

введите описание изображения здесь

Связанный контент