複数のパラメータを持つ \def マクロ

複数のパラメータを持つ \def マクロ

スタイル ファイルを微調整しようとしています。次のような 'def' があります。

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

カスタム「make title」の内部:

\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

関連情報