htlatex/tex4ht 与 ScriptEnv 和 HTML 实体

htlatex/tex4ht 与 ScriptEnv 和 HTML 实体

我正在使用 htlatex 将 LaTeX 转换为 HTML。我按照以下答案的建议为代码创建了一个 \ScriptEnv 环境:

htlatex 在 verbatim 中插入环境

它运行良好,但是过于文字化——没有转换为 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&#x00A0;Pizza
<a 
 id="x1-5r2"></a>&#x00A0;&#x00A0;:super&#x00A0;Thing)
<a 
 id="x1-7r3"></a>tady&#x00A0;je&#x00A0;radek
<a 
 id="x1-9r4"></a>a&#x00A0;&#x003E;&#x00A0;b&#x00A0;&amp;&#x00A0;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)
  ;;=&gt; #{#&lt;OWLClassImpl &lt;bc33d2c3-7ecb413c-bb04-83af2295c465#walk_through#TakeWing&gt;&gt;}
</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 &gt; b &amp; 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 文件,这将非常有用)

相关内容