突出显示选择器之间的文本,而不突出显示或删除选择器

突出显示选择器之间的文本,而不突出显示或删除选择器

因此我尝试使用该\lstdefinestyle命令为我的 PHP 代码呈现一些漂亮的内容。

我认为基本配置很好,但我想突出显示函数名称以用颜色呈现它normal

这是我的代码:

\documentclass[10pt,a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{listings}             % to insert code
\usepackage{xcolor}
\definecolor{background}{RGB}{40, 44, 52}           % gris foncé
\definecolor{comment}{RGB}{92, 99, 112}             % gris clair
\definecolor{keyworld}{RGB}{86, 182, 194}           % cyan
\definecolor{string}{RGB}{152, 195, 121}            % vert
\definecolor{identifier}{RGB}{198, 120, 221}        % mauve
\definecolor{classic}{RGB}{224, 108, 117}           % genre de rouge
\definecolor{normal}{RGB}{171, 178, 191}            % blanc
\definecolor{specialkeyworld}{RGB}{229, 192, 123}   % jaune orange
\definecolor{veridad}{RGB}{209, 154, 102}           % orange jaune

\lstdefinestyle{myPHP}{
  language=PHP,              
  backgroundcolor=\color{background},   
  basicstyle=\footnotesize\ttfamily\color{normal} ,     
  keywordstyle=\color{keyworld},     
  commentstyle=\color{comment},     
  numberstyle=\color{background}, 
  identifierstyle=\color{classic},
  stringstyle=\color{string},    
  emph        =[1]{function,try,return,catch, new},
  emphstyle   =[1]\color{identifier},
  emph        =[2]{Exception, PDO},
  emphstyle   =[2]\color{specialkeyworld},
  emph        =[3]{true, false},
  emphstyle   =[3]\color{veridad},
  emph        =[4]{connectAccess},
  emphstyle   =[4]\color{normal},
  stringstyle=\color{string},     
  breakatwhitespace=false,              
  breaklines=false,                         
  keepspaces=true,                
  numbers=left,                   
  numbersep=4pt,                 
  showspaces=false,        
  showstringspaces=false,      
}
\begin{document}
    \begin{lstlisting}[style=myPHP]
    /**
     *  Connect an Access database
     *  @param  string  $path   Name of the database you want to connect to
     *  @return PDO object initialise
     */
    function connectAccess($path){
      try {
        $db = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb)}; Dbq=$path;");
        return $db;
      } catch (Exception $e) {
        echo 'Connection failed: ' . $e->getMessage();
        return false;
      }
    }
    \end{lstlisting}
\end{document}

结果:

结果

我想替换这两行

  emph        =[4]{connectAccess},
  emphstyle   =[4]\color{normal},

使用一些可以突出显示介于function和之间(内容而不选择这两者的东西,因为我将在我的文档中显示很多代码,并且我不想每次都转义函数名称。

我试过了moredelim=[is][\color{normal}\ttfamily]{function}{(},但它的渲染效果如下:

莫雷德林

使用moredelim=[s][\color{normal}\ttfamily]{function}{(},‘功能’选择器也会在\color{normal}字体中呈现......

并且我得到了几乎相同的结果morecomment

我做错了什么?moredelim 和 morecomment 不是正确的参数吗?如果不是,那么这两个的最初目的是什么?

有没有其他方法可以做到这一点,或者我每次都必须转义函数名称?

感谢您的时间和回答,Guillaume

答案1

以下是@jkuczm 链接中使用的技巧:

你必须定义一个新命令:

\newcommand{\functionDefHighlight}[1]{\textcolor{identifier}{function} \textcolor{normal}{ #1}(}

然后在参数化moredelim时使用它:

moredelim = [is][\functionDefHighlight]{function\ }{(},

相关内容