매크로를 사용하여 동일한 문서에서 동일한 데이터 세트의 다양한 데이터 요소 조합을 두 번 이상 표시하고 싶습니다.
예를 들어, 매크로를 사용하여 데이터 세트 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
하지만 매크로 이름과 대체 텍스트(6개 인수 포함)만 명시하면 됩니다. 로 정의된 매크로는 \datasetdef
단일 인수, 즉 데이터 세트 이름을 사용합니다.
답변2
내가 생각해 낼 수 있는 가장 빠른 아이디어는 댓글에서 제안한 것과 반대입니다. 인수의 형식을 지정하는 일부 형식 매크로를 정의합니다. 그런 다음 dirst 인수를 자신에게 적용할 데이터 세트를 정의합니다.
\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는 귀하의 예와 같습니다.