我基于 egreg 的解决方案这个问题为我的文档提供缺失的重音字符。我还添加了accsupp
以确保文本可搜索。
accsupp
不幸的是,和似乎存在问题microtype
:
\documentclass{article}
\usepackage{microtype}
\usepackage{fontspec}
\usepackage{newunicodechar}
\usepackage{accsupp}
\makeatletter \let\d\relax \DeclareRobustCommand{\d}[1]
{\hmode@bgroup
\o@lign{\relax#1\crcr\hidewidth\ltx@sh@ft{-1ex}.\hidewidth}\egroup}
\let\.\relax
\makeatother
\newunicodechar{Ḍ}{%
\BeginAccSupp{method=hex,unicode,ActualText=1e0c}%
\d{D}%
\EndAccSupp{}%
}
\begin{document}
Ḍ
\end{document}
这并不意味着 MWE 可以完美运行,如果microtype
它被注释掉的话。如果microtype
启用,它就会中断。
答案1
\protect
在前面添加\BeginAccSup
并\EndAccSup
通过警告揭示问题
Package microtype Warning: Unknown slot number of character
(microtype) `Ḍ (= \BeginAccSupp{method=hex,unicode,ActualText=1e0c}\d {D}\EndAccSupp{})'
(microtype) in font encoding `TU'.
(microtype) Make sure it's a single character
(microtype) (or a number) in inheritance list
(microtype) `mt-LatinModernRoman.cfg/105(protrusion)'.
\protect
在文档开始时发生无错误,其中microtype
延迟了一些设置。
为了避免过早重新定义Ḍ
,请使用\AtBeginDocument
,这样就不会发生与 的冲突microtype
。这可能会对突出部分产生一些影响,但已经采取的应对字体中缺失字符的技巧必然会对印刷产生影响。
\documentclass{article}
\usepackage{microtype}
\usepackage{fontspec}
\usepackage{newunicodechar}
\usepackage{accsupp}
\makeatletter
\let\d\relax
\DeclareRobustCommand{\d}[1]{%
\hmode@bgroup
\o@lign{%
\relax#1\crcr
\hidewidth\ltx@sh@ft{-1ex}.\hidewidth
}%
\egroup
}
%\let\.\relax
\makeatother
\AtBeginDocument{%
\newunicodechar{Ḍ}{%
\BeginAccSupp{method=hex,unicode,ActualText=1e0c}%
\d{D}%
\EndAccSupp{}%
}%
}
\begin{document}
Ḍ
\end{document}
我不确定为什么要这样做\let\.\relax
,所以我将其注释掉了。