여러 매크로에 공통 데이터 요소를 재사용하는 방법은 무엇입니까?

여러 매크로에 공통 데이터 요소를 재사용하는 방법은 무엇입니까?

매크로를 사용하여 동일한 문서에서 동일한 데이터 세트의 다양한 데이터 요소 조합을 두 번 이상 표시하고 싶습니다.

예를 들어, 매크로를 사용하여 데이터 세트 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는 귀하의 예와 같습니다.

관련 정보