在我自己的命令中,\includegraphicsextended
我想向包含以下内容的 pdf 页面添加标题
文件 [文件名] 页面 [页码]
%1
因此,我想从 中的键中只读取page=...
键并忽略所有其他键,例如trim=...
和 ,clip
因为它们必须只转发到,\includegraphics
但我不想指定 的所有可能键\includegraphics
。我更希望能够像获取页面密钥并忽略所有其他密钥。
我想\includegraphicsextended
这样执行:
\includegraphicsextended[trim=35mm 163mm 35mm 28mm,clip,page=22]{file.pdf}
然后\includegraphicsextended
看起来应该是这样的:
\newcommand{\includegraphicsextended}[2][]{
\pgfkeys{#1}
\begin{figure}[H]
\includegraphics[#1]{#2}
\caption{File \detokenize{#2} Page \pgfkeyPage}
\end{figure}
}
答案1
您可以使用.unknown
密钥处理程序来构建转发到的列表\includegraphics
。
\documentclass{article}
\usepackage{pgf}
\usepackage{graphicx}
\usepackage{float}
\pgfkeys{/Silvan/.cd,}
\newcommand{\includegraphicsextended}[2][]{\begingroup
\def\rawkey/##1\relax{\edef\mykey{##1}}%
\let\lstgrph\relax
\edef\pgfkeyPage{0}%
\pgfkeys{/handlers/.unknown/.code={\expandafter\rawkey\pgfkeyscurrentkey\relax
\expandafter\ifx\expandafter\pgfkeysnovalue\pgfkeyscurrentvalue\relax
%\typeout{no value}
\else
\edef\mykey{\mykey=\pgfkeyscurrentvalue}%
\fi
\ifx\lstgrph\relax
\edef\lstgrph{\mykey}%
\else
\edef\lstgrph{\lstgrph,\mykey}%
\fi},page/.code=\edef\pgfkeyPage{##1}}%
\pgfkeys{#1}%
\begin{figure}[H]
\edef\temp{\noexpand\includegraphics[\lstgrph]{#2}}%
\centering\temp
\caption{File \detokenize{#2} Page \pgfkeyPage}
\end{figure}\endgroup
}
\begin{document}
\includegraphicsextended[trim=35mm 163mm 35mm 28mm,clip,page=22]{example-image-duck.pdf}
\end{document}