用于图形位置的宏吗?

用于图形位置的宏吗?

为什么下面的最小示例不起作用?

即,为了在宏中定义图形的浮点位置说明符,我需要做什么?(我知道我应该使用\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}

可选参数默认不展开

相关内容