includegraphicsの引数でのマクロの利用について

includegraphicsの引数でのマクロの利用について

- ぺけぽん の投稿
返信数: 4
お世話になります。
includegraphicsコマンドの引数をマクロで置換しようとしているのですが,
うまくいきません。

ソースに

\includegraphics[scale=1.0]{hogehoge1.pdf}
\includegraphics[scale=1.0]{hogehoge2.pdf}
\includegraphics[scale=1.0]{hogehoge3.pdf}
...(以下多数)


という記述があり,スケールの指定を始めとするオプション部分([ ]の内部)を
一括してマクロで指定したいのです。

つまり,

\newcommand{\SCALE}{scale=1.0}
\includegraphics[\SCALE]{hogehoge1.pdf}
...(以下省略)

として,scale=1.0の部分だけ書き換えて大きさを変更させたいのですが,
コンパイルすると

! Package keyval Error: scale=1.0 undefined.

と出てコンパイルが通りません。
何か対処法がありますでしょうか。

以下のようにすればいいとは思うのですが,
これだとscaleオプションしか使えなくなってしまいますので,
他のオプション,例えば,「width=」「height=」等が指定できなくなります。
そこで,オプションだけマクロで指定できるようにしたいのです。

\newcommand{\FIG}[2]{\includegraphics[scale=#1]{#2}}
\FIG{1.0}{hogehoge1.pdf}

ぺけぽん への返信

Re: includegraphicsの引数でのマクロの利用について

- Z. R. の投稿

「複数の \includegraphics に共通するパラメタをマクロに括り出したい」という意図であれば、

\newcommand{\SCALE}{scale=1.0}
\includegraphics[\SCALE]{hoge1.pdf}
\includegraphics[\SCALE,angle=90]{hoge2.pdf}
% 別のパラメタ設定
\newcommand{\SCALEa}{width=.8\linewidth}
\includegraphics[\SCALEa]{hoge3.pdf}
\includegraphics[\SCALEa,angle=90,pagebox=cropbox]{hoge4.pdf}

とする代わりに、

\newcommand{\includeSCALE}[2]{\includegraphics[scale=1.0,#1]{#2}}
\includeSCALE{}{hoge1.pdf}
\includeSCALE{angle=90}{hoge2.pdf}
% 別のパラメタ設定
\newcommand{\includeSCALEa}[2]{\includegraphics[width=.8\linewidth,#1]{#2}}
\includeSCALEa{}{hoge3.pdf}
\include\SCALEa{angle=90,pagebox=cropbox}{hoge4.pdf}

のようにすれば実現できるはずです。


※引数の key=value の部分だけをマクロ(\SCALE)にするのは一般的に不可ですが、マクロ引数(#1)にするのは可能です。なぜかというと、

\includeSCALE{angle=90}{hoge2.pdf}

を展開すると、

\includegraphics[scale=1.0,angle=90]{hoge2.pdf}

となるわけで、\includegraphicsが実行される時点ですでに当該の部分は普通の文字列になっているからです。

Z. R. への返信

Re: includegraphicsの引数でのマクロの利用について

- 北見 けん の投稿
\includegraphicsとパラメータをくっつけたマクロをパラメータごとに用意すると、
共通パラメータを組み合わせるときに困りそうですね。

オプション引数を強制的にマクロ展開するようにするのはいかがでしょうか。
引数の中に変なものを混ぜないように注意が必要にはなりますが。

\let\savedincludegraphics\includegraphics
\renewcommand\includegraphics[1][]{%
\begingroup
\edef\temp{\noexpand\savedincludegraphics[#1]}%
\expandafter
\endgroup
\temp}

\newcommand{\SCALE}{scale=2.0}
\newcommand{\WIDTH}{width=2in}

\includegraphics[]{hogehoge1.pdf}
\includegraphics[\SCALE,\WIDTH]{hogehoge1.pdf}
\includegraphics[\SCALE,height=4in]{hogehoge1.pdf}
北見 けん への返信

Re: includegraphicsの引数でのマクロの利用について

- ぺけぽん の投稿
北見けん さん

コメントありがとうございます。
マクロを駆使するといろいろできるんですね。
\expandafter とか \noexpand はふだんあまり使わないので,
勉強して理解しようと思います。
Z. R. への返信

Re: includegraphicsの引数でのマクロの利用について

- ぺけぽん の投稿
Z.R.さん

コメントありがとうございます。
なるほど,マクロの引数の一部として取り扱うことは可能なのですね。
オプション引数をひとくくりにすることばかり考えていました。