LaTeX:图形环境不遵守预定义的放置参数

LaTeX:图形环境不遵守预定义的放置参数

我正在开发一个宏来帮助我将图形插入到文档中,并可配置位置。我正在使用该pgfkeys包来解析传递给该宏的 key=value 参数,其中一个是位置参数:

\documentclass{article}

\usepackage{float}
\usepackage[demo]{graphicx}
\usepackage{lipsum}
\usepackage{pgfkeys}

\pgfkeys{
    /fig/.is family, /fig,
    default/.style = {
        pos =,
    },
    pos/.estore in = \figPos,
}

\newcommand\mymacro[2][]{
    \pgfkeys{/fig, default, #1}
    {\em Placement parameter is: \figPos}
    \begin{figure}[\figPos]
        \includegraphics{#2}
    \end{figure}
}

\begin{document}

\section{Working as expected}

\lipsum[1]

\begin{figure}[t]
\includegraphics{image.jpg}
\end{figure}%

\lipsum[2]

\lipsum[3]

\section{Not working as expected}

\lipsum[1]

\mymacro[pos=t]{image.jpg}

\lipsum[2]

\lipsum[3]

\end{document}

直接使用figure环境时,图像会按预期定位,即位于页面顶部。但是,使用宏时,图像会包含在文档末尾附近的某个位置,而不是靠近其定义的位置 - 就好像我提供了无效的放置参数一样。

有什么想法和/或解决方法吗?

答案1

从根本上讲,的可选参数figure尚未完全展开。您可以按以下方式扩展它:

\newcommand\mymacro[2][]{%
  \pgfkeys{/fig, default, #1}%
  {\itshape Placement parameter is: \figPos}%
  \begingroup\edef\x{\endgroup\noexpand\begin{figure}[\figPos]}\x
    \includegraphics{#2}
  \end{figure}
}

相关内容