XML 语法高亮的问题

XML 语法高亮的问题

我想在 XML 文件中突出显示语法。我找到了一个不错的krlmlr 的定义我根据自己的需要进行了更改。

它适用于Android的xml文件: Android 的 xml 文件

但是标签之间带有值的 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[...]]- 因为它们从一开始<!就必须在定义注释样式时多加小心。

相关内容