\includegraphics:可选参数中的命令

\includegraphics:可选参数中的命令

我想\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 widthmax 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产生所需的结果。

相关内容