我对 LaTeXML 处理列表的方式感到惊讶/困惑。举个例子test.tex
:
\documentclass{article}
\begin{document}
Hello itemize:
\begin{itemize}
\item one
\item two
\end{itemize}
\end{document}
运行命令
latexml test.tex | latexmlpost - --destination=test.html
生成以下 HTML: (剪辑到有趣的部分)
<article class="ltx_document">
<div id="p1" class="ltx_para">
<p class="ltx_p">Hello itemize:</p>
<ul id="I1" class="ltx_itemize">
<li id="I1.i1" class="ltx_item" style="list-style-type:none;">
<span class="ltx_tag ltx_tag_itemize">•</span>
<div id="I1.i1.p1" class="ltx_para">
<p class="ltx_p">one</p>
</div>
</li>
<li id="I1.i2" class="ltx_item" style="list-style-type:none;">
<span class="ltx_tag ltx_tag_itemize">•</span>
<div id="I1.i2.p1" class="ltx_para">
<p class="ltx_p">two</p>
</div>
</li>
</ul>
</div>
</article>
这很奇怪,因为不仅项目符号的排版明确(这是我没有想到的),更重要的是列表的内容被包裹在标签div
中p
,这意味着项目符号和项目之间有换行符!
显然,如果我使用 latexml CSS 文件,这不是问题,但我想在无法自定义所用 CSS 的上下文中重新使用 HTML。
有人对如何“改善”这里的输出有什么想法吗?
我正在使用版本
latexml (LaTeXML version 0.8.2; revision 644644a)
答案1
正如楼主所见github 问题,你现在可以使用
latexmlpost --dest=test.html --xsltparameter=SIMPLIFY_HTML:true test
获取 html
<article class="ltx_document">
<div id="p1" class="ltx_para">
<p class="ltx_p">Hello itemize:</p>
<ul id="I1" class="ltx_itemize">
<li id="I1.i1" class="ltx_item">
<div id="I1.i1.p1" class="ltx_para">
<p class="ltx_p">one</p>
</div>
</li>
<li id="I1.i2" class="ltx_item">
<div id="I1.i2.p1" class="ltx_para">
<p class="ltx_p">two</p>
</div>
</li>
</ul>
</div>
</article>
这将跳过 的任何可选参数\item[]
。如果有人想将两者混合,他们可能需要\usepackage{latexml}
,添加一些\lxAddClass{simpleList}
,然后为 latexmlpost 创建自定义 xslt 以供使用。
答案2
有趣的情况;显然,您所要求的是您给出的案例的“正确”结果。LaTeXML 更通用的方法是尝试对 LaTeX 通常遇到的各种情况进行建模。例如,任何项目化都可以包含\item[$a+b$]
需要标记而不是属性值的任意项,因此需要项目符号的跨度。更不用说,作者可能已经重新定义了\labelitemi
。同样,任何项目都可以包含多个段落,因此需要 div、p 元素。所以,至少这是 LaTeXML 内部 XML 的借口。其他处理器如何处理这种情况?
我猜想一个解决方案可能是让 LaTeXML 的 xslt 检查非特殊情况的条目,然后简化它们。嗯... 真的没有可能偷偷将一些 CSS 放进去吗?
答案3
我认为 Bruce 的回答很有说服力,他表示 latexml 的输出在一般意义上是正确的。但是,就我的目的而言,我愿意做出妥协,以便 HTML 能够合理显示,而无需相关 CSS 文件进行正确渲染。
对我来说,这涉及使用正则表达式来去除导致问题的多余标记:
sed -ie 's/<span class="ltx_tag ltx_tag_itemize">•<\/span>//g' test.html
sed -ie 's/class="ltx_item" style="list-style-type:none;"/class="ltx_item"/g' test.html
简而言之,这只是删除了明确的项目符号并删除了关闭自动项目符号的指令。毫无疑问,我可能需要类似的东西enumerate
,但description
它已经运行得很好了。