我想使用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