¿Cómo reutilizar elementos de datos comunes para múltiples macros?

¿Cómo reutilizar elementos de datos comunes para múltiples macros?

Quiero usar macros para presentar diferentes combinaciones de elementos de datos del mismo conjunto de datos más de una vez en el mismo documento.

Por ejemplo, es fácil resumir los elementos del conjunto de datos A en una tabla usando una 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}

Pero ahora me gustaría reutilizar algunos de los mismos elementos del conjunto de datos A para mostrarlos en un formato diferente, pero en el mismo documento. Por ejemplo:

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

¿Cómo puedo definir macros que utilicen parámetros de entrada del mismo conjunto de datos, de modo que solo tenga que ingresar conjuntos de datos una vez? ¿Es esta la forma más elegante? Es decir, ¿para usar \renewcommanden el punto donde quiero redefinir la macro?

El resultado de este ejemplo se muestra a continuación.

Dos macros que utilizan los mismos elementos de datos.

En la aplicación completa, uso \input{data.tex}. El contenido de este archivo se ve así:

\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

Respuesta1

Puede definir alguna infraestructura detrás de los conjuntos de datos.

Después de cargar los conjuntos de datos, se hace referencia a cada uno de ellos mediante el primer elemento (sinopsis). Proporciono el \datasetdefcomando para definir varias macros que utilizan conjuntos de datos.

\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 ves, \datasetdefes similar a \newcommand, pero sólo tienes que indicar el nombre de la macro y el texto de sustitución (con seis argumentos). La macro definida con \datasetdeftoma un único argumento, es decir, el nombre de un conjunto de datos.

ingrese la descripción de la imagen aquí

Respuesta2

La idea más rápida que se me ocurrió es la inversa de lo que se sugirió en el comentario. Usted define algunas macros de formato que formatearán sus argumentos. Luego define el conjunto de datos que aplicará el primer argumento a sí mismo:

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

El pdf se parece a su ejemplo.

información relacionada