\def macro com múltiplos parâmetros

\def macro com múltiplos parâmetros

Estou tentando ajustar um arquivo de estilo, tenho um 'def' da seguinte forma:

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

Dentro de um 'título de criação' personalizado:

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

Sou novo em Tex/Macros, só queria saber como posso adicionar o parâmetro de escala à macro def 'logo'? ou seja, eu gostaria de parametrizar totalmente a chamada para \includegraphics.

Editar: Conforme abaixo, adicionei o logotipo ao 'maketitle', em um estilo simples, não tem certeza se existe uma maneira melhor de fazer isso?

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

Responder1

A macro \logopode ser definida com um parâmetro opcional que leva as opções 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}

As opções precisam ser expandidas primeiro, porque os caracteres de sintaxe vírgula e sinal de igual para a lista de valores-chave não devem estar ocultos dentro das macros.

Exemplo para \logo:

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

Ou

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

Responder2

Você pode fazer

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

e use \make@logono ponto onde você cria o título personalizado, talvez 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

Portanto, se o preâmbulo do documento usando seu arquivo de estilo tiver

\logo[scale=0.1]{file}

quando o título estiver sendo digitado, você obterá

\includegraphics[scale=0.1]{file}

Sem um \logocomando, você não conseguirá nada.

O \logocomando aceita, em seu argumento opcional, quaisquer opções válidas para \includegraphics, por exemplo

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

e assim por diante.

Responder3

Se scaleé tudo o que você procura e se sente confortável com uma interface como \logo[0.7]{my-pic.png}, então um \newcommandparâmetro simples com opcional funciona:

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

Se você não estiver usando o argumento opcional, o padrão é 1.

informação relacionada