我怎样才能以这种特定方式漂亮地打印 http 请求的 URL?

我怎样才能以这种特定方式漂亮地打印 http 请求的 URL?

我有一个 HTTP 请求的 URL 作为lstlisting环境的唯一内容,我想按如下方式漂亮地打印它:

  • color1对于第一行,对于?&,和|

  • color2对于参数名称,

  • color3用于参数值(字符和数字)。

我尝试使用PHP预定义的语言listings,但基本 URL 的排版方式不能让我满意。

请参阅下面的尝试。如您所见,我手动为“键”着色,这可能不是一个好主意……

我应该怎么办?

在此处输入图片描述

\documentclass[12pt,a4paper,oneside]{scrreprt}
\usepackage{listings}
\usepackage{xcolor}

\definecolor{color1}{rgb}{0.0,  0.0,0.6}
\definecolor{color2}{rgb}{0.29, 0,  0.29}
\definecolor{color3}{rgb}{0.25, 0.5,0.5}


\lstset{
    basicstyle=\ttfamily,
    columns=fullflexible,
    showstringspaces=false 
}

\lstdefinelanguage{url}{
    moredelim=**[is][\color{color1}]{@}{@},
    showstringspaces=true,
    identifierstyle=\color{color2},
    keywordstyle=\color{color3},
    morekeywords={param1,param2,params,L},
}

\begin{document}    
    \lstset{language=url}
    \begin{lstlisting}
        http://domain.com/version/xyz.exe/abc
        ?L=sysname
        &param1=512
        &param2=1024
        &params=abc
        |paramA
        |a
        |paramB
        |b
    \end{lstlisting}
\end{document}

答案1

更多listings恶作剧……

下面的设置应该会自动使用您指定的颜色排版 URL。此外,如果一切按预期运行,您就不必费力地将参数名称添加到关键字列表中。

注意:不要缩进环境内容lstlisting

在此处输入图片描述

\documentclass[12pt,a4paper,oneside]{scrreprt}
\usepackage{listings}
\usepackage{xcolor}

\definecolor{color1}{rgb}{0.0,  0.0,0.6}
\definecolor{color2}{rgb}{0.29, 0,  0.29}
\definecolor{color3}{rgb}{0.25, 0.5,0.5}


\lstset{
    basicstyle=\ttfamily,
    columns=fullflexible,
    showstringspaces=false 
}

\makeatletter
\lstdefinelanguage{url}{
    moredelim=[is][\ProcessAmpersand]{\&}{=},
    moredelim=[is][\ProcessQM]{?}{=},
    moredelim=[l][\color{color1}]{http://},
    alsoletter={0,1,2,3,4,5,6,7,8,9,.,/,:},
    showstringspaces=true,
    identifierstyle=\color{color3},
    literate = |{{\textcolor{color1}{|}}}1,
}

\def\ProcessAmpersand%
{%
    \lst@CalcLostSpaceAndOutput%
    \textcolor{color1}{\&}%
    \color{color2}%
    \aftergroup\ProcessClosingEq%
}

\def\ProcessQM%
{%
    \lst@CalcLostSpaceAndOutput%
    \textcolor{color1}{?}%
    \color{color2}%
    \aftergroup\ProcessClosingEq%
}

\def\ProcessClosingEq{\textcolor{color1}{=}}

\makeatother

\begin{document}    
\lstset{language=url}
\begin{lstlisting}
http://domain.com/version/xyz.exe/abc
?L=sysname
&param1=512
&param2=1024
&params=abc
|paramA
|a
|paramB
|b
\end{lstlisting}
\end{document}

相关内容