为什么下面的最小示例不起作用?
即,为了在宏中定义图形的浮点位置说明符,我需要做什么?(我知道我应该使用\newcommand
,但在“完整”示例中,错误是所涉及的“superfigure”命令的一部分。\newcommand
顺便说一下,它也无法正常工作。)
\documentclass{scrreprt}
\usepackage{blindtext}
\def\PosNotWorking{h}
\def\FramboxNotWorking{5cm}
\def\CaptionWorking{Caption is working.}
\begin{document}
\Blindtext[1]
\begin{figure}[\PosNotWorking]
\centering
\framebox[5cm]{My special figure. (Pos: \PosNotWorking)}
\caption{\CaptionWorking}
\end{figure}
\Blindtext[1]
\end{document}
如果我编译这个,图形位于顶部(默认行为)。如果我输入\figure[h]
而不是\figure[\PosNotWorking]
,图形当然位于两个段落之间。
答案1
可选参数未展开,而是在检查每个包含字母的循环内使用。 在您的例子中,它只看到宏而不是包含的字母。 但是,如果您只想更改默认定位,您可以通过重新定义\fps@figure
(对于表格\fps@table
)来实现:
\makeatletter
% Make all figure use 'h' position by default:
\def\fps@figure{h}
\makeatother
如果您不想全局更改它并且仍然想使用\begin{figure}
您可以\edef
首先扩展它的环境:
\documentclass{scrreprt}
\usepackage[english]{babel}
\usepackage{blindtext}
\def\PosNowWorking{h}
\def\FramboxNotWorking{5cm}
\def\CaptionWorking{Caption is working.}
\begin{document}
\Blindtext[1]
\edef\efigure{\noexpand\begin{figure}[\PosNowWorking]}%
\efigure
\centering
\framebox[5cm]{My special figure. (Pos: \PosNowWorking)}
\caption{\CaptionWorking}
\end{figure}
\Blindtext[1]
\end{document}
或者:
\def\efigure{\begin{figure}}%
\expandafter\efigure\expandafter[\PosNowWorking]
或者figure
先重新定义环境以扩展其可选参数:
\let\origfigure\figure
\let\endorigfigure\endfigure
\renewenvironment{figure}[1][h]{%
\expandafter\origfigure\expandafter[#1]%
}{%
\endorigfigure
}
这样,您也可以轻松地将其设置h
为默认值或放入\PosNowWorking
其中。
答案2
重新定义\begin{figure}
和,end{figure}
如下所示:
\documentclass{article}
\usepackage[english,ngerman]{babel}
\usepackage{blindtext}
\def\beginmyfigure#1{\begin{figure}[#1]}
\def\endmyfigure{\end{figure}}
\def\FramboxNotWorking{5cm}
\def\CaptionWorking{Caption is working.}
\begin{document}
\Blindtext[1]
\beginmyfigure{b}
\centering
\framebox[5cm]{My special figure. (Pos: )}
\caption{\CaptionWorking}
\endmyfigure
\Blindtext[1]
\end{document}
答案3
按照这个方法试试;
\documentclass{scrreprt}
\usepackage[english]{babel}
\usepackage{blindtext}
\def\PosNotWorking{h}
\def\FramboxNotWorking{5cm}
\def\CaptionWorking{Caption is working.}
\begin{document}
\Blindtext[1]
\expandafter\figure\expandafter[\PosNotWorking]
\centering
\framebox[5cm]{My special figure. (Pos: \PosNotWorking)}
\caption{\CaptionWorking}
\endfigure
\Blindtext[1]
\end{document}
可选参数默认不展开