插入符号 \^{} 渲染不正确

插入符号 \^{} 渲染不正确

修复问题后单引号似乎无法用 xelatex 和 Source Code Pro 缩放,我发现插入符号在最近的 LaTeX 更新中也无法呈现。这是它们在之前的 PDF 中的样子(大约一个月前):

老的

现在它们看起来像这样:

新的

一个最小的例子(通过 进行编译xelatex):

\documentclass[12pt]{article}
\usepackage{fontspec}

\begin{document}

two carets (\texttt{\^{}}) produce a superscript (e.g.,
\texttt{ClO\^{}-1\^{}} renders ClO\textsuperscript{-1})

\end{document}

我知道我可能应该使用\textasciicircum{}而不是\^{},但这并不在我的控制范围内,因为我正在使用 Pandoc 将我的 Markdown 源文档转换为 LaTeX,并^翻译为\^{}。FWIW,这可以正常工作,但我想知道我是否可以使其\^{}工作:

two carets (\texttt{\textasciicircum{}}) produce a superscript (e.g.,
\texttt{ClO\textasciicircum{}-1\textasciicircum{}} renders ClO\textsuperscript{-1})

答案1

您可以测试是否#1为空

\documentclass[12pt]{article}
\usepackage{fontspec}
\let\OldCircum\^
\def\^#1{%
  \ifx\relax#1\relax
    \textasciicircum
  \else
    \OldCircum#1%
  \fi
}
\begin{document}

two carets (\texttt{\^{}}) produce a superscript (e.g.,
\texttt{ClO\^{}-1\^{}} renders ClO\textsuperscript{-1})

\^o
\end{document}

答案2

此问题适用于 TU 编码中的所有重音符号。如果不存在预组合字形,则它会转而使用组合字符,但如果基数为空,则它会与前一个字符组合。

我们应该在基础版本中修复这个问题,但您可以添加一个保护,以便检测空基础并用不间断空间替换。

在此处输入图片描述

\documentclass[12pt]{article}
\usepackage{fontspec}

\makeatletter
\def\add@unicode@accent#1#2{%
  \if\relax\detokenize{#2}\relax\string^^a0\else#2\fi\char#1\relax}
\makeatother

\begin{document}

two carets (\texttt{\^{}}) produce a superscript (e.g.,
\texttt{ClO\^{}-1\^{}} renders ClO\textsuperscript{-1})

\end{document}

相关内容