我正在开发一个宏来帮助我将图形插入到文档中,并可配置位置。我正在使用该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}
}