根据样式存在情况进行条件执行(列表)

根据样式存在情况进行条件执行(列表)

listings在 LaTeX(或 e-TeX)中是否有办法检查使用包(在定义内部)是否定义了样式\lstnewenvironment

我的意思像这样:

\lstdefinestyle{tmpdefaultstyle}{}
\lstdefinestyle{tmpstyle}{}
\lstnewenvironment{tmpenv}{
  \ifcsname **********\endcsname
    \lstset{style=tmpstyle}
  \else
    \lstset{style=tmpdefaultstyle}
  \fi
}{}

**********- 我不知道在这里该写什么。

答案1

这是一个解决方案。

在帮助下,\tracingall我发现该命令会“动态”\lstdefinestyle{<stylename>}{...}生成一个名称。lststy@<stylename>$

例如,该命令\lstdefinestyle{tmpstyle}{...}生成lststy@tmpstyle$

因此,MWE

\documentclass{article}
\usepackage{listings}

\makeatletter
\lstdefinestyle{tmpdefaultstyle}{keywordstyle=\bfseries,language=[LaTeX]{TeX}}
\lstdefinestyle{tmpstyle}{keywordstyle=\ttfamily,language=[LaTeX]{TeX}}
\lstnewenvironment{tmpenv}{%
  \ifcsname lststy@tmpstyle$\endcsname%
    \lstset{style=tmpstyle}%
  \else%
    \lstset{style=tmpdefaultstyle}%
  \fi%
}{}
\makeatother

\begin{document}

\begin{tmpenv}
\documentclass{article}
\end{tmpenv}

\end{document} 

产量

在此处输入图片描述

因为样式tmpstyle已经定义(并且是用 定义的keywordstyle=\ttfamily)。

如果你评论这一行

\lstdefinestyle{tmpstyle}{keywordstyle=\ttfamily,language=[LaTeX]{TeX}}

那么样式tmpstyle就没有定义,你会得到

在此处输入图片描述

因为这次使用了样式tmpdefaultstyle(并且用 定义\keywordstyle=\bfseries)。

相关内容