在 mdframed 中使用列表会导致未知的编译错误

在 mdframed 中使用列表会导致未知的编译错误

listings我在使用和包时遇到了问题mdframed。以下代码编译时出现错误,但我设法获得的唯一信息是它是致命的。

\documentclass{article}
\usepackage[a6paper]{geometry}
\usepackage{mdframed}
\usepackage{listings}
\newmdenv[linecolor=red,frametitle=Infobox]{infoboxmd}
\makeatletter
\def\@noargument{noargument}
\newenvironment{infobox}[1][noargument]
  {\def\@opt@arg{#1}% Caption optional argument
   \infoboxmd}
  {\endinfoboxmd\par\nobreak%
   \ifx\@opt@arg\@noargument\else\centering\@opt@arg\par\fi}%
\makeatother

\lstnewenvironment{codetext}[1]{
Something.
#1
\infobox[#1]
Some text.
}{
Some text.
\endinfobox
Something.
}
%\BeforeBeginEnvironment{codetext}{\begin{infobox}[myonlycaption]}
%\AfterEndEnvironment{codetext}{\end{infobox}}

\begin{document}

\begin{codetext}{caption}
Some code.
\end{codetext}

Some text.

\end{document}

如果我使用(注释掉)\BeforeBeginEnvironment命令代替\infobox它可以工作,但我无法以这种方式指定参数。

相关主题:mdframed 字幕线程

答案1

我不知道出了什么问题,但我有一个可行的替代方案:不是定义一个新mdframed环境,而是定义一种新样式并将其与基本环境mdframed一起使用:mdframed

在此处输入图片描述

\documentclass{article}
\usepackage[a6paper]{geometry}
\usepackage{mdframed}
\usepackage{listings}

\mdfdefinestyle{infoboxmd}{linecolor=red,frametitle=Infobox}

\makeatletter
\def\@noargument{noargument}
\newenvironment{infobox}[1][noargument]
  {\def\@opt@arg{#1}% Caption optional argument
   \mdframed[style=infoboxmd]}
  {\endmdframed\par\nobreak%
   \ifx\@opt@arg\@noargument\else\centering\@opt@arg\par\fi}%
\makeatother

\lstnewenvironment{codetext}[1]{%
  Something.
  #1
  \infobox[#1]
  Some text.
}{%
  Some text.
  \endinfobox
  Something.
}

\begin{document}

\begin{codetext}{caption}
Some code.
\end{codetext}

Some text.

\end{document}

相关内容