![\includegraphics:可选参数中的命令](https://linux22.com/image/246589/%5Cincludegraphics%EF%BC%9A%E5%8F%AF%E9%80%89%E5%8F%82%E6%95%B0%E4%B8%AD%E7%9A%84%E5%91%BD%E4%BB%A4.png)
我想\includegraphics
通过命令传递一些参数,但无法按预期工作。我的 M(n)WE:
\documentclass{article}
\usepackage{graphicx}
\begin{document}
\newcommand{\widthText}{,width=3cm}
\includegraphics[scale=0.5 \widthText]{picture}
\end{document}
我想重点是\widthText
先进行扩展...
在我的实际代码中,命令\widthText
实际上要么是上面给出的命令,要么是空的,这取决于某些布尔值,并且我还有一个\heightText
设置高度的命令。
答案1
按照 OP 的愿望,这里有一个解决方案。
\documentclass{article}
\usepackage{graphicx}
\makeatletter
\protected\def\includeGraphics{\@testopt\roy@includegraphics{}}
\def\roy@includegraphics[#1]#2{%
\begingroup
% Every expandable token in #1 may be expanded here:
\edef\x{\endgroup\noexpand\includegraphics[#1]}\x{#2}%
}
\makeatother
\begin{document}
\newcommand{\widthText}{,width=3cm}
% Since double comma (,,) in the key-value pairs doesn't hurt both keyval and
% xkeyval packages, and since the user of \widthText might forget to insert
% a comma before 'width', let us add a potentially redundant comma in the
% following:
\includeGraphics[viewport=20 21 590 400,scale=0.5, \widthText]{./Graphics/comet1}
\end{document}
答案2
graphicx 使用的 keyval 系统在解析时不扩展宏,因此宏可以用作值的键。预期用途更像是
\newcommand{\widthText}{\ifsomething 3cm \else \Gin@nat@width \fi}
\includegraphics[scale=0.5, width=\widthText]{picture}
其中\Gin@nat@width
是自然宽度。
我原来的答案建议\width
可以使用,感谢评论中的修正。\Gin@nat@width
有效,但意味着你的定义必须在包中或里面。\makeatletter...
在下面,前两个是等效的,第二个缩放到一半大小。
\documentclass{article}
\usepackage{graphicx}
\begin{document}
\makeatletter
\fbox{\includegraphics[]{fj.png}}
\fbox{\includegraphics[width=\Gin@nat@width]{fj.png}}
\fbox{\includegraphics[width=0.5\Gin@nat@width]{fj.png}}
\end{document}
答案3
处理 key=value 对的代码必须能够看到分隔逗号,因此它不能包含在宏中。您需要手动扩展宏的内容或\includegraphics
以其他方式将其提供给宏。对于第一种方法,您可以使用\expandafter
或\edef
。
还有我的adjustbox
包,它提供了密钥min width
和max width
,使用\adjincludegraphics[<key options>]{<filename>}
或\adjustimage{<key option>}{<filename>}
或通过使用选项加载包export
,这使得所有新的密钥选项都可以正常使用\includegraphics
。我认为这也可能对您有所帮助,具体取决于您到底想做什么。
答案4
这不是一个答案,但也许是另一种方法……
如果您想要预定义一些键,可以使用 来设置它们\setkeys{Gin}{<options>}
。这些键可以在本地覆盖。
\documentclass{article}
\usepackage[demo]{graphicx}
\setkeys{Gin}{width=4cm,height=2cm}
\begin{document}
\includegraphics{file1}
\includegraphics[width=2cm]{file1}
\end{document}
注意:此功能不适用于所有选项,例如使用scale
不会\setkeys
产生所需的结果。