Ich möchte Makros verwenden, um verschiedene Kombinationen von Datenelementen aus demselben Datensatz mehrmals im selben Dokument darzustellen.
So ist es beispielsweise ganz einfach, die Elemente aus Datensatz A mithilfe eines Makros in einer Tabelle zusammenzufassen:
\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}
Nun möchte ich jedoch einige der gleichen Elemente aus Datensatz A wiederverwenden und in einem anderen Format, aber im gleichen Dokument anzeigen. Beispiel:
\renewcommand\dataset[6]{%
The first element of Data Set #1, is the data set label.
The fourth element for Data Set #1 is #4.}
Wie kann ich Makros definieren, die Eingabeparameter aus dem gleichen Datensatz verwenden, so dass ich Datensätze nur einmal eingeben muss? Ist das der eleganteste Weg? Also \renewcommand
an der Stelle einzusetzen, an der ich das Makro neu definieren möchte?
Das Ergebnis dieses Beispiels wird unten angezeigt.
In der vollständigen Anwendung verwende ich \input{data.tex}
. Der Inhalt dieser Datei sieht folgendermaßen aus:
\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
Antwort1
Sie können eine Infrastruktur hinter Datensätzen definieren.
Nach dem Laden der Datensätze verweisen Sie auf jeden einzelnen davon über das erste Element (Synopsis). Ich stelle den \datasetdef
Befehl zum Definieren verschiedener Makros bereit, die Datensätze verwenden.
\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}
Wie Sie sehen, \datasetdef
ist ähnlich wie \newcommand
, aber Sie müssen nur den Namen des Makros und den Ersetzungstext (mit sechs Argumenten) angeben. Das mit definierte Makro \datasetdef
benötigt ein einziges Argument, nämlich den Namen eines Datensatzes.
Antwort2
Die schnellste Idee, die mir eingefallen ist, ist das Gegenteil von dem, was im Kommentar vorgeschlagen wurde. Sie definieren einige Formatmakros, die ihre Argumente formatieren. Dann definieren Sie den Datensatz, der das erste Argument auf sich selbst anwendet:
\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}
Das PDF sieht wie Ihr Beispiel aus.