如何為多個宏重複使用公用資料元素?

如何為多個宏重複使用公用資料元素?

我想使用巨集在同一文件中多次呈現相同資料集中資料元素的不同組合。

例如,使用巨集可以輕鬆地將資料集 A 中的元素匯總到表中:

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

但現在我想重用資料集 A 中的一些相同元素,以不同的格式顯示,但在同一文件中。例如:

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

如何定義使用來自同一資料集的輸入參數的宏,以便我只需輸入一次資料集?這是最優雅的方式嗎?也就是說,\renewcommand在我想重新定義巨集的地方使用?

該範例的結果如下所示。

使用相同資料元素的兩個巨集。

在完整的應用程式中,我使用\input{data.tex}.該文件的內容如下所示:

\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

答案1

您可以定義資料集背後的一些基礎設施。

載入資料集後,您可以透過第一項(概要)來引用每個資料集。我提供了\datasetdef用於定義使用資料集的各種巨集的命令。

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

如您所見,\datasetdef與 類似\newcommand,但您只需說明巨集的名稱和替換文字(帶有六個參數)。定義的巨集\datasetdef採用單一參數,即資料集的名稱。

在此輸入影像描述

答案2

我能想到的最快的想法是與評論中的建議相反的想法。您定義一些格式化巨集來格式化它們的參數。然後定義將 dist 參數套用至自身的資料集:

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

pdf 看起來像你的例子。

相關內容