因此我尝试使用该\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\ }{(},