我使用以下代码来包含一些 XML 代码:
\lstset{language=XML}
\begin{lstlisting}
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="points">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="point">
<xs:complexType>
<xs:attribute name="x" type="xs:unsignedShort" use="required" />
<xs:attribute name="y" type="xs:unsignedShort" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
\end{lstlisting}
但只有?xml version
突出显示。还有其他预定义的 XML 语法突出显示吗?
答案1
XML语言对关键字的支持非常有限,你可以自己定义更多的关键字:
\lstset{
language=XML,
morekeywords={encoding,
xs:schema,xs:element,xs:complexType,xs:sequence,xs:attribute}
}
答案2
你可以定义自己的语言。到目前为止我能得到的最好的是:
\usepackage{listings}
\usepackage{color}
\definecolor{gray}{rgb}{0.4,0.4,0.4}
\definecolor{darkblue}{rgb}{0.0,0.0,0.6}
\definecolor{cyan}{rgb}{0.0,0.6,0.6}
\lstset{
basicstyle=\ttfamily,
columns=fullflexible,
showstringspaces=false,
commentstyle=\color{gray}\upshape
}
\lstdefinelanguage{XML}
{
morestring=[b]",
morestring=[s]{>}{<},
morecomment=[s]{<?}{?>},
stringstyle=\color{black},
identifierstyle=\color{darkblue},
keywordstyle=\color{cyan},
morekeywords={xmlns,version,type}% list your attributes here
}
以下是使用上述设置的突出显示 XML 的示例:
我也想将语法位(例如<
、>
、</
、=
)设置:
为灰色,因为它们不包含相关信息,但这会破坏突出显示的其他部分。也许其他人可以改进它并向 listings 包的维护者发送修复程序。
答案3
这是另一种风格,由于属性分隔符以空格开头,因此它相当粗糙并且很少使用额外的空格:
\definecolor{maroon}{rgb}{0.5,0,0}
\definecolor{darkgreen}{rgb}{0,0.5,0}
\lstdefinelanguage{XML}
{
basicstyle=\ttfamily,
morestring=[s]{"}{"},
morecomment=[s]{?}{?},
morecomment=[s]{!--}{--},
commentstyle=\color{darkgreen},
moredelim=[s][\color{black}]{>}{<},
moredelim=[s][\color{red}]{\ }{=},
stringstyle=\color{blue},
identifierstyle=\color{maroon}
}
示例输出:
答案4
我一直在寻找一种解决方案,可以将颜色应用于<
、</
和。我发现在 中应用解决了我的问题。>
/>
basicstyle
lstdefinelanguage
使用basicstyle
,我定义了适用于所有代码内容的样式,而不考虑内容类型(identifiers
,,keywords
...),然后将应用其他样式。(添加basicstyle=\ttfamily\color{darkblue}\bfseries
)
\lstdefinelanguage{XML}
{
basicstyle=\ttfamily\color{darkblue}\bfseries,
morestring=[b]",
morestring=[s]{>}{<},
morecomment=[s]{<?}{?>},
stringstyle=\color{black},
identifierstyle=\color{darkblue},
keywordstyle=\color{cyan},
morekeywords={xmlns,version,type}% list your attributes here
}