\def 具有多個參數的宏

\def 具有多個參數的宏

我正在嘗試調整樣式文件,我有一個“def”,如下所示:

\def\logo#1{\gdef\@logo{#1}} \gdef\@logo{}

在自訂「製作標題」內部:

\includegraphics[scale=0.1]{\@logo}

我是 Tex/Macros 的新手,我只是想知道如何將比例參數添加到“logo”def 巨集中?即我想完全參數化對\includegraphics.

編輯:如下所示,我已將徽標添加到“maketitle”中,採用簡單的樣式,不確定是否有更好的方法來做到這一點?

\newcommand{\logo}[2][]{%
  \gdef\make@logo{\includegraphics[#1]{#2}}%
}
\let\make@logo\relax

%% title
\def\@maketitle
   {
   \clearpage
   \vskip -3em

   \ifx\make@logo\relax
   \else
    \make@logo
   \fi

   \newpage
   \thispagestyle{empty}
    \vspace*{-24pt}
    \begin{center}
      {\Large \bf \@title \par}\vspace*{24pt}{
        \lineskip 1em
        \begin{tabular}[t]{c}
            \@author \\
            \vspace*{1pt}\
        \end{tabular}
      }
      \vskip 1em
      \vspace*{12pt}
    \end{center}
   }

答案1

\logo可使用可選參數定義宏,此參數採用以下選項\includegraphics

\newcommand*{\logo}[2][]{%
  \gdef\@logo@params{#1}%
  \gdef\@logo{#2}%
}
\newcommand*{\@logo@params}{}
\newcommand*{\@logo}{}

用途\includegraphics

\expandafter\includegraphics\expandafter[\@logo@params]{\@logo}

需要先擴充選項,因為鍵值清單的語法字元逗號和等號不能隱藏在巨集內部。

範例\logo

\logo[scale=0.1]{example-image-a}

或者

\logo[width=2cm, angle=90]{example-image-a}

答案2

你可以做

\newcommand{\logo}[2][]{%
  \gdef\make@logo{\includegraphics[#1]{#2}}%
}
\let\make@logo\relax

\make@logo並在建立自訂標題時使用,也許像

\ifx\make@logo\relax
  % code for no logo, maybe nothing
\else
  % code before the logo, maybe \begin{center}
  \make@logo
  % code after the logo, maybe \end{center}
\fi

因此,如果使用您的樣式文件的文檔序言有

\logo[scale=0.1]{file}

當標題被排版時你會得到

\includegraphics[scale=0.1]{file}

沒有\logo命令,你將一無所獲。

\logo命令在其可選參數中接受任何對 有效的選項\includegraphics,例如

\logo[width=3cm]{file}
\logo[width=3cm,height=4cm,keepaspectratio]{file}

等等。

答案3

如果scale這就是您所追求的,並且您對像這樣的介面感到滿意\logo[0.7]{my-pic.png},那麼\newcommand帶有可選參數的簡單方法就可以了:

\newcommand{\logo}[2][1]{\includegraphics[scale=#1]{#2}}

如果您不使用可選參數,則預設為1.

相關內容