重新定义特定 TS1 代码点(=字形?)的输出

重新定义特定 TS1 代码点(=字形?)的输出

现在我知道如何制作tex4ht 中的 \textminus但这似乎还不足以\num使用宏显示适当的减号siunitx。Joseph Wright 提供了一种解决方法,但我想知道如何在更通用的层面上实现这一目标。

\documentclass{scrartcl}
\usepackage{textcomp}
\pagestyle{empty}

\DeclareTextSymbolDefault\homegrowntextminus{TS1}
\DeclareTextSymbol\homegrowntextminus{TS1}{61}

\begin{document}
  +5 \homegrowntextminus 5
\end{document}

有没有办法配置,以便在转换为 HTML 时tex4ht打印正确的减号(如下面的输出所示)pdflatex没有了解或修改\homegrowntextminus

+5 -5

GitHub MWE:https://github.com/krlmlr/lm-template/tree/tex4ht-own-textminus

答案1

展示的内容tex4ht 中的 textminus可能适合进行小改动,但正确的过程有所不同。因为textcomp基本上是字体选择包,所以现有的tex4ht支持不是通过在textcomp.4ht文件中重新定义宏来完成的,而是存在一个用于 使用的字体的特殊映射文件textcomptcrm.htf它位于texmf-dist/tex4ht/ht-fonts/unicode/jknappen/tc目录中。您可以将此文件复制到您的工作目录并根据需要进行编辑。

.htf处理器使用这些文件tex4ht将文件中的字形转换dvi为内部表示,然后使用.4hf文件将其转换为实际字符。

文件结构.htf描述如下tex4ht 帮助。我们需要\textminus在此文件中找到的位置并更正提供的定义。它对应于字体编码中的位置。textcomp包使用TS1字体编码,它定义在ts1enc.def。如果我们搜索\textminus,我们会找到以下行:

\DeclareTextSymbol{\textminus}{TS1}{61}

这意味着\textminus在文件的第 61 位上定义tcrm.htf

 '-' ''            61

如您所见,-此处是硬编码的。我们可以将其修改为使用 unicode minus:

 '−' ''            61

最好使用这种十六进制形式,因为.4hf文件会使用它来转换为实际的字符。

如果您使用 now 编译文件htlatex textput并观察tex4ht命令的输出,您将看到以下行:

 (/home/mint/texlive/2012/texmf-dist/tex4ht/ht-fonts/iso8859/1/charset/unicode.4hf

如果你在此文件中搜索x2212,你将找到以下行:

 '−' ''  '-' ''

这意味着 unicode 减法被转换回-。这就是为什么这只适用于 unicode 输出

 htlatex texput "xhtml, charset=utf-8" " -cunihtf -utf8"

.4hf现在使用不同的文件:

 (/home/mint/texlive/2012/texmf-dist/tex4ht/ht-fonts/unicode/charset/unicode.4hf)

那里使用了不同的定义:

 '−' '' '\226\\136\\146\' ''

这会将实体转换为unicode值。

现在回到这个问题,情况更简单,因为你已经在位置 61 添加了你自己的符号,原始符号\textminus放在那里,我们已经重新定义了它。所以这也适用于\homegrowntextminus

相关内容