我正在使用 htlatex 将 LaTeX 转换为 HTML。我按照以下答案的建议为代码创建了一个 \ScriptEnv 环境:
它运行良好,但是过于文字化——没有转换为 HTML 实体,因此任何带有“<”的代码处理得都很糟糕。
有什么办法可以阻止这种情况吗?
編輯:
就我而言,情况更糟,因为我的一些输出看起来像带有打开和关闭 <> 的 HTML 标签。
(isubclasses OntologyBook)
;;=> #{#<OWLClassImpl <bc33d2c3-7ecb413c-bb04-83af2295c465#walk_through#TakeWing>>}
答案1
另一项编辑:
如果你不想对 html 进行后处理,你可以使用不同的方法来实现 verbatim 环境。例如使用fancyvrb
包:
\usepackage{fancyvrb}
\Preamble{xhtml}
\def\StartSuppressPage{\nobreak\vfil\penalty0\vfilneg\vtop\bgroup}
\def\EndSuppressPage{\egroup}
\renewenvironment{tawny}
{\IgnorePar\EndP\StartSuppressPage\HCode{<pre><code class="clojure">}\HtmlParOff\NoFonts\Verbatim}
{\endVerbatim\EndSuppressPage\HCode{</code></pre>}\EndNoFonts\HtmlParOn\par}
\Configure{fancyvrb}{}{}{}{}{}{}
\begin{document}
\EndPreamble
以及结果 HTML 示例:
tudin, felis odio placerat quam, ac pulvinar elit purus eget enim. Nunc vitae
tortor. Proin tempus nibh sit amet nisl. Vivamus quis tortor vitae risus porta
vehicula.
</p>
<pre><code class="clojure">
<a
id="x1-3r1"></a>(defclass Pizza
<a
id="x1-5r2"></a>  :super Thing)
<a
id="x1-7r3"></a>tady je radek
<a
id="x1-9r4"></a>a > b & c
</code></pre>
<!--l. 15--><p class="indent" > Nam dui ligula, fringilla a, euismod sodales, sollicitudin vel, wisi. Morbi auctor
lorem non justo. Nam lacus libero, pretium at, lobortis v
编辑:
看来在这种情况下make4ht
必须使用 lua 过滤器。使用这个.mk4
文件:
local filter= require "make4ht-filter"
local entities = function(s)
return '<code class="clojure">' .. s:gsub('<code class="clojure">(.-)</code>', function(a)
local escapes = {["<"]="lt",[">"]="gt",["&"]="amp"}
return a:gsub("([%<%>%&])", function(x)
return "&"..(escapes[x] or x) .. ";"
end)
end) .. '</code>'
end
local process = filter(entities, uj)
if mode == "draft" then
Make:htlatex{}
Make:match("html$", process)
else
Make:htlatex{}
Make:htlatex{}
Make:htlatex{}
Make:match("html$", process)
end
定义了过滤器entities
,处理<code class="clojure">
元素的内容并将所有<
、>
和转换&
为 html 实体:
<pre><code class="clojure">
(defclass Pizza
:super Thing)
(isubclasses OntologyBook)
;;=> #{#<OWLClassImpl <bc33d2c3-7ecb413c-bb04-83af2295c465#walk_through#TakeWing>>}
</code></pre>
旧版本:
的内容\ScriptEnv
是逐字导出的,没有经过任何处理,所以似乎无法在 LaTeX 端解决这个问题。但你可以html
用一些工具进行后处理,用 html 实体替换这些禁止的字符。Lua
可以使用一些脚本来实现这一点,但最简单的方法是使用tidy
命令:
tidy -m -utf8 -q -i filename.html
前:
<pre><code class="clojure">
a > b & c
</code></pre>
后
<pre>
<code class="clojure">
a > b & c
</code>
</pre>
和制作4小时你可以自动化这个。制作构建文件filename.mk4
:
if mode == "draft" then
Make:htlatex{}
else
Make:htlatex{}
Make:htlatex{}
Make:htlatex{}
Make:match("html$", "tidy -m -utf8 -q -i ${filename}")
end
使用此构建文件,您将能够快速查看文件
make4ht -m draft -c yourconfigfile.cfg filename
并且tidy
仅用于最终构建。其他功能是html
将处理所有输出文件(如果您将部分或章节拆分为独立的 html 文件,这将非常有用)