Como reutilizar elementos de dados comuns para múltiplas macros?

Como reutilizar elementos de dados comuns para múltiplas macros?

Quero usar macros para apresentar diferentes combinações de elementos de dados do mesmo conjunto de dados mais de uma vez no mesmo documento.

Por exemplo, é fácil resumir os elementos do conjunto de dados A em uma tabela usando uma macro:

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

Mas agora gostaria de reutilizar alguns dos mesmos elementos do Conjunto de Dados A para exibição em um formato diferente, mas no mesmo documento. Por exemplo:

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

Como posso definir macros que usam parâmetros de entrada do mesmo conjunto de dados, de modo que eu só precise inserir conjuntos de dados uma vez? Esta é a maneira mais elegante? Ou seja, para usar \renewcommandno ponto onde quero redefinir a macro?

O resultado deste exemplo é mostrado abaixo.

Duas macros usando os mesmos elementos de dados.

Na aplicação completa, eu uso \input{data.tex}. O conteúdo deste arquivo é assim:

\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

Responder1

Você pode definir alguma infraestrutura por trás dos conjuntos de dados.

Após carregar os conjuntos de dados, você se refere a cada um deles pelo primeiro item (sinopse). Forneço o \datasetdefcomando para definir várias macros que usam conjuntos de dados.

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

Como você pode ver, \datasetdefé semelhante a \newcommand, mas basta indicar o nome da macro e o texto de substituição (com seis argumentos). A macro definida com \datasetdefaceita um único argumento, ou seja, o nome de um conjunto de dados.

insira a descrição da imagem aqui

Responder2

A ideia mais rápida que consegui ter é o inverso do que foi sugerido no comentário. Você define algumas macros de formato que irão formatar seus argumentos. Em seguida, você define o conjunto de dados que aplicará o primeiro argumento a si mesmo:

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

O pdf se parece com o seu exemplo.

informação relacionada