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 \renewcommand
en el punto donde quiero redefinir la macro?
El resultado de este ejemplo se muestra a continuación.
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 \datasetdef
comando 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, \datasetdef
es 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 \datasetdef
toma un único argumento, es decir, el nombre de un conjunto de datos.
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.