我正在使用 Adobe Garamond Pro,需要该字体中不存在的两个字符 ʾ 和 ʿ。我通过将 ˘ 旋转 90 度并用 制作这些新的 unicode 字符解决了这个问题newunicodechar
。这样我就可以直接在源代码中输入 ʿ 和 ʾ 来获得正确的输出。现在,这些字符非常奇怪,需要调整一些字距。我想用 来做到这一点\XeTeXinterchartoks
。问题是这对新创建的字符不起作用。为什么会这样?有解决方法吗?
\documentclass{article}
\usepackage{fontspec}
\usepackage{newunicodechar}
\setmainfont{Adobe Garamond Pro} %substitute as desired
% make new character
\newunicodechar{ʾ}{\rotatebox[origin=center]{90}{˘}\hspace{-1.2ex}}
% (absurly large) kerning
\XeTeXinterchartokenstate=1
\newXeTeXintercharclass\dia
\XeTeXcharclass `\ʾ=\dia
\newXeTeXintercharclass\el
\XeTeXcharclass `\l=\el
\XeTeXinterchartoks \el \el {\kern 1em}
\XeTeXinterchartoks \dia \el {\kern 1em}
\begin{document}
\Huge
llʾllll
\end{document}
附加问题:有没有办法只旋转字形 ˘ 而不旋转其下方的空间?
答案1
当您这样做时\newunicodechar{<char>}{<tokens>}
,其效果就像一个宏,因此它会在到达应用<char>
该功能的阶段之前消失。\XeTeXinterchartoks
但是,您可以通过对以未使用的字符结尾的字符进行扩展来解决这个问题;这里我设置了 U+FEFF(零宽度无间断空格):
\documentclass{article}
\usepackage{fontspec}
\usepackage{newunicodechar}
\setmainfont{Old Standard} %substitute as desired
\usepackage{graphicx}
% make new character
\newunicodechar{ʾ}{\rotatebox[origin=center]{90}{˘}\hspace{-1.2ex}^^^^feff}
% (absurly large) kerning
\XeTeXinterchartokenstate=1
\newXeTeXintercharclass\dia
\XeTeXcharclass "FEFF=\dia
\newXeTeXintercharclass\el
\XeTeXcharclass `\l=\el
\XeTeXinterchartoks \el \el {\kern 1em}
\XeTeXinterchartoks \dia \el {\kern 1em}
\begin{document}
\Huge
llʾllll
\end{document}
该语法^^^^feff
相当于直接输入字符(在这种情况下更好,因为它会显示字符)。十六进制数"FEFF
可用于将字符分配给类别(请注意,符号需要小写^^^^
,而十六进制数必须使用大写)。
答案2
这只回答了你的附加问题。一般来说,没有自动修复,因为字形的位置通常会有不对称的上下空间,这无法提前知道。但只要稍加努力,就可以找到解决方案(这是否比 OP 所做的更好,由您决定)。
要获得相同宽度的项目,请将其放在与原始字形宽度相同的框中。为了正确获得水平字距,我提供了旋转字形的框版本,以便您确定适当的偏移量。确定适当的偏移量后,只需使用该偏移量\xrb[offset]{glyph}
即可\rb[offset]{glyph}
\documentclass{article}
\usepackage{graphicx}
\usepackage{calc}
\fboxsep=-\fboxrule
\newcommand\xrb[2][0pt]{\fbox{\makebox[\widthof{#2}][r]{%
\raisebox{#1}{\rotatebox{90}{\raisebox{-#1}{#2}}\kern-#1}}}}
\newcommand\rb[2][0pt]{\makebox[\widthof{#2}][r]{%
\raisebox{#1}{\rotatebox{90}{\raisebox{-#1}{#2}}\kern-#1}}}
\begin{document}
\fbox{'} \xrb[0pt]{'} \xrb[1pt]{'} \xrb[2pt]{'} \xrb[3pt]{'} \xrb[4pt]{'}
Steve\rb[4pt]{'}s test
\end{document}