Я хочу использовать макросы для представления различных комбинаций элементов данных из одного и того же набора данных более одного раза в одном документе.
Например, можно легко суммировать элементы из набора данных 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
Самая быстрая идея, которая пришла мне в голову, — это обратная тому, что было предложено в комментарии. Вы определяете некоторые макросы форматирования, которые форматируют свои аргументы. Затем вы определяете набор данных, который применит первый аргумент к себе:
\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-файл выглядит как ваш пример.