多语症和 hookrightarrow

多语症和 hookrightarrow

\hookrightarrow有人能解释一下为什么当我加载法语支持时,尾部和头部之间会有间隙吗polyglossia?我正在使用 LuaLaTeX 制作 .pdf。

\documentclass{article}
\usepackage{polyglossia}
\setdefaultlanguage{french}
\begin{document}

\Huge $\hookrightarrow$
\end{document}

输出如下:

错误的箭头

谢谢。

答案1

LuaTeX 用于在标点符号后插入惩罚和空格的回调应该在数学模式下被禁用,但显然并没有。

修复发布前的解决方法:

\documentclass{article}
\usepackage{ifluatex}

\usepackage{polyglossia}
\setdefaultlanguage{french}

\ifluatex
  \makeatletter
  \let\latex@lhook\lhook
  \renewrobustcmd{\lhook}{%
    \mathrel{\mathpalette\do@lhook\relax}%
  }
  \newcommand{\do@lhook}[2]{%
    \hbox{\directlua{polyglossia.desactivate_frpt()}$\m@th#1\latex@lhook$}%
  }
  \makeatother
\fi

\begin{document}

$\hookrightarrow$

\end{document}

在此处输入图片描述

unicode-math当然,如果使用的话,这就没有必要了。

问题在于,正如 Barbara Beeton 所暗示的(但没有抓住真正的问题),右箭头恰好占据了 ASCII 码中感叹号的位置,因此 LuaTeX 盲目地在它之前应用了惩罚和空格,就像在文本中一样。

其他与标点符号共享代码点的数学符号也可能出现同样的问题。

OML 编码涉及的字符有

  • \lhook在...的位置,
  • \omega在...的位置!
  • 期间的位置:
  • \star在...的位置?
  • 逗号,在;
  • >与其自身处于同一位置。

但是,似乎只有\lhook\omega受到影响;应该对不同的字符组合进行更多测试。

在 OMS 编码中我们有

  • \Leftrightarrow在...的位置,
  • \rightarrow在...的位置!
  • \lnot在...的位置:
  • \bot在...的位置?
  • \emptyset在...的位置;
  • \top在...的位置>

奇怪的是,这里,,\rightarrow和受到了影响。\lnot\bot\emptyset

以下是输出

X${\lhook}{\omega}{.}{\star}{,}{>}
  {\Leftrightarrow}{\rightarrow}{\lnot}{\bot}{\emptyset}{\top}$X

\selectlanguage{english}

X${\lhook}{\omega}{.}{\star}{,}{>}
  {\Leftrightarrow}{\rightarrow}{\lnot}{\bot}{\emptyset}{\top}$X

用于进行比较

在此处输入图片描述

我很害怕看到 OMX 编码会发生什么:我猜

答案2

这是根据 barbara beeton 的评论提出的一个糟糕的修复,如果有人有更好的办法......

\documentclass{article}
\usepackage{polyglossia}
\setdefaultlanguage{french}
\setotherlanguage{english}
\begin{document}

\Huge \begin{english}$\hookrightarrow$\end{english}$\hookrightarrow$
\end{document}

相关内容