accsupp 和 microtype 的问题

accsupp 和 microtype 的问题

我基于 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,所以我将其注释掉了。

相关内容