Как повторно использовать общие элементы данных для нескольких макросов?

Как повторно использовать общие элементы данных для нескольких макросов?

Я хочу использовать макросы для представления различных комбинаций элементов данных из одного и того же набора данных более одного раза в одном документе.

Например, можно легко суммировать элементы из набора данных A в таблице с помощью макроса:

\documentclass[11pt]{article}

\newcommand\dataset[6]{%
    \begin{table}
    \begin{tabular}{ll} 
    Element 1  & #1 \\
    Element 2  & #2 \\
    Element 3  & #3 \\
    Element 4  & #4 \\
    Element 5  & #5 \\
    Element 6  & #6 \\
    \end{tabular}
    \end{table}
}

\begin{document}

\dataset % Data Set A, one of many possible data sets in the same document
  {a}
  {b}
  {c}
  {d}
  {e}
  {f}

\end{document}

Но теперь я хотел бы повторно использовать некоторые из тех же элементов из набора данных A для отображения в другом формате, но в том же документе. Например:

\renewcommand\dataset[6]{%
    The first element of Data Set #1, is the data set label.
    The fourth element for Data Set #1 is #4.}

Как определить макросы, которые используют входные параметры из одного и того же набора данных, так, чтобы мне приходилось вводить наборы данных только один раз? Является ли это наиболее элегантным способом? То есть использовать \renewcommandв точке, где я хочу переопределить макрос?

Результат этого примера показан ниже.

Два макроса, использующие одни и те же элементы данных.

В полном приложении я использую \input{data.tex}. Содержимое этого файла выглядит так:

\dataset % A
    {Data element} % Synopsis
    {Data element} % Recommendation
    {Data element} % Comments
    {Data element} % Reference
    {Data element} % Risk value
    {Data element} % FAI support

\dataset % B
    {Data element} % Synopsis
    {Data element} % Recommendation
    {Data element} % Comments
    {Data element} % Reference
    {Data element} % Risk value
    {Data element} % FAI support

\dataset % c
    {Data element} % Synopsis
    {Data element} % Recommendation
    {Data element} % Comments
    {Data element} % Reference
    {Data element} % Risk value
    {Data element} % FAI support

решение1

Вы можете определить некоторую инфраструктуру, лежащую в основе наборов данных.

После загрузки наборов данных вы ссылаетесь на каждый из них по первому пункту (синопс). Я предоставляю команду \datasetdefдля определения различных макросов, которые используют наборы данных.

\documentclass{article}

\makeatletter
\newcommand{\dataset}[6]{\@namedef{dataset@#1}{{#1}{#2}{#3}{#4}{#5}{#6}}}
\newcommand{\datasetdef}[2]{%
  % #1 is the name of a seven argument macro
  % #2 is the replacement text
  \expandafter\newcommand\csname ds@\string#1\endcsname[6]{#2}%
  \newcommand{#1}[1]{%
    \csname ds@\string#1\expandafter\expandafter\expandafter\endcsname
    \csname dataset@##1\endcsname
  }%
}
\makeatother

\datasetdef{\dstable}{%
    \begin{tabular}{ll} 
    Element 1  & #1 \\
    Element 2  & #2 \\
    Element 3  & #3 \\
    Element 4  & #4 \\
    Element 5  & #5 \\
    Element 6  & #6 \\
    \end{tabular}%
}

\datasetdef{\dsshowfirstandfourth}{%
  The first element of Data Set #1, is the data set label.
  The fourth element for Data Set #1 is #4.%
}

%%% This is like \input{data.txt}
\dataset
    {A} % Synopsis
    {A2} % Recommendation
    {A3} % Comments
    {A4} % Reference
    {A5} % Risk value
    {A6} % FAI support
\dataset
    {B} % Synopsis
    {B2} % Recommendation
    {B3} % Comments
    {B4} % Reference
    {B5} % Risk value
    {B6} % FAI support
\dataset
    {c} % Synopsis
    {c2} % Recommendation
    {c3} % Comments
    {c4} % Reference
    {c5} % Risk value
    {c6} % FAI support

\begin{document}

\dstable{A} \dstable{c}

\bigskip

\dsshowfirstandfourth{A}

\dsshowfirstandfourth{B}

\end{document}

Как видите, \datasetdefпохоже на \newcommand, но вам нужно указать только имя макроса и текст замены (с шестью аргументами). Макрос, определенный с помощью , \datasetdefпринимает один аргумент, то есть имя набора данных.

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

решение2

Самая быстрая идея, которая пришла мне в голову, — это обратная тому, что было предложено в комментарии. Вы определяете некоторые макросы форматирования, которые форматируют свои аргументы. Затем вы определяете набор данных, который применит первый аргумент к себе:

\documentclass[11pt]{article}
% some format that can be applied to any dataset with six entries
\newcommand\FormatOne[6]{%
\begin{table}
\begin{tabular}{ll}
Element 1  & #1 \\
Element 2  & #2 \\
Element 3  & #3 \\
Element 4  & #4 \\
Element 5  & #5 \\
Element 6  & #6 \\
\end{tabular}
\end{table}
}
% some other format that can be applied to any dataset with six entries
\newcommand\FormatTwo[6]{
  The first element of Data Set #1, is the data set label.
  The fourth element for Data Set #1 is #4.}
% A dataset with six entries. The first argument will be used as a format
% command
\newcommand\DataSetOne[1]{
  \csname#1\endcsname{a}{b}{c}{d}{e}{f}}
\begin{document}
\DataSetOne{FormatOne}
\DataSetOne{FormatTwo}
\end{document}

PDF-файл выглядит как ваш пример.

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