\newenvironment 因特殊列表环境而失败

\newenvironment 因特殊列表环境而失败

我想使用showexpl,但要定义一个具有预定义设置的新环境。但我得到的只是紧急停止。

\documentclass{scrbook}
\RequirePackage{showexpl}
\lstdefinestyle{demoLatexStyle}{
    basicstyle=\small\ttfamily, % Standardschrift
    numbers=none,               % Ort der Zeilennummern
    frame=none,
}
\begin{document}
\newenvironment{showdemo}[1][]{\LTXexample[style=demoLatexStyle,#1]}{\endLTXexample}

\begin{LTXexample}[style=demoLatexStyle]
\LaTeX{} \LaTeX{}
\end{LTXexample}

\begin{showdemo}    
\LaTeX{} \LaTeX{}
\end{showdemo}

\end{document}

\openout3 = `testdemo.tmp'。软件包清单警告:输入行 24 的清单开始后文本丢失。!紧急停止。<> 测试demo.tex **(作业中止,未找到合法的 \end)

有什么提示我做错了什么吗?

答案1

第 4.16 节包裹listings指定要定义新环境,您需要使用以下与 LaTeX 类似的语法\newenvironment

\lstnewenvironment
    {<name>}[<number>][<optional default arg>]
    {<starting code>}
    {<ending code>}

\newenvironment因此,如果用以下内容替换:

\lstnewenvironment{showdemo}[1][]{%
    \lstset{style=demoLatexStyle,#1}}{}%

你得到了想要的结果:

在此处输入图片描述


更新

您也可以LTXinputExample在单独的文件中使用和添加必要的代码,或者使用包裹filecontents。由于您要求下面的环境,我已经定义了showdemoEnv,但我认为在这种情况下宏版本showdemo可能更好:

\documentclass{scrbook}
\RequirePackage{showexpl}
\lstdefinestyle{demoLatexStyle}{
    basicstyle=\small\ttfamily, % Standardschrift
    numbers=none,               % Ort der Zeilennummern
    frame=none,
}

\newcommand{\TempFileName}{\jobname.filecontents.tmp}%
\usepackage{filecontents}
\begin{filecontents*}{\TempFileName}
\LaTeX{} \LaTeX{}
\end{filecontents*}

\newenvironment{showdemoEnv}[2][]{% Environment version
    \LTXinputExample[style=demoLatexStyle,#1]{#2}%
}{%
  % Add any end environemnt code here.
}%

\newcommand{\showdemo}[2][]{% Macro version
    \LTXinputExample[style=demoLatexStyle,#1]{#2}%
}%


\begin{document}

\begin{LTXexample}[style=demoLatexStyle]
\LaTeX{} \LaTeX{}
\end{LTXexample}

\begin{showdemoEnv}{\TempFileName}    
\end{showdemoEnv}

\showdemo{\TempFileName}
\immediate\write18{rm \TempFileName}% Remove file
\end{document}

请注意,使用的是带星号的版本。这样可以防止通常会添加到文件中的filecontents*标题注释。filecontents

在此处输入图片描述

相关内容