我想在 figure-env 周围包装一个宏,以使我的文档更具可读性。下面是现在的最小示例:
\documentclass[10pt,a4paper]{article}
\usepackage{keyval}
\makeatletter
\define@key{image}{pos}{\def\i@pos{#1}} % define key-val
\setkeys{image}{pos=!htbp} % set default
\newcommand{\image}[2][]{%
\begingroup%
\setkeys{image}{#1}% set passed key-vals
\begin{figure}[\i@pos] % use positon
\centerline{\includegraphics[width=\textwidth]{#2}}
\end{figure}
\endgroup%}
\makeatother
\begin{document}
\end{document}
但似乎!htbp
没有设置默认位置,因为如果我直接设置它,\begin{figure}[!htbp]
它可以正常工作并且图像定位正确。
编辑:
我添加了\begin{document}
并\end{document}
按照评论中的建议使其可编译。
我很感谢你的帮助。
答案1
\begin{figure}
不扩展可选参数;当扩展发生时就太晚了。
\documentclass[10pt,a4paper]{article}
\usepackage{keyval}
\usepackage[demo]{graphicx}% draft is just for the example
\makeatletter
\define@key{image}{pos}{\def\i@pos{#1}} % define key-val
\setkeys{image}{pos=!htbp} % set default
\newcommand{\image}[2][]{%
\begingroup
\setkeys{image}{#1}% set passed key-vals
\def\@temp{\begin{figure}}%
\expandafter\@temp\expandafter[\i@pos]% use position
\centering
\includegraphics[width=\textwidth]{#2}
\end{figure}
\endgroup}
\makeatother
\begin{document}
Some text
\image[pos=!htbp]{foo}
Some other text
\end{document}
或者,由于赋予的值pos
是由不可扩展的标记组成的,
\newcommand{\image}[2][]{%
\begingroup
\setkeys{image}{#1}% set passed key-vals
\begingroup\edef\x{\endgroup
\noexpand\begin{figure}[\i@pos]}\x % use position
\centering
\includegraphics[width=\textwidth]{#2}
\end{figure}
\endgroup}