问题陈述
我的 latex 文件中有多个包含 HTML 标记的代码清单。这些清单包含多个自定义 html 标记(与相应的 AngularJS 指令结合创建)。
这样的 HTML 片段可能看起来像这样:
<list-component data="angularDataObject"
list-type="dataActor">
</list-component>
<div id="test"></div>
源自listComponent
JavaScript 中指令的 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
即我定义了一种使用moredelim
和morestring
处理的最基本语法的语言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,这个问题也得到了解决 -*
属性样式行中多了一个额外的内容是我的错。此外,我还修复了一些问题,使制表符缩进也能正常工作。