accentbx vs \parbox,或 \' vs \"

accentbx vs \parbox,或 \' vs \"

Minion Pro 字体不支持^^^^0301重音。因此,为了在西里尔字母上方获得重音,我使用accentbx包。但不幸的是,如果包含在\parbox{}

梅威瑟:

\documentclass{article} 
\usepackage{fontspec,xunicode,xltxtra} 
\usepackage[T2A]{fontenc} 
\setmainfont[Mapping=tex-text]{Minion Pro} 
\newfontfamily\cyrillicfont[Mapping=tex-text]{Minion Pro} 
\usepackage{polyglossia} 
\setdefaultlanguage{russian} 
\usepackage{accentbx}
\def\'#1{\upaccent{\aboxshift[.9ex]{^^^^00b4}}{#1}}

\begin{document}
акц\'ент
\textit{акц\'ент}
\textbf{акц\'ент}
{\uppercase{
акц\'ент
\textit{акц\'ент}
\textbf{акц\'ент}}}

\parbox{3 cm}{акц\'ент е^^^^00b4 \upaccent{\aboxshift[.9ex]{^^^^00b4}}{е}}
\end{document}

accentbx 被 parbox 杀死

我该如何修复它?

更新:这很奇怪,但是

\def\"#1{\upaccent{\aboxshift[.9ex]{^^^^00b4}}{#1}}
...
\parbox{3 cm}{акц\"ент}

工作正常。

为什么\'和\"之间会有这么大的区别?

答案1

您不应该使用\def来定义您的 accent 命令——这会破坏其他编码的定义。此外,您不应该在 fontspec 之后加载 fontenc,因为这会更改默认编码。我会\'像这样重新定义(我没有您的 accentbx 包,因此我使用它\fbox作为示例):

\documentclass{article}

\usepackage{fontspec}
\setmainfont[Mapping=tex-text]{Minion Pro}
\newfontfamily\cyrillicfont[Mapping=tex-text]{Minion Pro}
\usepackage{polyglossia}
\setdefaultlanguage{russian}

\DeclareTextCommand{\'}{\UTFencname}[1]
   {\fbox{#1}}

\begin{document}


акц\'ент
\textit{акц\'ент}
\textbf{акц\'ент}
{\uppercase{
акц\'ент
\textit{акц\'ент}
\textbf{акц\'ент}}}

\parbox{3 cm}{акц\'ент}
\end{document}

在此处输入图片描述

答案2

由于被制表环境所超载,Latex 有一个\'已知的已保存版本,\@acci该版本已在 parboxes 和类似位置恢复。

因此,在重新定义重音后,重新定义保存的副本

\makeatletter
\let\@acci\'
\makeatother

相关内容