修复问题后单引号似乎无法用 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}