我有一个 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
¶m1=512
¶m2=1024
¶ms=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
¶m1=512
¶m2=1024
¶ms=abc
|paramA
|a
|paramB
|b
\end{lstlisting}
\end{document}