我在加载下标中使用框时遇到了问题unicode-math
。
我从我的包中起草了以下 MWEactuarialsymbol
。[以下命令\qx
将下标放在符号的两侧;下标应底部对齐。]
\documentclass{article}
\usepackage{unicode-math}
\makeatletter
\def\qx[#1]#2{
\fboxsep=0pt % for debugging purposes
\setbox\@ne\hbox{$\scriptstyle{#1}$}
\setbox\thr@@\hbox{$\scriptstyle{#2}$}
\ifdim \ht\@ne>\ht\thr@@
\ht\thr@@=\ht\@ne
\else
\ht\@ne=\ht\thr@@
\fi
\vphantom{q}\sb{\fbox{\box\@ne}}%
q\sb{\fbox{\box\thr@@}}%
}
\makeatother
\begin{document}
$\qx[t]{x}$
\end{document}
使用 进行编译时xetex
,两侧的t
和的高度不同:x
q
注释掉后unicode-math
,下标处于相同的高度,正如我所期望的,并且与以下内容一起工作pdftex
:
在符号构建之前添加\the\ht\thr@@
或\the\ht\@ne
解决了定位问题(但显然不是一个可行的解决方案)。删除对的调用\vphantom
也可以解决定位问题。
我在文档中看到unicode-math
使用 xetex 对 unicode-math 中的下标进行了一些处理,但老实说,我不知道我可能做错了什么或者应该如何解决这个问题。
使用 unicode-math 放置下标。这是 XeTeX 错误吗?似乎与我的问题密切相关,但遗憾的是没有任何帮助。
答案1
\vphantom
我可以看到使用时的不同移位。奇怪的是,如果明确选择\textstyle
\vphantom 内部,它会消失。它看起来像泄漏 mathstyles 问题的另一种变体,在我看来,这可能是一个xetex
问题,而不是unicode math
。
\documentclass{article}
\usepackage{unicode-math}
\makeatletter
\def\qx[#1]#2{
\fboxsep=0pt % for debugging purposes
\setbox\@ne\hbox{$\scriptstyle{#1}$}
\setbox\thr@@\hbox{$\scriptstyle{#2}$}
\ifdim \ht\@ne>\ht\thr@@
\ht\thr@@=\ht\@ne
\else
\ht\@ne=\ht\thr@@
\fi
\vphantom{q}\sb{\fbox{\box\@ne}}%
q\sb{\fbox{\box\thr@@}}%
}
\makeatother
\usepackage{tikz}
\begin{document}
\tikz[overlay]\draw[red] (0,-2.47003pt)--++(10cm,-2.47003pt);
$\vphantom{\textstyle q}\sb{t} q\sb{t}$
\tikz[overlay]\draw[red] (0,-2.47003pt)--++(10cm,-2.47003pt);
$\vphantom{q}\sb{t} q\sb{t}$
\tikz[overlay]\draw[red] (0,-2.47003pt)--++(10cm,-2.47003pt);
$\qx[t]{x}$
\makeatletter
\def\qx[#1]#2{
\fboxsep=0pt % for debugging purposes
\setbox\@ne\hbox{$\scriptstyle{#1}$}
\setbox\thr@@\hbox{$\scriptstyle{#2}$}
\ifdim \ht\@ne>\ht\thr@@
\ht\thr@@=\ht\@ne
\else
\ht\@ne=\ht\thr@@
\fi
\vphantom{\textstyle q}\sb{\fbox{\box\@ne}}%
q\sb{\fbox{\box\thr@@}}%
}
\makeatother
\tikz[overlay]\draw[red] (0,-2.47003pt)--++(10cm,-2.47003pt);
$\qx[t]{x}$
\end{document}
答案2
我无法确认该问题:
\documentclass{article}
\usepackage{ifxetex}
\ifxetex
\usepackage{unicode-math}
\else
\usepackage{lmodern}
\fi
\makeatletter
\def\qx[#1]#2{%
\begingroup
\sbox\z@{$\scriptstyle{#1}$}%
\sbox\tw@{$\scriptstyle{#2}$}%
\ifdim \ht\z@>\ht\tw@
\ht\tw@=\ht\z@
\else
\ht\z@=\ht\tw@
\fi
\vphantom{q}\sb{\box\z@}%
q\sb{\box\tw@}%
\endgroup
}
\makeatother
\newcommand{\debugrule}{%
\leavevmode
\rlap{%
\sbox0{$q_x$}\sbox2{$q$}%
\dimen0=\dp0 \ifdim\dp2>\dp0 \dimen=\dp2\fi
\vrule depth \dimen0 height \dimexpr0.1pt-\dimen0\relax width 2cm}%
}
\begin{document}
\debugrule$q_tq_x\qx[t]{x}$
\debugrule$\vphantom{q}_{q}q_x\qx[q]{x}$
\debugrule$\vphantom{q}_{t}q_x\qx[t]{x}$
\end{document}
使用 XeLaTeX 编译后得到
\vphantom{q}_t
仅在未调整高度的情况下使用时才会出现错位。