列表:无法识别的 XML 关键字、字符串、标识符

列表:无法识别的 XML 关键字、字符串、标识符

我想在我的文档中实现一些 XML 代码。但是,我的列表的语法似乎没有被识别。所以我的输出现在看起来像这样:

当前 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"的预设不知道大量预定义关键字。因此,如果您想为诸如 之类的内容着色,则需要自己添加它们。据我所知,扩展现有语言的最简单方法是定义一种新样式(请参阅XMLlistingstext用附加关键字来扩展语言?)。

\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 代码:突出显示字符串和关键字(当前仅突出显示 <code>text</code> 和 <code>id</code>)。

XML 语法突出显示您可能会发现更多用于 XML 高亮显示的扩展样式。

如果你需要更复杂的规则或希望获得更自动化的解决方案,也许minted值得一看。minted基于皮格门特斯并可以利用Python的强大功能来突出显示您的代码。

相关内容