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 \renewcommand
no ponto onde quero redefinir a macro?
O resultado deste exemplo é mostrado abaixo.
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 \datasetdef
comando 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 \datasetdef
aceita um único argumento, ou seja, o nome de um conjunto de dados.
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.