如何在列表中强调两个由空格分隔的连续标识符?

如何在列表中强调两个由空格分隔的连续标识符?

我有一段pgfplots想要放入lstlisting环境中的代码:

\pgfplotsset{
   every axis x label/.append style = {
      font = \small
   },
   every axis y label/.append style = {
      font = \small,
      rotate = -90,
      xshift = 0.5em
   }
}

我如何才能让listings包相信像 这样的字符串every axis x label必须被视为标识符?我不喜欢将关键字的角色分配给单个子字符串everyaxisx、的想法label

答案1

根据listings包裹 文档这显然是不可能的。引自第 21 页(重点突出):

另一个问题:默认情况下,某些字符不允许放在关键字中,例如-,,,等等。参考指南通过引入更多键来解决此问题,这些键可让您适当调整标准字符表。但请:注意.关键字内禁止使用空格字符

对于小型实例,目前没有可行的替代方案listings。但是,对于较大或更通用的实例,pgf包裹 文档(使用codeexample环境)可能会有一些帮助。

答案2

你可以劫持moredelim钥匙,按照你的意愿行事listings……有点像。见下文。

请注意,这种方法远非完美。例如,使用下面的代码,任何以 开头every axis x和以 结尾的字符序列label都会像真正的关键字一样突出显示。但是,你也许可以好好利用它。

有关的:如何在Listings包中添加带有空格的关键字?

在此处输入图片描述

\documentclass{article}

\setlength\parindent{0pt}

\usepackage{xcolor}
\usepackage{listings}

\lstdefinestyle{mytikzPGFstyle}{
    language = TeX,
    basicstyle = \ttfamily,
    keywordstyle = \color{blue},
    frame = single,
    moredelim = [s][keywordstyle]{every\ axis\ x\ }{label},
    moredelim = [s][keywordstyle]{every\ axis\ y\ }{label},
}

\begin{document}

Success:
\begin{lstlisting}[style=mytikzPGFstyle]
\pgfplotsset{
   every axis x label/.append style = {
      font = \small
   },
   every axis y label/.append style = {
      font = \small,
      rotate = -90,
      xshift = 0.5em
   }

   \draw node {every, axis, label, x}; 
}
\end{lstlisting}

Failure:
\begin{lstlisting}[style=mytikzPGFstyle]
every axis x foo label/.append style = {
\end{lstlisting}
\end{document}

答案3

您还可以使用“文学编程”实验功能。

例如,我更喜欢用列表来排版伪代码,因为我发现输入纯文本比输入像algorithmicxet al. 这样的专用包的特殊语法更方便。

对于作业,我想清楚地说明“获取的值”。我通过将以下内容添加到我的伪语言定义 ( \lstdefinelanguage) 来实现这一点:

literate=*{:=}{{\hbox{\textbf{takes the value of}}}}{18}

这也适用于带有(法语)重音字母的关键词,这些关键词也不会被识别为普通关键词。

相关内容