我有一大组图片,我想使用\includegraphics
graphicx 包中的宏的可选参数将预定义设置应用于每张图片。
我想在文件顶部定义一次设置(如\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