![使用宪章字体从 PDF 中复制捷克字符](https://linux22.com/image/258025/%E4%BD%BF%E7%94%A8%E5%AE%AA%E7%AB%A0%E5%AD%97%E4%BD%93%E4%BB%8E%20PDF%20%E4%B8%AD%E5%A4%8D%E5%88%B6%E6%8D%B7%E5%85%8B%E5%AD%97%E7%AC%A6.png)
我希望能够从 PDF 中复制捷克字符,但由于某种原因,它不起作用。
这是我的代码:
\usepackage{cmap}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{charter}
如果我写例如日延(十月:),PDF 中的文本很好,但当我尝试将其复制到某处时,我得到了ˇríjen. (所有带有 ˇ 的字符都相同)。
如果我将其更改\usepackage{charter}
为\usepackage{tgtermes}
,字符 ř 就可以了。但我想使用 charter 字体,因为它看起来更好,但我需要能够复制捷克字符。
我怎样才能通过宪章实现复制捷克字符?
答案1
TeX Gyre Termes 中的字符是“真实的”字形,也就是说,它们是完全预先组合的。
在 Charter 中,重音符号是通过在字母上添加重音符号来实现的。这是通过虚拟字体实现的,因此 TeX 在尝试连字时不会感到困惑,但最终输出仍然具有组合的符号。
要么你找到一个具有预制字形的 Charter 字体,要么对此无能为力。
这是虚拟字体定义中的条目bchr8t
,即请求 Charter 时使用的文本字体,用于八进制字符 260,在 T1 编码中对应于“ř”:
(CHARACTER O 260
(CHARWD R 0.382)
(CHARHT R 0.741)
(MAP
(PUSH)
(MOVEDOWN R -0.01)
(MOVERIGHT R -0.059)
(SETCHAR O 20)
(POP)
(SETCHAR C r)
)
)
这清楚地显示了字形是由两部分组成的:重音符号(八进制 20)和“r”。
答案2
这可以通过改变虚拟字体来实现,把重音后基本字母,而不是在它之前,并且......
(CHARACTER O 260
(CHARWD R 0.382)
(CHARHT R 0.741)
(MAP
(PUSH)
(SETCHAR C r)
(POP)
(MOVEDOWN R -0.01)
(MOVERIGHT R -0.059)
(SETCHAR O 20)
)
)
...确保重音符号映射到 Unicode 组合重音符:
\pdfglyphtounicode{caron}{030C}
完整流程如下:
vftovp bchr8t.vf > bchr8t.vpl
edit bchr8t.vpl to modify all composed accented characters as above
vptovf bchr8t.vpl
move the resulting files bchr8t.vf and bchr8t.tfm to where you want them in a local place, such as texmf-local in the TeX directory tree
Rebuild the database; e.g. texhash
对粗体和斜体样式执行相同的操作。