如何定义 includegraphics 的逗号分隔参数列表

如何定义 includegraphics 的逗号分隔参数列表

我有一大组图片,我想使用\includegraphicsgraphicx 包中的宏的可选参数将预定义设置应用于每张图片。

我想在文件顶部定义一次设置(如\def\settings{width=\textwidth, angle=90}),然后将它们应用到我的所有图像,以便我可以从一个地方修改所有设置。

如果我运行以下代码块,它会给我错误的版本“程序包 xkeyval 错误:‘width=\textwidth, angle=90’ 在‘Gin’系列中未定义“,这似乎是因为它将我的整个设置组解释为单个键输入。

\documentclass{article}
\usepackage{graphix}
\begin{document}

    \def\settingsA{width=\textwidth, angle=90}
    \def\settingsB{page=1, scale=.1}
    \def\settingsC{angle=90, scale=.5}

    \begin{figure}
        \includegraphics[\settingsA]{filename1.png}
        \label{fig:oneofonehundred}
    \end{figure}

    \begin{figure}
        \includegraphics[\settingsB]{filename2.pdf}
        \label{fig:twoofonehundred}
    \end{figure}

    \begin{figure}
        \includegraphics[\settingsC]{filename3.jpg}
        \label{fig:threeofonehundred}
    \end{figure}

 \end{document}

修改此设置字符串以使其被正确解释的技术是什么?如何传递被解释为一组参数而不是一个字符串的可选参数?

提前致谢!

答案1

只需定义新的键:

\documentclass{article}
\usepackage{graphicx}

\makeatletter
\define@key{Gin}{settingsA}[]{\setkeys{Gin}{width=\textwidth, angle=90}}
\define@key{Gin}{settingsB}[]{\setkeys{Gin}{page=1, scale=.1}}
\define@key{Gin}{settingsC}[]{\setkeys{Gin}{angle=-90, scale=.5}}
\makeatother

\begin{document}

\includegraphics[settingsA]{example-image-a}

\includegraphics[settingsB]{example-image-b}

\includegraphics[settingsC]{example-image-c}

\end{document}

在此处输入图片描述

稍微解释一下。该graphicx包依赖于keyval提供的键值语法,并将Gin(图形包含)保留为 的键的家族名称\includegraphics。只需通过以下方式添加新键:

\define@key{Gin}{<name>}[<default value>]{<code>}

\includegraphics[<options>]{file}命令将执行

\setkeys{Gin}{<options>}

settingsA并且将处理每个已知键。等的默认空值是为了让您settingsA无需输入 即可直接输入=something

甚至可以改进它;比如说,如果settingsC你想要改变角度;

\define@key{Gin}{settingsC}[-90]{\setkeys{Gin}{angle=#1, scale=.5}}

您可以指定settingsC角度为-90

settingsC=45

角度为45

警告确保不要定义已经存在的键:\define@key将会默默覆盖它。

答案2

创建自己的包含图形命令。如下所示:

\newcommand\myincludegraphics[2]{%%
   \expandafter\includegraphics\expandafter[#1]{#2}}

您的代码存在问题,在构造中

\includegraphics[\settingsA]{filehandle}

未展开的内容\settingsA将被传递给密钥解析器,在那里它将无法匹配任何密钥。通过使用上述命令,您可以编写类似以下内容的内容:

\myincludegraphics{\settingsA}{filehandle}

通过使用\expandafter,将会在有机会将可选参数传递给其解析器\settingsA时进行扩展。\includegraphics

相关内容