固定数字的环境

固定数字的环境

我正在尝试创建一个环境,用于在框架环境中包含“图形”。由于框架环境中不允许使用浮动,因此我想创建一个fixedfigure可以在框架环境中使用的新环境。出于风格原因,我希望我的fixedfigure环境从用户的角度来看尽可能像figure环境。我有一些基本可以正常工作的功能,但有几个功能无法正常工作。此外,如果您发现我已经拥有的东西有问题,我总是渴望了解更多最佳实践。

  1. 在 周围留出一些垂直空间的最佳方法是什么?我尝试在环境的开头fixedfigure添加,但出现错误,因为没有行可以结束。\newlinefixedfigure

  2. 我希望能够fixedfigure使用caption命令在 中创建字幕(与我在普通 中创建字幕所使用的命令相同figure)。不幸的是,我找不到captionfixedfigure环境中临时重新定义的方法。我想我需要类似 的东西\newcommand{\caption}[1]{\captionof{figure}{#1}},但这不太合适。我也在let下面的示例中使用 进行了一次微弱的尝试(注释掉)。

\documentclass{article}
    \usepackage{caption}

    \newenvironment{fixedfigure}
    {
        % \let\caption\captionof
        \noindent
        \begin{minipage}{\textwidth}
    }
    {
        \end{minipage}
    }

\begin{document}

blah blah blah blah blah
blah blah blah blah blah
blah blah blah blah blah
blah blah blah blah blah
blah blah blah blah blah
blah blah blah blah blah

\begin{figure}
    \centering
    the contents of the figure
    \caption{the caption of the figure}
\end{figure}

blah blah blah blah blah
blah blah blah blah blah
blah blah blah blah blah
blah blah blah blah blah
blah blah blah blah blah

\begin{fixedfigure}
    \centering
    the contents of the figure
    % \caption{the caption of the figure}
    \captionof{figure}{the caption of the figure}
\end{fixedfigure}

blah blah blah blah blah
blah blah blah blah blah
blah blah blah blah blah
blah blah blah blah blah
blah blah blah blah blah

\end{document}

答案1

\vspace您可以使用带有一个参数(长度)的命令添加垂直空间。您的第二个问题稍微棘手一些。首先,您需要使用\renewcommand,因为\caption已经定义了。此外,您需要一个双井号来表示的参数\caption,而不是环境的参数fixedfigure。然而,显而易见的是

\renewcommand\caption[1]{\captionof{figure}{##1}}

使用时会导致TeX冻结\caption。事实证明,您需要\caption从宏内部恢复的定义。

\documentclass{article}
\usepackage{caption}

\newenvironment{fixedfigure}{%                                                                                                                
\let\oldcaption\caption
\renewcommand\caption[1]{\let\caption\oldcaption\captionof{figure}{##1}}
\noindent
\begin{minipage}{\textwidth}}
{\end{minipage}}

\begin{document}

\begin{figure}
    \centering
    the contents of the figure
    \caption{the caption of the figure}
\end{figure}

\begin{fixedfigure}
    \centering
    the contents of the figure

    \caption{the caption of the figure}
\end{fixedfigure}

\end{document}

答案2

请忘记重新定义\caption,只需将其添加\captionsetup{type=figure}到您的环境中即可。这有四个主要优点:

  1. 你不需要费心去重新定义
  2. 指向图片的超链接(使用 完成hyperref)将跳转到图片本身,而不是标题
  3. 的所有变体\caption也都可以,例如\caption*\caption[...]{...}
  4. 您的环境中的本地\captionsetups 不会被 覆盖\captionsetup[figure]{...},就像在普通figures 中一样。

(详情请参阅标题文档。)

\documentclass{article}
    \usepackage{caption,hyperref}
    \captionsetup[figure]{labelfont=bf}

    \newenvironment{fixedfigure}
    {%
        \par\vskip\intextsep
        \noindent
        \begin{minipage}{\textwidth}%
        \captionsetup{type=figure}%
    }
    {%
        \end{minipage}%
        \vskip\intextsep
    }

\begin{document}

\ref{fig:test}% will not jump to the figure (but to the caption instead) with redefined \caption

blah blah blah blah blah
blah blah blah blah blah
blah blah blah blah blah
blah blah blah blah blah
blah blah blah blah blah
blah blah blah blah blah

\begin{figure}
    \centering
    the contents of the figure
    \captionsetup{labelfont=it}% this one will overwrite "labelfont=bf" for this figure
    \caption{the caption of the figure}
\end{figure}

blah blah blah blah blah
blah blah blah blah blah
blah blah blah blah blah
blah blah blah blah blah
blah blah blah blah blah

\begin{fixedfigure}
    \centering
    the contents of the figure
    \captionsetup{labelfont=it}% this one should overwrite "labelfont=bf" for this figure
    \caption{the caption of the figure}\label{fig:test}
    \caption*{Hey, this works, too}
    \caption[Test]{And this one, too}
\end{fixedfigure}

blah blah blah blah blah
blah blah blah blah blah
blah blah blah blah blah
blah blah blah blah blah
blah blah blah blah blah

\end{document}

相关内容