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}