explpreset 实际上是用来做什么的?

explpreset 实际上是用来做什么的?

showexpl该包旨在同时显示(La)TeX,TikZ,PSTricks 代码及其对应的渲染输出(水平或垂直)。

请注意,它不能用于显示 C# 或 C++ 或 Mathematica 或其他语言及其输出,因为这些语言使用不同的编译器或渲染引擎。

showexpl是从包派生出来的,因此可以使用或如下方式使用listings中定义的选项。listingsshowexpl\lstset{...}\lstset{explpreset={...}}

\lstset
{
    backgroundcolor=\color{pink}
}

或者

\lstset
{
   explpreset=% I add the missing = here!
   {
     backgroundcolor=\color{pink}
   }
}

我已经阅读了该showexpl软件包及其示例文档的源代码,但我仍然不明白它explpreset到底是干什么用的——因为它\lstset{}已经存在,而且它可以做它explpreset想做的事情。以下是它的简短描述explpreset

在此处输入图片描述

你知道它explpreset实际上是用来做什么的吗?

答案1

explpreset只是将其值存储到\SX@explpreset宏中,该宏稍后将在本地使用\lstset。这允许listings仅为showexpl列表定义设置,而不能为其他列表定义设置。

具体用法如下:

showexpl.dtx,2007/02/03 v0.3h,第 251 行:

\lst@Key{explpreset}\relax{\def\SX@explpreset{#1}}

默认情况下它是空的:(第 285 行)

\newcommand*\SX@explpreset{}

然后环境使用它LTXexample来设置本地\lstset设置:(从第 423 行开始)

\lstnewenvironment{LTXexample}[1][]
{%
  \@temptokena{#1}%
  \begingroup
%    \end{macrocode}
% For "codefile=..."/"graphic=..." if \cmd{\theltxexample} or 
% \cmd{\thelstlisting} is part of the filename.
%    \begin{macrocode}
    \advance\c@ltxexample\@ne \advance\c@lstlisting\@ne 
    \expandafter\lstset\expandafter{\SX@explpreset,#1}%

此环境将代码写入外部文件,\SX@put@code@result然后调用宏进行排版。此宏再次使用相同的设置:(第 457 行-)

\newcommand*\SX@put@code@result{%
  \begingroup
    \expandafter\lstset\expandafter{\SX@explpreset}%

答案2

使用explpreset里面的键lstset,您可以仅自定义环境的属性LTXexampe,这使您能够为环境定义不同的属性lstlisting。一个简单的例子来说明这一点:

\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\usepackage{showexpl}

\lstset{
  explpreset={backgroundcolor=\color{yellow!30}},
  backgroundcolor=\color{lightgray}
}

\begin{document}

\begin{lstlisting}
\LaTeX
\end{lstlisting}

\begin{LTXexample}
\LaTeX
\end{LTXexample}

\end{document}

在此处输入图片描述

相关内容