\def Makro mit mehreren Parametern

\def Makro mit mehreren Parametern

Ich versuche, eine Stildatei zu optimieren. Ich habe eine „Def“ wie folgt:

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

Innerhalb eines benutzerdefinierten „Titel erstellen“:

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

Ich bin neu bei Tex/Macros und habe mich nur gefragt, wie ich den Skalierungsparameter zum Def-Makro „Logo“ hinzufügen kann. Das heißt, ich möchte den Aufruf vollständig parametrisieren \includegraphics.

Bearbeiten: Wie unten beschrieben, habe ich das Logo in einem einfachen Stil in „Maketitle“ eingefügt. Ich bin nicht sicher, ob es dafür eine bessere Möglichkeit gibt?

\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}
   }

Antwort1

Makros \logokönnen mit einem optionalen Parameter definiert werden, der die Optionen für Folgendes annimmt \includegraphics:

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

Verwendung für \includegraphics:

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

Die Optionen müssen zunächst erweitert werden, da die Syntaxzeichen Komma und Gleichheitszeichen für die Schlüssel-Wert-Liste nicht in Makros versteckt werden dürfen.

Beispiel für \logo:

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

Oder

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

Antwort2

Du kannst tun

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

und verwenden Sie \make@logoan der Stelle, an der Sie den benutzerdefinierten Titel erstellen, vielleicht wie

\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

Wenn also die Dokumentpräambel, die Ihre Stildatei verwendet,

\logo[scale=0.1]{file}

Wenn der Titel gesetzt wird, erhalten Sie

\includegraphics[scale=0.1]{file}

Ohne \logoBefehl erreichen Sie nichts.

Der \logoBefehl akzeptiert in seinem optionalen Argument alle für gültigen Optionen \includegraphics, also zum Beispiel

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

und so weiter.

Antwort3

Wenn scaledas alles ist, was Sie möchten, und Sie mit einer Schnittstelle wie vertraut sind \logo[0.7]{my-pic.png}, funktioniert eine einfache \newcommandmit optionalem Parameter:

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

Wenn Sie das optionale Argument nicht verwenden, wird standardmäßig verwendet 1.

verwandte Informationen