以下示例可以编译,但是在float
使用参数时会产生警告。
\documentclass{article}
\usepackage{listings}
\begin{document}
\begin{lstlisting}[float, language=tex, label=lst-enum, caption={Enumerated list.}]
\begin{enumerate}
\item example 1
\item example 2
\item example 3
\end{enumerate}
\end{lstlisting}
\end{document}
我正在进行编译make4ht
并生成以下警告:
[WARNING] domfilter: DOM parsing of article.html failed:
[WARNING] domfilter: .../texlive/texmf-dist/tex/luatex/luaxml/luaxml-mod-xml.lua:175: Unbalanced Tag (/figure) [char=1997]
有什么问题吗?或者有办法避免这些警告吗?在更复杂的示例中,它会导致崩溃吗?
答案1
该domfilter
错误表示生成的 HTML 文件无效,DOM 处理失败。这是一个严重的问题,make4ht
使用它来修复生成的 HTML 文件中的常见错误。
问题在于 TeX4ht 环境配置在错误的位置lstlisting
插入 ' tags around it's content, but the
float ' 标签。option inserts
尝试这个配置文件:
\Preamble{xhtml}
\begin{document}
\makeatletter
\catcode`\:=11
\ConfigureEnv{lstlisting}
{\ifvmode \IgnorePar\fi \EndP
\gHAdvance\listingN by 1
\HCode{<!--l. \the\inputlineno-->}%
\gdef\start:LstLn{%
\HCode{<div class="lstlisting" id="listing-\listingN">}%
\gdef\start:LstLn{\:nbsp%
\HCode{<br />\Hnewline}}}
\bgroup
\pend:def\lst@DeInit{\ifvmode \IgnorePar\fi \EndP \HCode{</div>}}
\Configure{listings}
{{\everypar{}\leavevmode}}
{{\everypar{}\leavevmode}}
{\start:LstLn \HCode{<span class="label">}}
{\HCode{</span>}}%
}
{\egroup\par
}
{} {}
\catcode`\:=12
\makeatother
\EndPreamble
它是 TeX4ht 源的修改版本,不同之处在于它修补了宏以在before\lst@DeInit
插入结束标记,从而生成正确的 HTML 结构。</div>
</figure>