Макрос \def с несколькими параметрами

Макрос \def с несколькими параметрами

Я пытаюсь настроить файл стиля, у меня есть «def» следующего вида:

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

Внутри пользовательского заголовка «make»:

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

Я новичок в Tex/Macros, мне просто интересно, как добавить параметр масштаба в макрос определения 'logo'? То есть я хотел бы полностью параметризовать вызов \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.

Связанный контент