使用 \textit 时,字母下方的短音符不是斜体

使用 \textit 时,字母下方的短音符不是斜体

因为在斜体模式下,字母的开头会向左移动一点,所以短音符也需要向左移动,否则它不再位于字母下方。

\documentclass{article}
\usepackage{semtrans}
\begin{document}
Right position: \U{h}

Wrong position: \textit{\U{h}}
\end{document}

示例输出

关于如何正确使用短斜体字,您有什么想法吗?

答案1

该包很旧,定义缺少\ltx@sh@ft有助于纠正这种定位的。宏的更现代定义\U

\newcommand*\U[1]{\oalign{#1\crcr\hidewidth\ltx@sh@ft{-3ex}%
   \vbox to .2ex{\hbox{\u{}}\vss}\hidewidth}}

在您自己的文件中,您需要将其括在一\makeatletter...\makeatother对中。如果您正在加载semtrans包,则需要使用\renewcommand*

示例输出

\documentclass{article}
\usepackage{semtrans}

\makeatletter
\renewcommand*\U[1]{\oalign{#1\crcr\hidewidth\ltx@sh@ft{-3ex}%
   \vbox to .2ex{\hbox{\u{}}\vss}\hidewidth}}
\makeatother

\begin{document}
Upright position: \U{h}

Italic position: \textit{\U{h}}
\end{document}

以上内容模仿了\bLaTeX 内核中定义的重音,即:

\DeclareTextCommand{\b}{OT1}[1]
   {\hmode@bgroup\o@lign{\relax#1\crcr\hidewidth\ltx@sh@ft{-3ex}%
     \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}\egroup}

因此,你可以完全模仿这个并使用

\makeatletter
\DeclareTextCommand{\U}{OT1}[1]
  {\hmode@bgroup\o@lign{\relax#1\crcr\hidewidth\ltx@sh@ft{-3ex}%
  \vbox to.2ex{\hbox{\u{}}\vss}\hidewidth}\egroup}
\makeatother

答案2

目前最简单的方法可能是使用 xelatex(用于此处的图像)或 lualatex。

在此处输入图片描述

\documentclass{article}

\usepackage{fontspec}

\begin{document}

zzz ḫ

\textit{zzz ḫ}

\end{document}

相关内容