如何仅使用包 listings.sty 创建类似 LTXexample 的环境?

如何仅使用包 listings.sty 创建类似 LTXexample 的环境?

由于某种原因,我被迫创建一个类似 LTXexample 的环境。

以下是我的努力,但它不起作用。:-)

我不知道如何解决这个问题。

先感谢您。

\documentclass[dvips,dvipsnames]{article}
\usepackage{xcolor}

\usepackage{listings}
\lstset{%
    literate=   {ï}{}0
                {»}{}0
                {¿}{}0,
    breaklines=true,
    breakindent=0pt,
    basicstyle=\ttfamily\tiny,
    keywordstyle=\color{blue}\sffamily\bfseries,    
    commentstyle=\color{OliveGreen}\itshape,                                    
    stringstyle=\rmfamily,
    showstringspaces=false,
    backgroundcolor=\color{Yellow!30},
    language={PSTricks}%
}

\usepackage{pstricks}


\newcommand{\temporary}{}

\newenvironment{myLTXexample}%
{%
    \renewcommand{\temporary}%
    \bgroup\ignorespaces%
}
{%
    \egroup%
    \begin{minipage}{0.4\linewidth}%
            \begin{lstlisting}
                    \temporary%
            \end{lstlisting} 
    \end{minipage}
    %
    \hspace{5mm} 
    %
    \begin{minipage}{0.4\linewidth}
            \temporary
    \end{minipage}
}

\begin{document}

\begin{myLTXexample}
testing.... \LaTeX !
\end{myLTXexample}

\end{document}

编辑 1:这个例子是我的真实场景的简化版本。:-)

答案1

这是使用 fancyvrb 的解决方案。前面\tabularnewline需要 &,代码本身由 hedaer 定义读取。

\documentclass{article}

\usepackage{pstricks,fancyvrb,array,listings}
\lstset{basicstyle=\ttfamily\small}

\def\endExample{\end{VerbatimOut}
  \input{\jobname.tmp}}
\newcommand\Example{%
\VerbatimEnvironment
\begin{VerbatimOut}{\jobname.tmp}}

\begin{document}

\begin{tabular}{@{} m{0.5\linewidth}@{} 
                    >{\lstinputlisting{\jobname.tmp}}m{0.5\linewidth} @{}}

\begin{Example}
\pspicture(3,2)
\psframe*[linecolor=blue!30](3,2)
\endpspicture
\end{Example}
& 
\tabularnewline

\begin{Example}
\pspicture(3,2)
\psframe*[linecolor=red!30](3,2)
\endpspicture
\end{Example}
& 
\tabularnewline

\end{tabular}

\end{document}

答案2

您无法通过“供以后使用”命令收集您的列表。列表必须更改许多 catcode,并且当代码已被读取时这将不起作用(catcode 此时已修复)。您需要\scantokens重置它们。

另外,您无法隐藏\end{lstlisting}在某些代码中:listings 必须找到列表的结尾,而不执行中间的代码。这就是为什么 listings 有自己的\newenvironment命令 ( \lstnewenvironment)。

如果您想编写自己的 LTXexample,则必须复制 showexpl 的方法。基本上 LTXexample 会这样做:

\newenvironment{LTXexample}
{\lst@BeginWriteFile{\SX@codefile}} %At start of env begin to write the code to a file
{\lst@EndWriteFile % stop writing to file
  %now reinput code file \SX@codefile "as listing"
  %reinput code file "as result"
}

相关内容