从包的文档中graphicx
:
keyval
包中使用的大多数键也可以使用该包提供的graphicx
命令进行设置。\setkeys
keyval
例如,假设您希望将当前文档中包含的所有文件缩放为文本行宽度的 75%,那么可以发出以下命令:
\setkeys{Gin}{width=0.75\textwidth}
这是与“图形包含”相关的键
‘Gin’
的名称。除了可选参数中实际给出的任何其他键设置外,所有后续命令(在同一组或环境中)都将像已指定一样运行。keyval
\includegraphics
[width=0.75\textwidth]
我尝试使用它来创建一个参数,该参数使用pgfkeys
包接受键并将其无法识别的键传递给\includegraphics
命令。这是一个玩具工作示例:
\documentclass[convert]{standalone}
\usepackage{graphicx,pgfkeys}
\newcommand{\mykeyset}[1]{\pgfqkeys{/me}{#1}}
\mykeyset{graphic options/.code={}}
\mykeyset{set graphic option/.style={graphic options/.append code=#1}}
%Set up a handler for unknown keys
\mykeyset{.unknown/.code = %
{%
\edef\unknownkey{\pgfkeyscurrentname}%
\mykeyset{set graphic option/.expand once = {\expandafter\setkeys\expandafter{\expandafter G\expandafter i\expandafter n\expandafter}\expandafter{\unknownkey=#1}}}%
}%
}
\newcommand{\myincludegraphics}[2][]{\begingroup%
\mykeyset{#1}%
\mykeyset{graphic options}%
\includegraphics{#2}%
\endgroup%
}
\begin{document}
\myincludegraphics[width = 5cm, height = 8cm]{example-image}
\myincludegraphics[scale=0.5]{example-image}
\myincludegraphics{example-image}
\end{document}
带输出
请注意,这适用于width
和height
键,但不适用于scale
键。这本身不是问题——我有一种scale
单独处理键的方法——但我想知道哪些其他键需要特殊处理。因此,我的问题是:
哪些命令键\includegraphics
不能被全局设置?
答案1
非常出色的文档不是吗:-)
一般来说,设置键或多或少只是进行宏定义,因此您无法提前设置的键是在\includegraphics
处理键之前初始化的键。查看代码(奇怪的是比文档更有启发性),唯一相关的初始化是
\@tempswafalse
并且使用该布尔标志的键只是angle
和scale
。
标记的原因是大多数图形包含后端可以“本机”缩放图像,因此如果单独使用缩放,它将被传递给后端驱动程序代码,但如果图像已经旋转,然后旋转后的图像被缩放,则\includegraphics
本质上会在基本图像包含周围插入一个 \scalebox{}{\rotatebox{...
。也许可以以不同的方式处理它,以便您的缩放示例可以工作,但那是很久以前的事了:-)
对于略有不同的原因clip
也应列出,请参阅
http://www.latex-project.org/cgi-bin/ltxbugs2html?pr=graphics/2890