我定义了一个浮动环境如下这个答案在“可选标题”版本中:
\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}