出于某种原因,当我使用cm-unicode
字体时,“修饰字母右半环”ʾ(U+02BE)出现在基线高度,并使用与我希望的符号略有不同的符号。我担心这可能是字体错误,但也可能是我做错了。无论如何,正确的符号,正如您所看到的,实际上出现在行的顶部。无论 Computer Modern XeLaTeX 默认使用哪个版本,都不会出现此问题,如您在此处所见:
\documentclass[12pt]{article}
\usepackage{fontspec}
\newfontfamily{\newTT}[Mapping=tex-text]{cmuntt.otf}
\begin{document}
\begin{enumerate}
\item
\texttt{hāʾādām}
\item
{\newTT hāʾādām}
\end{enumerate}
1号是正确的,2号不正确。
由于它cm-unicode
是我文档中许多其他符号的基础,所以我想到解决这个问题的最佳方法是使用\raisebox
\documentclass[12pt]{article}
\usepackage{fontspec}
\newfontfamily{\newTT}[Mapping=tex-text]{cmuntt.otf}
\newcommand{\glottal}{\raisebox{0.7ex}{ʾ}}
\begin{document}
{\newTT hā\glottal{}ādām}
\end{document}
有没有一种方便的方法可以让 LaTeX 将我的ʾ的顶部与线的顶部对齐,以使其肯定处于正确的位置?
PS 此问题也适用于 ʿ,即“修饰字母左半环”(U+02BF)。我希望为这两个字符解决此问题。
cm-unicode
显然,理想的解决方案是如果有人知道的话就找到一种获取正确符号的方法?
答案1
这里我使用\belowbaseline
功能将 的stackengine
顶部设置为在基线下方(即在基线上方)\glottal
的距离,其中框 0 已设置为大写字母,该字母到达线的顶部。如果我使用,它将是 的底部与该点对齐,而不是顶部。-\ht0
\ht0
X
\abovebaseline
\glottal
\documentclass[12pt]{article}
\usepackage{fontspec,stackengine}
\newfontfamily{\newTT}[Mapping=tex-text]{cmuntt.otf}
\newcommand{\glottal}{\setbox0=\hbox{X}\belowbaseline[-\ht0]{ʾ}}
\begin{document}
{\newTT hā\glottal{}ādām}
{\LARGE\newTT hā\glottal{}ādām}
{\tiny\newTT hā\glottal{}ādām}
\end{document}
答案2
一种可能性是让字符来自默认的 Latin Modern 字体。Latin Modern 和 cm-unicode 都是对 Computer Modern 设计的解释,因此应该相当兼容
\documentclass[12pt]{article}
\usepackage{fontspec}
\newfontfamily{\newTT}[Mapping=tex-text,
]{cmuntt.otf}
\catcode`ʾ\active
\newcommandʾ{{\fontfamily\familydefault\selectfont\stringʾ}}
\begin{document}
\begin{enumerate}
\item
\texttt{hāʾādām}
\item
{\newTT hāʾādām}
\end{enumerate}
\end{document}