Wie können gemeinsame Datenelemente für mehrere Makros wiederverwendet werden?

Wie können gemeinsame Datenelemente für mehrere Makros wiederverwendet werden?

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 \renewcommandan der Stelle einzusetzen, an der ich das Makro neu definieren möchte?

Das Ergebnis dieses Beispiels wird unten angezeigt.

Zwei Makros verwenden dieselben Datenelemente.

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 \datasetdefBefehl 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, \datasetdefist ähnlich wie \newcommand, aber Sie müssen nur den Namen des Makros und den Ersetzungstext (mit sechs Argumenten) angeben. Das mit definierte Makro \datasetdefbenötigt ein einziges Argument, nämlich den Namen eines Datensatzes.

Bildbeschreibung hier eingeben

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.

verwandte Informationen