htlatex 将连字符转换为空字节

htlatex 将连字符转换为空字节

我熟悉以下问题162626204822,并按照其中的说明进行操作,但一直无法得到好的解决方案。htlatex 正在将文档中的所有连字符转换为空字节。MWE:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[oldstyle,proportional]{libertine}
\begin{document}
find the fly; it's difficult, but fluffy.
\end{document}

我的命令行:

htlatex test.tex "xhtml, -css, charset=utf-8" " -utf8 -cunihtf" "" -shell-escape;

问题似乎出在libertine;当我不加载它时,连字符会正常显示,但当我加载它时,连字符为空。这建议的解决方案是简单地删除包libertine,然后使用 进行编译htlatex,但我真的想避免必须修改我的文档才能将其转换为 HTML。

有人对此有建议的解决方案吗?

答案1

Linux Libertine 仍未在 Linux 中完全支持tex4ht,因为有几十种字体,适用于各种字体编码、样式、大小和粗细。但是,添加对基本 T1 字体的支持并不难,使用特发

您会发现命令输出缺少一些字体支持tex4ht

tex4ht test.dvi " -cunihtf -utf8"

这将打印出很多文本,因为它打印的是tex4ht.env文件的内容,而文件的内容并不小。但在开始时,你会发现:

tex4ht.c (2012-07-25-19:36 kpathsea)
tex4ht sample.dvi 
(/usr/local/texlive/2015/texmf-dist/tex4ht/base/unix/tex4ht.env)
(/usr/local/texlive/2015/texmf-dist/tex4ht/ht-fonts/iso8859/1/html/charset/unicode.4hf)
(/usr/local/texlive/2015/texmf-dist/fonts/tfm/public/libertine/LinLibertineTB-osf-t1.tfm)
(LinLibertineTB-osf-t1.htf)
Searching `LinLibertineT-osf-t1.htf' for `LinLibertineTB-osf-t1.htf'
--- warning --- Couldn't find font `LinLibertineT-osf-t1.htf' (char codes: 0--255)

----------------------------------------------------
environment file
----------------------------------------------------
% tex4ht.env-unix (2015-02-15-10:26), generated from tex4ht-env.tex

因此我们需要创建文件LinLibertineT-osf-t1.htf,对应到。我们可以通过项目提供的命令 LinLibertineT-osf-t1.tfm来检查使用的字体编码以及字体是虚拟的还是真实的:lstexenchtfgen

$ lstexenc LinLibertineT-osf-t1
LinLibertineT-osf-t1    vf      EXTENDED TEX FONT ENCODING - LATIN
  LinLibertineT-osf-t1--base    tfm     EXTENDED TEX FONT ENCODING - LATIN

所以我们看到它是虚拟字体,并且使用了一些非标准字体编码。它使用LinLibertineT-osf-t1--base作为基础字体,有时虚拟字体包含几种字体,所以这还不算太糟。

有时可以在.map文件中找到准确的字体编码。最简单的查找方法是使用 Google 搜索fontname enc,因此LinLibertineT-osf-t1--base enc在我们的例子中(是的,enc 文件是为基本字体提供的。如果虚拟字体包含几种真实字体,我们需要为每种字体找到编码)。搜索找到文件libertine.map,它为所有 Libertine 真实字体提供了编码。我们必须在其中搜索LinLibertineT-osf-t1--base

LinLibertineT-osf-t1--base LinLibertineT "AutoEnc_ulngvdga3jyvcsz3zod63p4gna ReEncodeFont" <[lbtn_ulngvd.enc <LinLibertineT.pfb

重要的是<[lbtn_ulngvd.enc部分,它包含编码名称lbtn_ulngvd。现在我们可以为创建辅助表LinLibertineT-osf-t1

tfmtochars LinLibertineT-osf-t1 lbtn_ulngvd > LinLibertineT-osf-t1.tsv

最后创建文件.htf

htfgen LinLibertineT-osf-t1.tsv > LinLibertineT-osf-t1.htf

结果如下:

LinLibertineT-osf-t1 0 255
'&#x0060;'  ''  grave
'&#x00B4;'  ''  acute
'&#x02C6;'  ''  circumflex
'&#x02DC;'  ''  tilde
'&#x00A8;'  ''  dieresis
'&#x02DD;'  ''  hungarumlaut
'&#x02DA;'  ''  ring
'&#x02C7;'  ''  caron
'&#x02D8;'  ''  breve
'&#x00AF;'  ''  macron
'&#x02D9;'  ''  dotaccent
'&#x00B8;'  ''  cedilla
'&#x02DB;'  ''  ogonek
'&#x201A;'  ''  quotesinglbase
'&#x2039;'  ''  guilsinglleft
'&#x203A;'  ''  guilsinglright
'&#x201C;'  ''  quotedblleft
'&#x201D;'  ''  quotedblright
'&#x201E;'  ''  quotedblbase
'&#x00AB;'  ''  guillemotleft
'&#x00BB;'  ''  guillemotright
'&#x2013;'  ''  endash
'&#x2014;'  ''  emdash
'&#xnil;'   ''  .notdef
'&#x2080;'  ''  perthousandzero
'&#x0131;'  ''  dotlessi
'&#x0237;'  ''  dotlessj
'&#xFB01;'  ''  f_i
'&#xFB03;'  ''  f_f_i
'&#xFB00;'  ''  f_f
'&#xFB02;'  ''  f_l
'&#xFB04;'  ''  f_f_l
'&#x2423;'  ''  uni2423
'&#x0021;'  ''  exclam
'&#x0022;'  ''  quotedbl
'&#x0023;'  ''  numbersign
'&#x0024;'  ''  dollar
'&#x0025;'  ''  percent
'&#x0026;'  ''  ampersand
'&#x2019;'  ''  quoteright
'&#x0028;'  ''  parenleft
'&#x0029;'  ''  parenright
'&#x002A;'  ''  asterisk
'&#x002B;'  ''  plus
'&#x002C;'  ''  comma
'&#x002D;'  ''  hyphen
'&#x002E;'  ''  period
'&#x002F;'  ''  slash
'&#xF730;'  ''  zero.oldstyle
'&#xF731;'  ''  one.oldstyle
'&#xF732;'  ''  two.oldstyle
'&#xF733;'  ''  three.oldstyle
'&#xF734;'  ''  four.oldstyle
'&#xF735;'  ''  five.oldstyle
'&#xF736;'  ''  six.oldstyle
'&#xF737;'  ''  seven.oldstyle
'&#xF64B;'  ''  eight.taboldstyle
'&#xF739;'  ''  nine.oldstyle
'&#x003A;'  ''  colon
'&#x003B;'  ''  semicolon
'&#x003C;'  ''  less
'&#x003D;'  ''  equal
'&#x003E;'  ''  greater
'&#x003F;'  ''  question
'&#x0040;'  ''  at
'&#x0041;'  ''  A
'&#x0042;'  ''  B
'&#x0043;'  ''  C
'&#x0044;'  ''  D
'&#x0045;'  ''  E
'&#x0046;'  ''  F
'&#x0047;'  ''  G
'&#x0048;'  ''  H
'&#x0049;'  ''  I
'&#x004A;'  ''  J
'&#x004B;'  ''  K
'&#x004C;'  ''  L
'&#x004D;'  ''  M
'&#x004E;'  ''  N
'&#x004F;'  ''  O
'&#x0050;'  ''  P
'&#x0051;'  ''  Q
'&#x0052;'  ''  R
'&#x0053;'  ''  S
'&#x0054;'  ''  T
'&#x0055;'  ''  U
'&#x0056;'  ''  V
'&#x0057;'  ''  W
'&#x0058;'  ''  X
'&#x0059;'  ''  Y
'&#x005A;'  ''  Z
'&#x005B;'  ''  bracketleft
'&#x005C;'  ''  backslash
'&#x005D;'  ''  bracketright
'&#x005E;'  ''  asciicircum
'&#x005F;'  ''  underscore
'&#x2018;'  ''  quoteleft
'&#x0061;'  ''  a
'&#x0062;'  ''  b
'&#x0063;'  ''  c
'&#x0064;'  ''  d
'&#x0065;'  ''  e
'&#x0066;'  ''  f
'&#x0067;'  ''  g
'&#x0068;'  ''  h
'&#x0069;'  ''  i
'&#x006A;'  ''  j
'&#x006B;'  ''  k
'&#x006C;'  ''  l
'&#x006D;'  ''  m
'&#x006E;'  ''  n
'&#x006F;'  ''  o
'&#x0070;'  ''  p
'&#x0071;'  ''  q
'&#x0072;'  ''  r
'&#x0073;'  ''  s
'&#x0074;'  ''  t
'&#x0075;'  ''  u
'&#x0076;'  ''  v
'&#x0077;'  ''  w
'&#x0078;'  ''  x
'&#x0079;'  ''  y
'&#x007A;'  ''  z
'&#x007B;'  ''  braceleft
'&#x007C;'  ''  bar
'&#x007D;'  ''  braceright
'&#x007E;'  ''  asciitilde
'&#x002D;'  ''  hyphen
'&#x0102;'  ''  Abreve
'&#x0104;'  ''  Aogonek
'&#x0106;'  ''  Cacute
'&#x010C;'  ''  Ccaron
'&#x010E;'  ''  Dcaron
'&#x011A;'  ''  Ecaron
'&#x0118;'  ''  Eogonek
'&#x011E;'  ''  Gbreve
'&#x0139;'  ''  Lacute
'&#x013D;'  ''  Lcaron
'&#x0141;'  ''  Lslash
'&#x0143;'  ''  Nacute
'&#x0147;'  ''  Ncaron
'&#x014A;'  ''  Eng
'&#x0150;'  ''  Ohungarumlaut
'&#x0154;'  ''  Racute
'&#x0158;'  ''  Rcaron
'&#x015A;'  ''  Sacute
'&#x0160;'  ''  Scaron
'&#x015E;'  ''  Scedilla
'&#x0164;'  ''  Tcaron
'&#x0162;'  ''  Tcedilla
'&#x0170;'  ''  Uhungarumlaut
'&#x016E;'  ''  Uring
'&#x0178;'  ''  Ydieresis
'&#x0179;'  ''  Zacute
'&#x017D;'  ''  Zcaron
'&#x017B;'  ''  Zdotaccent
'&#x0132;'  ''  IJ
'&#x0130;'  ''  Idotaccent
'&#x0111;'  ''  dcroat
'&#x00A7;'  ''  section
'&#x0103;'  ''  abreve
'&#x0105;'  ''  aogonek
'&#x0107;'  ''  cacute
'&#x010D;'  ''  ccaron
'&#x010F;'  ''  dcaron
'&#x011B;'  ''  ecaron
'&#x0119;'  ''  eogonek
'&#x011F;'  ''  gbreve
'&#x013A;'  ''  lacute
'&#x013E;'  ''  lcaron
'&#x0142;'  ''  lslash
'&#x0144;'  ''  nacute
'&#x0148;'  ''  ncaron
'&#x014B;'  ''  eng
'&#x0151;'  ''  ohungarumlaut
'&#x0155;'  ''  racute
'&#x0159;'  ''  rcaron
'&#x015B;'  ''  sacute
'&#x0161;'  ''  scaron
'&#x015F;'  ''  scedilla
'&#x0165;'  ''  tcaron
'&#x0163;'  ''  tcedilla
'&#x0171;'  ''  uhungarumlaut
'&#x016F;'  ''  uring
'&#x00FF;'  ''  ydieresis
'&#x017A;'  ''  zacute
'&#x017E;'  ''  zcaron
'&#x017C;'  ''  zdotaccent
'&#x0133;'  ''  ij
'&#x00A1;'  ''  exclamdown
'&#x00BF;'  ''  questiondown
'&#x00A3;'  ''  sterling
'&#x00C0;'  ''  Agrave
'&#x00C1;'  ''  Aacute
'&#x00C2;'  ''  Acircumflex
'&#x00C3;'  ''  Atilde
'&#x00C4;'  ''  Adieresis
'&#x00C5;'  ''  Aring
'&#x00C6;'  ''  AE
'&#x00C7;'  ''  Ccedilla
'&#x00C8;'  ''  Egrave
'&#x00C9;'  ''  Eacute
'&#x00CA;'  ''  Ecircumflex
'&#x00CB;'  ''  Edieresis
'&#x00CC;'  ''  Igrave
'&#x00CD;'  ''  Iacute
'&#x00CE;'  ''  Icircumflex
'&#x00CF;'  ''  Idieresis
'&#x00D0;'  ''  Eth
'&#x00D1;'  ''  Ntilde
'&#x00D2;'  ''  Ograve
'&#x00D3;'  ''  Oacute
'&#x00D4;'  ''  Ocircumflex
'&#x00D5;'  ''  Otilde
'&#x00D6;'  ''  Odieresis
'&#x0152;'  ''  OE
'&#x00D8;'  ''  Oslash
'&#x00D9;'  ''  Ugrave
'&#x00DA;'  ''  Uacute
'&#x00DB;'  ''  Ucircumflex
'&#x00DC;'  ''  Udieresis
'&#x00DD;'  ''  Yacute
'&#x00DE;'  ''  Thorn
'&#xnil;'   ''  .notdef
'&#x00E0;'  ''  agrave
'&#x00E1;'  ''  aacute
'&#x00E2;'  ''  acircumflex
'&#x00E3;'  ''  atilde
'&#x00E4;'  ''  adieresis
'&#x00E5;'  ''  aring
'&#x00E6;'  ''  ae
'&#x00E7;'  ''  ccedilla
'&#x00E8;'  ''  egrave
'&#x00E9;'  ''  eacute
'&#x00EA;'  ''  ecircumflex
'&#x00EB;'  ''  edieresis
'&#x00EC;'  ''  igrave
'&#x00ED;'  ''  iacute
'&#x00EE;'  ''  icircumflex
'&#x00EF;'  ''  idieresis
'&#x00F0;'  ''  eth
'&#x00F1;'  ''  ntilde
'&#x00F2;'  ''  ograve
'&#x00F3;'  ''  oacute
'&#x00F4;'  ''  ocircumflex
'&#x00F5;'  ''  otilde
'&#x00F6;'  ''  odieresis
'&#x0153;'  ''  oe
'&#x00F8;'  ''  oslash
'&#x00F9;'  ''  ugrave
'&#x00FA;'  ''  uacute
'&#x00FB;'  ''  ucircumflex
'&#x00FC;'  ''  udieresis
'&#x00FD;'  ''  yacute
'&#x00FE;'  ''  thorn
'&#x00DF;'  ''  germandbls
LinLibertineT-osf-t1 0 255

(您需要在文件末尾添加空行,Stack Exchange 会吃掉它)

我们还应该添加对粗体和斜体的支持。如果字体使用相同的编码,我们不必重复整个过程。不幸的是,每种字体使用不同的编码,但在 diff 之后,它们似乎并没有太大的不同,所以我们可以只创建.htf文件,它不包含所有字符的所有 unicode 值,而只是链接到LinLibertineT-osf-t1。第二种文件类型htf如下所示:

LinLibertineTB-osf-t1.htf:

.LinLibertineT-osf-t1
htfcss:  LinLibertineTB-osf-t1  font-weight: bold; font-family: "Linux Libertine O",serif;  

LinLibertineTI-osf-t1:

.LinLibertineT-osf-t1
htfcss:  LinLibertineTI-osf-t1  font-weight: normal; font-style: italic; font-family: "Linux Libertine O",serif;  

如果你没有禁用CSS,你会看到类似以下内容:

在此处输入图片描述

如您所见,普通字体没有样式,但粗体和斜体有。您可以使用简单的配置文件修复它:

\Preamble{xhtml}
\Css{body{font-family: "Linux Libertine O", serif;}}
\begin{document}
\EndPreamble

还请注意,这里使用的是 unicode 旧式数字,而不是普通数字。最终结果:

在此处输入图片描述

相关内容