我想在 XML 文件中突出显示语法。我找到了一个不错的krlmlr 的定义我根据自己的需要进行了更改。
它适用于Android的xml文件:
但是标签之间带有值的 xml 文件的结果看起来不太好:
我不介意使用两种不同的语言定义,但它们应该看起来相似。我还尝试了我发现的其他示例,但它们都将尖括号的颜色与标签不同。使用 minted 不是一个选择,因为我使用wissdoc
(德文页面)作为文档类并且它以某种方式与之冲突。
有人能给我一个第二个(非 Android) XML 的良好定义吗?就像我说的,我不想使用两种不同的语言定义来让它更容易 :-)
以下是一个最小的工作示例:
\documentclass{book}
\usepackage{amsmath}
\usepackage{xcolor}
\usepackage{listings}
\definecolor{Maroon}{rgb}{0.5,0,0}
\definecolor{darkgreen}{rgb}{0,0.5,0}
\lstdefinelanguage{XML_android}
{
basicstyle=\ttfamily\footnotesize,
morestring=[b]",
moredelim=[s][\color{Maroon}]{<}{\ },
moredelim=[s][\color{Maroon}]{</}{>},
moredelim=[l][\color{Maroon}]{/>},
moredelim=[l][\color{Maroon}]{>},
morecomment=[s]{<?}{?>},
morecomment=[s]{<!--}{-->},
commentstyle=\color{darkgreen},
stringstyle=\color{blue},
identifierstyle=\color{red}
}
\begin{document}
\begin{lstlisting}[%
language=XML_android,
numbers=left,
frame=single,
breaklines=true,
caption={AndroidManifest.xml},
label={list:prototyp-AndroidManifest.xml}]
<!-- For own voice trigger. -->
<uses-permission android:name="com.google.android.glass.permission.DEVELOPMENT" />
<meta-data
<!-- Reference to trigger xml -->
android:name="com.google.android.glass.VoiceTrigger"
android:resource="@xml/voice_trigger" />
\end{lstlisting}
\begin{lstlisting}[%
language=XML_android,
numbers=left,
breaklines=true,
frame=single,
caption={xml file},
label={list:arel-index.xml}]
<object id="model1">
<title><![CDATA[box]]></title>
<assets3d>
<model><![CDATA[html/resources/f50e387c699cd8c6afae2ae7c7aa3e81/box.zip]]></model>
<transform>
<translation>
<x>0.0</x>
<y>9.302986145</y>
<z>0.0</z>
</translation>
\end{lstlisting}
\end{document}
答案1
我现在无法想出一个完美的解决方案,但是根据您链接的解决方案和我在此处的回答,我得出了以下解决方案,这还不错:
\documentclass{book}
\usepackage{xcolor}
\usepackage{listings}
\definecolor{Maroon}{rgb}{0.5,0,0}
\definecolor{darkgreen}{rgb}{0,0.5,0}
\lstdefinelanguage{XML_android}
{
alsoletter=-,
basicstyle=\ttfamily\footnotesize,
morestring=[b]",
moredelim=*[s][\color{Maroon}]{<}{\ },
moredelim=[s][\color{Maroon}]{</}{>},
moredelim=[l][\color{Maroon}]{/>},
moredelim=[l][\color{Maroon}]{>},
morecomment=[s]{<?}{?>},
morecomment=[s]{<!--}{-->},
morecomment=[s]{<!}{>},
commentstyle=\color{darkgreen},
stringstyle=\color{blue},
identifierstyle=\color{red}
}
\lstdefinelanguage{XML_SYNTAX}{%
morekeywords={id},
alsoletter=-,
morestring=[b]",
stringstyle=\color[rgb]{0,0,1},
morecomment=[s]{<?}{?>},
morecomment=[s]{<!--}{-->},
morecomment=[s]{<!}{>},
commentstyle=\color{darkgreen},
moredelim=[s][\color{black}]{![}{]]},
moredelim=*[s][\color{Maroon}]{<}{>},
keywordstyle=\color{red}
}
\lstset{
% Basic design
backgroundcolor=\color[rgb]{0.9,0.9,0.9},
basicstyle={\small\ttfamily},
breaklines=true,
frame=l,
tabsize=2,
% Line numbers
xleftmargin={0.75cm},
numbers=left,
stepnumber=1,
firstnumber=1,
numberfirstline=true,
% HTML formatting
language=XML_SYNTAX,
}
\begin{document}
\begin{lstlisting}[%
language=XML_android,
caption={AndroidManifest.xml},
label={list:prototyp-AndroidManifest.xml}]
<!-- For own voice trigger. -->
<uses-permission android:name="com.google.android.glass.permission.DEVELOPMENT" />
<meta-data
<!-- Reference to trigger xml -->
android:name="com.google.android.glass.VoiceTrigger"
android:resource="@xml/voice_trigger" />
\end{lstlisting}
\begin{lstlisting}[%
language=XML_SYNTAX,
caption={xml file},
label={list:arel-index.xml}]
<object id="model1">
<title><![CDATA[box]]></title>
<assets3d>
<model><![CDATA[html/resources/f50e387c699cd8c6afae2ae7c7aa3e81/box.zip]]></model>
<transform>
<translation>
<x>0.0</x>
<y>9.302986145</y>
<z>0.0</z>
</translation>
\end{lstlisting}
\end{document}
您可以根据自己的喜好设置各部分的样式[CDATA[...]]
- 因为它们从一开始<!
就必须在定义注释样式时多加小心。