\def macro con múltiples parámetros

\def macro con múltiples parámetros

Estoy intentando modificar un archivo de estilo, tengo un 'def' como sigue:

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

Dentro de un 'título de creación' personalizado:

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

Soy nuevo en Tex/Macros, me preguntaba cómo puedo agregar el parámetro de escala a la macro de definición 'logotipo'. es decir, me gustaría parametrizar completamente la llamada a \includegraphics.

Editar: Como se muestra a continuación, agregué el logotipo en el 'maketitle', en un estilo simple, ¿no estoy seguro de si hay una mejor manera de hacerlo?

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

Respuesta1

La macro \logose puede definir con un parámetro opcional que toma las opciones para \includegraphics:

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

Uso para \includegraphics:

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

Las opciones deben expandirse primero, porque los caracteres de sintaxis, la coma y el signo igual para la lista de valores clave no deben ocultarse dentro de las macros.

Ejemplo para \logo:

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

O

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

Respuesta2

Tu puedes hacer

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

y utilícelo \make@logoen el punto donde crea el título personalizado, tal vez como

\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

Entonces, si el preámbulo del documento que usa su archivo de estilo tiene

\logo[scale=0.1]{file}

cuando se esté escribiendo el título, obtendrás

\includegraphics[scale=0.1]{file}

Sin una \logoorden, no obtendrás nada.

El \logocomando acepta, en su argumento opcional, cualquier opción válida para \includegraphics, así por ejemplo

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

etcétera.

Respuesta3

Si scalees todo lo que buscas y te sientes cómodo con una interfaz como \logo[0.7]{my-pic.png}, entonces funciona una simple \newcommandcon parámetro opcional:

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

Si no utiliza el argumento opcional, el valor predeterminado es 1.

información relacionada