问题陈述

问题陈述

问题陈述

我的 latex 文件中有多个包含 HTML 标记的代码清单。这些清单包含多个自定义 html 标记(与相应的 AngularJS 指令结合创建)。

这样的 HTML 片段可能看起来像这样:

<list-component data="angularDataObject"
    list-type="dataActor">
</list-component>
<div id="test"></div>

源自listComponentJavaScript 中指令的 CamelCase 名称,在其间添加了破折号list-component以保持代码的可读性。

我尝试过用于语法高亮:

列表

使用我取得了以下成果:

\documentclass{article}
\usepackage{listings}
\begin{document}
\begin{lstlisting}[language=HTML]
<list-component data="angularDataObject"
    list-type="dataActor">
</list-component>
<div id="test"></div>
\end{lstlisting}
\end{document}

列表结果

如您所见,标签名称未被识别,自定义属性也没有list-type。我认为该词type被识别为标准 html 属性,因此被突出显示。

铸造

使用我取得了以下成果:

\documentclass{article}
\usepackage{minted}
\usemintedstyle{borland}
\begin{document}
\begin{minted}{html}
<list-component data="angularDataObject"
    list-type="dataActor">
</list-component>
<div id="test"></div>
\end{minted}
\end{document}

铸造结果

生成的结果更糟糕,因为单词list在破折号之前突出显示 -component相反,虽然list不是 HTML 标准标签,但不是。这次属性看起来不错,但结束标签根本没有被识别,并且在开始括号后面有一个丑陋的背景<

我的目标

我正在寻找一个能够自动检测和突出显示自定义标签的插件,而不需要逐个添加它们 - 因为我可能不确定将来会使用哪些标签。此外,识别自定义属性会很棒,但如果属性根本不突出显示,我可以不用它。最后,至关重要的是,结束标签至少要像之前突出显示开始标签一样突出显示。

提前感谢您的慷慨帮助和建议!

顺便说一句,在输入这​​个问题并添加不同代码突出显示的语言数据时,我发现 Google Code prettifier 正在完美地分析和显示我的代码:-/

其他与 TEX.SE 相关的问题

\listings HTML5 代码样式(CSS、HTML、JavaScript) 在此解决方案中,必须在设置中注明任何标签以便识别。

如何在 HTML 列表中突出显示自己的关键字? 此解决方案允许单独突出显示代码部分,但更改需要硬编码到列表中。这破坏了 TEX 标记的可读性。

如何在 \listings 中使用尖括号括起关键字? 该解决方案再次要求所有标签都先验定义。

答案1

好的,经过一番思考如何做到这一点listings同时避免手动指定关键字之后,我想基于语法的解决方案可能会有效。

listings即我定义了一种使用moredelimmorestring处理的最基本语法的语言XML并得到以下结果: 在此处输入图片描述

对应的代码是:

\documentclass{report}

\usepackage{listings}
\usepackage{color}

\lstdefinelanguage{XML_SYNTAX}{%
    alsoletter=-,
    morestring=[b]",stringstyle=\color[rgb]{0,0,1},
    moredelim=*[s][{\color[rgb]{0.75,0,0}}]{<}{>},
    moredelim=[s][{\color[rgb]{0,0,0}}]{<!--}{-->},
    moredelim=[s][{\color[rgb]{0,0.75,0}}]{\ }{=},
    moredelim=[s][{\color[rgb]{0,0.75,0}}]{\    }{=} % here there is \tab
}

\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}
<!-- with tab -->
<list-component data="angularDataObject"
    list-type="dataActor">
</list-component>
<!-- with space -->
<list-component data="angularDataObject"
  list-type="dataActor">
</list-component>
<!-- some other tag -->
<div id="test"></div>
\end{lstlisting}
\end{document}

有关代码功能的解释,请参阅第 3.2、3.3 和 4.18 节及后续章节。文档listings

注意:由于某种原因,该list-type属性仍然是错误的,尽管我告诉listings-其视为一封信alsoletter={-}- 也许你可以弄清楚为什么会这样,否则我将有时间在几个小时内进行更多测试。

这是因为我使用制表符而不是空格来缩进。现在这个问题已经解决了,需要进行更多的调试,因为标签>的结束list-component现在也变成了绿色。

感谢 @Jubobs,这个问题也得到了解决 -*属性样式行中多了一个额外的内容是我的错。此外,我还修复了一些问题,使制表符缩进也能正常工作。

相关内容