带有框外标题的浮动环境

带有框外标题的浮动环境

我定义了一个浮动环境如下这个答案在“可选标题”版本中:

\documentclass{article}
\usepackage{newfloat}
\usepackage{caption}
\DeclareFloatingEnvironment[fileext=frm,placement={!ht},name=Frame]{myfloat}

\captionsetup[myfloat]{labelfont=bf}
\usepackage{lipsum}
\usepackage[framemethod=TikZ]{mdframed}
\usepackage[colorlinks=true]{hyperref}

\newenvironment{frameenv}[1][]
{\begin{myfloat}[tb]
        \begin{mdframed}[roundcorner=10pt,backgroundcolor=blue!10]
        \caption{#1}
        }
        {\end{mdframed}\end{myfloat}
}

\begin{document}

    \lipsum[1]

    \begin{frameenv}[Details for the caption]\label{frame1}
        \lipsum[1]
    \end{frameenv}

    See frame \ref{frame1}.

\end{document}

现在我想将标题移到框外,因此我尝试将命令移动到和之间的参数\caption{#1]中,并将环境的定义更改为以下内容:{enddef}\newenvironment{}\end{mdframed}\end{myfloat}frameenv

\newenvironment{frameenv}[1][]
{\begin{myfloat}[tb]
        \begin{mdframed}[roundcorner=10pt,backgroundcolor=blue!10]
        }
        {\end{mdframed}\caption{#1}\end{myfloat}
}

当我编译该文档时出现错误:

! \endframeenv 定义中的参数数量非法。

1

l.16 }

我不知道我的错误在哪里。

我怎样才能将标题移到框外面?

答案1

一种方法是#1使用 偷偷进入第二部分\def\mycaption{#1},然后\expandafter\caption{\expandafter\mycaption}进入最后。非常感谢 Axel Sommerfeldt 指出 s\expandafter以及它们的作用!

\documentclass{article}
\usepackage{newfloat}
\usepackage{caption}
\DeclareFloatingEnvironment[fileext=frm,placement={!ht},name=Frame]{myfloat}

\captionsetup[myfloat]{labelfont=bf}
\usepackage{lipsum}
\usepackage[framemethod=TikZ]{mdframed}
\usepackage[colorlinks=true]{hyperref}

\newenvironment{frameenv}[1][]
{\def\mycaption{#1}\begin{myfloat}[tb]
        \begin{mdframed}[roundcorner=10pt,backgroundcolor=blue!10]
        }
        {\end{mdframed}\expandafter\caption{\expandafter\mycaption}\end{myfloat}
}

\begin{document}

    \lipsum[1]

    \begin{frameenv}[Details for the caption\label{frame1}]
        \lipsum[1]
    \end{frameenv}

    See frame \ref{frame1}.

\end{document}

在此处输入图片描述

相关内容