我想在我的文档中实现一些 XML 代码。但是,我的列表的语法似乎没有被识别。所以我的输出现在看起来像这样:
显然,这没有任何意义。我尝试使用“更多关键字”重新定义关键字,但这并没有产生预期的效果。我正在使用 listings 包。有人能帮我为我的 XML Listings 提供正确的语法定义吗?(这是 SAPUI5 标识符,这就是为什么其中一些不是“通用的”)
这是重现我的文档所需的代码:
\documentclass[11pt, a4paper, toc = bibliography, toc = listof,twoside,table,titlepage]{scrartcl}
\usepackage{listings}
\usepackage{color}
\definecolor{dkgreen}{rgb}{0,0.6,0}
\definecolor{gray}{rgb}{0.5,0.5,0.5}
\definecolor{mauve}{rgb}{0.58,0,0.82}
\lstdefinelanguage{JavaScript}{
keywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break},
keywordstyle=\color{blue}\bfseries,
ndkeywords={class, export, boolean, throw, implements, import, this},
ndkeywordstyle=\color{blue}\bfseries,
identifierstyle=\color{black},
sensitive=false,
comment=[l]{//},
morecomment=[s]{/*}{*/},
stringstyle=\color{red}\ttfamily,
morestring=[b]',
morestring=[b]"
}
\lstset{frame=tb,
language=JavaScript,
aboveskip=3mm,
belowskip=3mm,
showstringspaces=false,
columns=flexible,
basicstyle={\small\ttfamily},
numbers=left,
numberstyle=\tiny\color{gray},
keywordstyle=\color{blue},
commentstyle=\color{dkgreen},
stringstyle=\color{mauve},
breaklines=true,
breakatwhitespace=true,
tabsize=3
}
\begin{document}
\begin{lstlisting}[caption={Aggregation Binding über die View} ,captionpos=b, language=XML, label=lst:aggregationBinding]
<Table id="table" items="{Students}>
<columns>
<Column id="matrikelnummer">
<header>
<Text text="Matrikelnummer:"/>
</header>
</Column>
<Column id="name">
<header>
<Text text="Name:"/>
</header>
</Column>
</columns>
<items>
<ColumnListItem>
<cells>
<ObjectIdentifier text="{Matrikelnummer}"/>
<ObjectIdentifier text="{Name}"/>
</cells>
</ColumnListItem>
</items>
</Table>
\end{lstlisting}
\end{document}
答案1
语法高亮关闭的主要原因是缺少"
。items="{Students}
这导致listings
字符串高亮关闭相当多(但我认为 XML 解析器也会抱怨,所以...)。
在输出中添加后,输出已经非常合理,但in"
的预设不知道大量预定义关键字。因此,如果您想为诸如 之类的内容着色,则需要自己添加它们。据我所知,扩展现有语言的最简单方法是定义一种新样式(请参阅XML
listings
text
用附加关键字来扩展语言?)。
\documentclass[11pt, a4paper]{scrartcl}
\usepackage{listings}
\usepackage{xcolor}
\definecolor{dkgreen}{rgb}{0,0.6,0}
\definecolor{gray}{rgb}{0.5,0.5,0.5}
\definecolor{mauve}{rgb}{0.58,0,0.82}
\lstset{frame=tb,
aboveskip=3mm,
belowskip=3mm,
showstringspaces=false,
columns=flexible,
basicstyle={\small\ttfamily},
numbers=left,
numberstyle=\tiny\color{gray},
keywordstyle=\color{blue},
commentstyle=\color{dkgreen},
stringstyle=\color{mauve},
breaklines=true,
breakatwhitespace=true,
tabsize=3
}
\lstdefinestyle{XML}{
language=XML,
morekeywords={text,id},
}
\begin{document}
\begin{lstlisting}[caption={Aggregation Binding über die View} ,captionpos=b, style=XML, label=lst:aggregationBinding]
<Table id="table" items="{Students}">
<columns>
<Column id="matrikelnummer">
<header>
<Text text="Matrikelnummer:"/>
</header>
</Column>
<Column id="name">
<header>
<Text text="Name:"/>
</header>
</Column>
</columns>
<items>
<ColumnListItem>
<cells>
<ObjectIdentifier text="{Matrikelnummer}"/>
<ObjectIdentifier text="{Name}"/>
</cells>
</ColumnListItem>
</items>
</Table>
\end{lstlisting}
\end{document}
给出
在XML 语法突出显示您可能会发现更多用于 XML 高亮显示的扩展样式。
如果你需要更复杂的规则或希望获得更自动化的解决方案,也许minted
值得一看。minted
基于皮格门特斯并可以利用Python的强大功能来突出显示您的代码。