我正在使用 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>}}