有没有一个很好的定义来突出显示列表中的 PHP 代码?

有没有一个很好的定义来突出显示列表中的 PHP 代码?

有人对使用该listings包突出显示 PHP 代码有一个好的定义吗?

答案1

listings提供多种选项,可根据您的喜好对样式进行颜色/自定义。当然,您应该选择php一种语言。

这可能是一个起点:

\documentclass{article}
\usepackage{listings,xcolor}
\usepackage{inconsolata}

\definecolor{dkgreen}{rgb}{0,.6,0}
\definecolor{dkblue}{rgb}{0,0,.6}
\definecolor{dkyellow}{cmyk}{0,0,.8,.3}

\lstset{
  language        = php,
  basicstyle      = \small\ttfamily,
  keywordstyle    = \color{dkblue},
  stringstyle     = \color{red},
  identifierstyle = \color{dkgreen},
  commentstyle    = \color{gray},
  emph            =[1]{php},
  emphstyle       =[1]\color{black},
  emph            =[2]{if,and,or,else},
  emphstyle       =[2]\color{dkyellow}}

\begin{document}

\begin{lstlisting}
<?php
/* this is a stupid example */
$username = $_POST["username"];
$passwort = $_POST["passwort"];

$pass = md5($passwort);

// another comment
if($username=="Andavos" and
$pass=="fd0d9cdefd5d42dfa36c74a449aa8214")
   {
   echo "Herzlich Willkommen";
   }
else
   {
   echo "Login Fehlgeschlagen";
   }
?>
\end{lstlisting}

\end{document}

在此处输入图片描述

答案2

我发现默认解析有点奇怪,一些函数(如“header”)将被突出显示,即使它们是类函数,但其​​他函数则不会。所有标识符都将以相同的方式着色,无论它们是函数还是变量。为了修复整个列表突出显示,我破解了以下 TeXcode 以在 XeTeX 中使用:

\newcommand{\PHPamountofcolor}{75}
\newcommand{\SourceCodeContext}{5}
%Lets define the php language colors:
\definecolor{PHP_comment_old}{HTML}{FF8000}
\colorlet{PHP_comment}{PHP_comment_old!\PHPamountofcolor!black}
\definecolor{PHP_default_old}{HTML}{000000}
\colorlet{PHP_default}{PHP_default_old!\PHPamountofcolor!black}
\definecolor{PHP_keyword_old}{HTML}{6c9c11}
\colorlet{PHP_keyword}{PHP_keyword_old!\PHPamountofcolor!black}
\definecolor{PHP_emph1_old}{HTML}{0F58A2}
\colorlet{PHP_emph1}{PHP_emph1_old!\PHPamountofcolor!black}
\definecolor{PHP_emph2_old}{HTML}{CCAA00}
\colorlet{PHP_emph2}{PHP_emph2_old!\PHPamountofcolor!black}
\definecolor{PHP_emph4_old}{HTML}{C60484}
\colorlet{PHP_emph4}{PHP_emph4_old!\PHPamountofcolor!black}
\definecolor{PHP_string_old}{HTML}{C78F0A}
\colorlet{PHP_string}{PHP_string_old!\PHPamountofcolor!black}
\definecolor{PHP_variable_old}{HTML}{C82210}%C82210
\colorlet{PHP_variable}{PHP_variable_old!\PHPamountofcolor!black}
\definecolor{PHP_number_old}{HTML}{BF1CA6}
\colorlet{PHP_number}{PHP_number_old!\PHPamountofcolor!black}
%Now we want to highlight the variables. This will be done by triggering the function \PHPhighlightvar at the start of any $ run. This function wil only highlight variables and any other identifiers will be ignored. Luckily lstlisting will only give correct identifiers so we only will have to check if the previous call was made with a $
\usepackage{fontspec}
\setmonofont{Courier}
%\usepackage[utf8]{inputenc}
%\usepackage[T1]{fontenc}
%\usepackage{courier, textcomp}
\usepackage{etoolbox}
\newtoggle{InString}{}% Keep track of if we are within a string
\togglefalse{InString}% Assume not initally in string

\newcommand*{\ColorIfNotInString}[1]{\iftoggle{InString}{#1}{\color{PHP_number}#1}}%
%helper

\newcommand{\PHPhighlightvar}[1]{\ifnum\theDollarFlag=1 \color{PHP_variable} \fi#1\setcounter{DollarFlag}{0}}
\newcounter{DollarFlag}


\lstset{
  language        = php,
  basicstyle      = \footnotesize\ttfamily,
  keywordstyle    = \color{PHP_keyword},
  stringstyle     = \color{PHP_string!90!black}\toggletrue{InString},
  %this allows highlighting of variables:
  literate        =  {\$}{{\iftoggle{InString}{\$}{\setcounter{DollarFlag}{1}\color{PHP_variable}\$\color{PHP_default}}}}1
%    {"}{{{\ProcessQuote{"}}}}1% Disable coloring within double quotes
%    {'}{{{\ProcessQuote{'}}}}1% Disable coloring within single quote
    {0}{{{\ColorIfNotInString{0}}}}1
    {1}{{{\ColorIfNotInString{1}}}}1
    {2}{{{\ColorIfNotInString{2}}}}1
    {3}{{{\ColorIfNotInString{3}}}}1
    {4}{{{\ColorIfNotInString{4}}}}1
    {5}{{{\ColorIfNotInString{5}}}}1
    {6}{{{\ColorIfNotInString{6}}}}1
    {7}{{{\ColorIfNotInString{7}}}}1
    {8}{{{\ColorIfNotInString{8}}}}1
    {9}{{{\ColorIfNotInString{9}}}}1,
  identifierstyle = \color{PHP_default}\PHPhighlightvar,
  commentstyle    = \color{PHP_comment}\slshape,
  emph            =[1]{require_once, require, include_once, include, namespace, use, class, function, new},
  emphstyle       =[1]\color{PHP_emph1},%\bf,
  emph            =[2]{echo, empty, isset, array, instanceof},
  emphstyle       =[2]\color{PHP_emph2},%\bf,
  emph            =[3]{var, const, abstract, 
                        protected, private, public,
                        static, final, extends, implements,
                        global, if, else, foreach ,for,
                        endforeach, endif, endfor, elseif,
                        as},
  emphstyle       =[3]\color{PHP_keyword},%\bf,
  emph            =[4]{return, throw, exit, __halt_compiler, continue, break},
  emphstyle       =[4]\color{PHP_emph4},%\bf,
  breaklines      = true,
  captionpos      = b,
  rulecolor       =\color{black},
  keywords    ={__halt_compiler,    abstract,   and,    array,
                    as, break,  callable,   case,   catch,  class,
                    clone,  const,  continue,   declare,    default,
                    die,    do, echo,   else,   elseif,
                    empty,  enddeclare, endfor, endforeach, endif,
                    endswitch,  endwhile,   eval,   exit,   extends,
                    final,  finally,    for,    foreach,    function,
                    global, goto, if,   implements, include,
                    include_once,   instanceof, insteadof,
                    interface,  isset, list,    namespace,
                    new,    or, print, private, protected,  public,
                    require,    require_once, return,   static,
                    switch, throw,  trait, try, unset, use, var,
                    while,  xor,    yield,
  },
  numbers=left,
  stepnumber=1,  
  numberfirstline=true,
  numberstyle=\footnotesize,
  xleftmargin=4.0ex,
  upquote=true,
  showlines=true
  }

也许这对某些人有用。它会产生类似这样的结果: 在此处输入图片描述

相关内容