常规单词之间缺少空格

常规单词之间缺少空格

我注意到有时 tex4ht 会删除“常规的“单词之间的空格。我理解 DVI 中的空格只是“间隙”,而不是字体符号。MWE:

\documentclass{article}
\usepackage{times}
\begin{document}
Normal text \texttt{In the Name} \texttt{of} \texttt{God}
\end{document}

结果是使用 htlatex 编译的 HTML,没有任何选项(上帝之名):

<!--l. 4--><p class="noindent" >Normal text <span 
class="pcrr7t-">In the NameofGod</span>

以下是我在tex4htC 代码注释中发现的内容:

Characters are inserted into the html file as they are
encountered. Spaces are inserted when \`'x_val' is larger than
\`'max_x_val'. 

static long int x_val = 0, max_x_val = -10000,

在 DVI 文件中,我看到单词之间有很小的空格:

(Name)
w3 163840
(of)
w0
(God)

当我更换 DVI 源时w3 163840w3 263840出现空格。

问题有没有办法控制tex4ht空格转换(从 DVI 到 HTML)?可能和字体空格字符有关?

我如何才能追踪被删除的空间?这是什么意思?追踪水平空间应该显示\special{t4ht@%X}...\special{t4ht@%x}。我没有注意到任何事情。

答案1

这很有趣。当您查看示例生成的 dvi 代码时:

  xxx: 't4ht=<!--l. 9--><p class="noindent" >'
  set: 'Nomal'
  w: 2.500000pt
  set: 'te'
  right: -0.149902pt
  set: 'xt'
  w0:
  fnt: pcrr7t at 10pt
  set: 'In'
  w: 6pt
  set: 'the'
  w0:
  set: 'Name'
  w: 2.500000pt
  set: 'of'
  w0:
  set: 'God'

您可以看到,空格的宽度设置为 2.5pt,因为使用了给定行的正常单词间距宽度。没有显示字体因空格而发生变化,这就是问题所在。

tex4ht使用以下计算来确定是否应插入空格:

i =  (INTEGER) (  (double) (dx = x_val - max_x_val)
            /         (text_on? word_sp : margin_sp)
            +         0.5 );

如果我理解正确的话,x_val是新字符的当前水平位置,max_x_val是空格前的最后一个水平位置,也是dx空格的宽度。因为我们在文本(text_on)中,所以空间的宽度除以字体空间的大小。O.5添加到它然后将其转换为整数。

当转换为整数后的结果为 1 时,将插入空格。您的示例的问题在于,虽然实际上使用了比例字体的空格,但在计算中使用了等宽字体的空格大小,导致值小于 1,因此不会插入空格。我不确定是否可以在源代码中修复此问题tex4ht,从一些代码注释来看,Eitan 似乎意识到了这个问题,但没有提出解决方案。好消息是,这个问题应该只在您使用具有固定空格的字体(即等宽字体)并在此字体的两个文本实例之间插入正常空格时才会发生。

答案2

这是一个带有\texttt配置的简单解决方案,如果 后面有空格,则会像 HTML 实体一样添加空格\texttt{}

\documentclass{article}
\usepackage{times}
\begin{document}
\makeatletter
%% add fixed space if next input token is space
\def\@add@texttt@space{%
  \ifcat\@@temp\space
    \ \ignorespaces
  \fi}
\def\@fix@texttt@space{\futurelet\@@temp\@add@texttt@space}

\Configure{texttt}
  {}
  {\aftergroup\@fix@texttt@space}   
\makeatother

Normal text \texttt{In the Name} \texttt{of} \texttt{God}.
\end{document}

现在输出将是...Name&#x00A0;of&#x00A0;God.

相关内容