pgfkeys:读取一个键并忽略其他键

pgfkeys:读取一个键并忽略其他键

在我自己的命令中,\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}

在此处输入图片描述

相关内容