“fo”连字符使 PDF 代码在 xetex 中看起来很奇怪

“fo”连字符使 PDF 代码在 xetex 中看起来很奇怪

我正在尝试从 PDF 中提取表格数据。为此,我需要一段文本的开始和结束的精确位置,这就是我的问题所在。为了进行测试,我使用 LaTeX 生成了一些文本。请考虑以下最小示例:

\documentclass{article}
\begin{document}
foo
\end{document}

通过 latex -> dvips -> ps2pdf 编译时,我得到(解压后)以下 PDF 代码,看起来不错:

10 0 0 10 0 0 cm          # concat to transformation matrix
BT                        # begin text mode
/R8 9.96264 Tf            # select font
1 0 0 1 148.68 657.24 Tm  # set text matrix
[(f)3.87556(o)-29.9875(o)-5.88993]TJ
# ^ print 'f', then go a little bit left, print 'o' (so f and o
# overlap a bit), go a little bit right, print 'o'. Then go right again,
# for whatever reason.

但是当使用 xelatex 时,它看起来像这样:

 1 0 0 1 72 720 cm  # concat a DIFFERENT transformation matrix
 0 G 0 g            # set gray levels to 0
 BT                 # begin text mode
 /F1 9.963 Tf       # select font
 76.71 -62.76 Td    # move to text position (this was missing above)
 [(fo)-28(o)]TJ     # print 'fo', then go 28 right, then print 'o'

让我困惑的是第二个输出的最后一行:为什么“f”和“o”重叠?在哪里指定了?我没有看到任何“Tc”命令或类似的东西。那么为什么第二个“o”不与第一个重叠?

多谢!

答案1

生成未压缩的文件

如果是 pdfLaTeX 或 LuaLaTeX,可以通过 TeX 命令生成未压缩的文件:

\ifx\pdfobjcompresslevel\undefined
\else
  \pdfobjcompresslevel=0
  \pdfcompresslevel=0
\fi
\documentclass{article}
\pagestyle{empty}
\begin{document} 
foo
\end{document}

使用 XeLaTeX 可以通过命令行生成未压缩的文件:

xelatex --output-driver="xdvipdfmx -V4 -z0" test

路线 latex/dvips/ps2pdf:

ps2pdf -dCompressPages=false test.ps

页面流

pdfTeX:

pdfLaTeX

BT
/F8 9.9626 Tf 148.712 707.125 Td [(fo)-28(o)]TJ
ET

LuaLaTeX:

LuaLaTeX

BT
/F15 9.96264 Tf 1 0 0 1 148.712 707.125 Tm [(fo)-27(o)]TJ
ET

XeTeX:

赛莱特

 q 1 0 0 1 72 769.89 cm 0 G 0 g BT /F1 9.963 Tf 76.71 -62.76 Td[(fo)-28(o)]TJ ET
 Q

latex/dvips/ps2pdf:

latex/dvips/ps2pdf

q 0.1 0 0 0.1 0 0 cm
/R7 gs
0 g
q
10 0 0 10 0 0 cm BT
/R8 9.96264 Tf
1 0 0 1 148.68 707.14 Tm
[(f)3.87556(o)-29.9875(o)-5.88993]TJ
ET
Q
Q

讨论

  • 在这两种情况下,我都看不到字形的任何重叠。

  • 不涉及任何连字符。

  • 两个os 之间会插入额外的空格。这称为隐式字距调整,TeX 会在 TFM 文件 ( ) 中查找数据cmr10.tfm。负数 (-28) 表示在中间插入空格。正数表示字形边界框重叠。

  • 仅在 latex/dvips/ps2pdf 的情况下,f下一个o会稍微靠近 0.00387556(单位为千分之一!),由 Ghostscript 引入。

  • 您的 XeLaTeX 案例与此处的发现不同:通常由包多次0 G 0 g添加。也许您使用了带有颜色包的不同 TeX 文件并清理了 PDF 结果。检查您是否还使用了不同的字体。color

相关内容