同一命令被使用多次,但我只得到最後一個輸出

同一命令被使用多次,但我只得到最後一個輸出

我被定義\editor{strong text}並且\reviewer{strong text}命令被使用多次。但是,我只得到最後一個\editor{Some Text}指令的輸出。

我的類別文件定義了下面提到的命令:

\def\@editor{}
\def\editor#1{%
     \gdef\@editor{\raggedright \textbf{Edited by:}\newline #1}}

\def\@reviewer{}
\def\reviewer#1{%
     \gdef\@reviewer{\raggedright \textbf{Reviewed by:}\newline #1}}

\def\@maketitle{%
  \newpage
  \null
  \vskip 50pc%
\vbox{\hbox to 0pt{\vbox to 0pt{\vskip -40pc%
\begin{minipage}[b]{10pc}
{\@editor\par}
    \vskip 1.5em%
{\@reviewer\par}
    \vskip 1.5em%
{\@correspondence\par}%
    \vskip 1.5em%
{\@metanote}%
\end{minipage}
\hspace*{12pt}
\begin{minipage}[b]{31pc}  
  \let \footnote \thanks
    {\raggedright\fontsize{18pt}{20pt}\selectfont\color{colorA}\@title \par}%
    \vskip 1.5em%
    {\large
%      \lineskip .5em%
      \begin{tabular}[t]{l}%
        \raggedright\@author
      \end{tabular}\par}%
    \vskip 1em%
    {\@abstract\par}
    \vskip 1em%
    {\@keywords\par}
    \vskip 1em%
    {\@firstpara\par}
   \end{minipage}}}}%
  \par
  \vskip 8.5em}

我的 TeX 文件編碼如下:

\editor{Wagner L. Ara\'{u}jo, Universidade Federal de Vi\c{c}osa, Brazil}
\editor{Kannan L. juvio, Universidade Federal de Vi\c{c}osa, Brazil}
\reviewer{Jedrzej Jakub Szymanski, Max Planck Institute of Molecular Plant Physiology, Germany }
\reviewer{Dimas Mendes Ribeiro, Universidade Federal de Vi\c{c}osa, Brazil}

我不會改變編碼結構,因為我的.tex文件正在使用另一個轉換過程。我的問題是僅輸出列印最後的編輯器輸出。我不知道如何列印每位編輯及審稿人。請提供列印的解決方案超過編輯和審稿人的數量

我的輸出看起來是這樣的:

編輯審閱者詳細說明 tex 輸出圖像

答案1

通常你將元標題「編輯者:」加入到收集元資訊的巨集中,例如

\newcommand{\editor}[1]{\def\@editor{\raggedright \textbf{Edited by:}\newline #1}}

請注意,我使用 LaTeX 命令\newcommand作為頂級元宏(這是更好的!),並且\gdef內部元存儲的定義不需要該命令,即\@editor\def就足夠了。

在您的情況下,您可以使用元命令來增加內部儲存:

\newcommand{\editor}[1]{\edef\@editor{\@editor #1}}

為了對現有設定進行最少的更改,最終版本如下所示

\newcommand{\editor}[1]{\protected@edef\@editor{\@editor\newline#1\vspace{3pt}}}

完整代碼在最後給出。您會發現一些變化是不可避免的。這次我還清理了整體程式碼。

在此輸入影像描述

\documentclass{article}
\usepackage{color}

\makeatletter
\let\@editor\@empty
\newcommand{\editor}[1]{\protected@edef\@editor{\@editor\newline#1\vspace{3pt}}}
\let\@reviewer\@empty
\newcommand{\reviewer}[1]{\protected@edef\@reviewer{\@reviewer\newline#1\vspace{2pt}}}
\let\@correspondence\@empty
\newcommand{\correspondence}[1]{%
  \protected@edef\@correspondence{\@correspondence\newline#1\vspace{2pt}}}
\def\@maketitle{%
  \vspace{50pc}%
  \noindent
  \begin{minipage}{.33\textwidth}
    \raggedright
    \textbf{Edited by:}\vspace{3pt}
      \@editor
    \par\vspace{1.5em}
    \textbf{Reviewed by:}\vspace{3pt}
      \@reviewer
    \par\vspace{1.5em}
    \textit{Correspondence:}\vspace{3pt}
      \@correspondence
    \par\vspace{1.5em}
    \@metanote%
  \end{minipage}%
  \hspace{12pt}%
  \begin{minipage}{.66\textwidth}
    \let \footnote \thanks
    \let \and      \newline
    \begin{tabular}[t]{p{\textwidth}}
      {\fontsize{18pt}{20pt}\selectfont\color{blue}\@title} \\[1.5em]
      {\large \@author} \\[2em]
      {\small \@abstract} \\[1em]
      Keywords: \@keywords \\[1em]
      \@firstpara
    \end{tabular}
  \end{minipage}
  \par
  \vskip 8.5em}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%auxiliary macros (not provided in the MWE!)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\renewcommand{\abstract}[1]{\def\@abstract{#1}}
\newcommand{\keywords}[1]{\def\@keywords{#1}}
\let\@firstpara\@empty
\let\@metanote\@empty
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\makeatother

\editor{Wagner L. Ara\'{u}jo, Universidade Federal de Vi\c{c}osa, Brazil}
\editor{Kannan L. juvio, Universidade Federal de Vi\c{c}osa, Brazil}
\reviewer{Jedrzej Jakub Szymanski, Max Planck Institute of Molecular Plant Physiology, Germany }
\reviewer{Dimas Mendes Ribeiro, Universidade Federal de Vi\c{c}osa, Brazil}
\correspondence{Jana Doe, University of TeX Wizardry}
\author{John Doe}
\title{Multiple usage of meta macros}
\abstract{Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.   

Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.   

Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.}
\keywords{Lorem, Ipsum, Dolor, Sit}

\begin{document}
\maketitle
\end{document}

答案2

\editor正如一些評論中所說,和的當前定義\reviewer旨在設定內容,並且每個定義都會覆蓋前一個定義。

這是一個簡單的定義(使用etoolbox套件的清單處理工具,即使用\RequirePackage{etoolbox}或`\usepackage{etoolbox}來載入它)。

\newcommand{\@editor}{}
\newcommand{\@reviewer}{}

\newcommand{\editor}[1]{\listadd{\@editor}{#1}}
\newcommand{\reviewer}[1]{\listadd{\@reviewer}{#1}}
\newcommand{\printeditor}{Edited By:\newline\dolistloop{\@editor}}
\newcommand{\printreviewer}{Reviewed By:\newline\dolistloop{\@reviewer}} 

透過這種方式,命令\editor{some text}並將\reviewer{some text}其參數新增至編輯器清單(儲存在\@editor和 中\@reviewer)。這兩個命令\printeditor 循環\printreviewer遍歷列表並列印各自列表的內容。

例如, 在 的給定定義中將\@editor和替換\@reviewer\printeditor和。\printreviewer\maketitle

相關內容