htlatex \ScriptEnv 中的垂直空格

htlatex \ScriptEnv 中的垂直空格

我正在使用 htlatex 生成书籍的 HTML 版本,但遇到了垂直间距问题。我配置了如下环境:

\ScriptEnv{tawny}
{\begin{samepage}\IgnorePar\EndP\HCode{<pre><code class="tawny">}\EndNoFonts}
{\NoFonts \HCode{</code></pre>}\end{samepage}}

然后我使用 Javascript 来语法高亮显示这一点。

问题是,尽管我使用了 \ScriptEnv,但 htlatex 有时仍会插入较大的垂直空格。因此,例如,在此 HTML 中,

http://homepages.cs.ncl.ac.uk/phillip.lord/take-wing/take_wing.html

此代码:

\begin{tawny}
(as-subclasses
 PizzaComponent
 :disjoint :cover
 (defclass PizzaBase)
 (defclass PizzaTopping))
\end{tawny}

结果如下:

<pre><code class="tawny">(as-subclasses
 PizzaComponent
 :disjoint :cover



 (defclass PizzaBase)
 (defclass PizzaTopping))
</code></pre>

显然,由于我处于预先环境中,所以这个差距会在屏幕上的最终呈现中出现。

并非所有环境都会出现这种间隙,而且这种间隙是不一致的。小代码片段不会出现这种间隙。我认为错误根源在于 tex 所应用的分页。查看 htlatex 生成的 DVI 文件,这些间隙总是出现在 DVI 中的分页符处,即使分页符在 HTML 中毫无意义。

我尝试添加 samepage(您可以在上面的配置中看到这一点),这似乎可以减少问题,但并不能完全消除它。

有什么办法可以阻止这种情况发生吗?

答案1

受到 Egreg 对一个问题的回答的启发防止分页问题,我创建了宏来防止分页符修改.cfg文件,如您上一个问题所示:

\Preamble{html}
\def\StartSuppressPage{\nobreak\vfil\penalty0\vfilneg\vtop\bgroup}
\def\EndSuppressPage{\egroup}
\ScriptEnv{tawny}
{\IgnorePar\EndP\StartSuppressPage\HCode{<pre><code class="clojure">\Hnewline}\HtmlParOff\NoFonts}
{\EndSuppressPage\HCode{</code></pre>}\EndNoFonts\HtmlParOn}
\begin{document}
\EndPreamble

我还做了其他一些小的修改 - 我交换了\NoFonts和的用法,\EndNoFonts并添加了\HtmlParOff\HtmlParOn​​以抑制<pre>元素内的段落。

我创建了非常长的代码示例(200 行),并且里面没有添加空行(只是在最后,我不知道为什么)。

答案2

最后,我选择了一个简单的解决方案,即摆弄 textheight 并在每个代码块的开头填充一个 \newpage 行,但这些代码块不会进入到最终文档!

\setlength{\paperheight}{100cm}
\setlength{\textheight}{99cm}
\ScriptEnv{tawny}
{\newpage\IgnorePar\EndP\HCode{<pre><code class="tawny">}\HtmlParOff\NoFonts}
{\EndNoFonts\HtmlParOn \HCode{</code></pre>}}

相关内容