答案1
\pounds
具有复杂的内部定义以应对现代计算机的原始 OT1 编码,但如果使用 Unicode 字体,它在 xetex 或 luatex 中实际上没有任何意义。我们可能应该调整 fontspec 以便默认情况下工作,但简单地定义\pounds
为 £ 就足够安全了:
\documentclass{ctexart}
\def\pounds{£}
\begin{document}
\verb|$\pounds$->|$\pounds$,\medspace \verb|\pounds->|\pounds
\end{document}
要获取遵循数学字母命令的版本,您可以执行以下操作:
\documentclass{ctexart}
\def\pounds{£}
\AtBeginDocument{%
\sbox0{$\mathit{x\xdef\mathitfam{\the\fam}}$}% set up mathit
\Umathcode `\£ 7 \mathitfam `\£
}
\showoutput
\begin{document}
\verb|$\pounds$->|$\pounds$,\medspace \verb|\pounds->|\pounds
$a£\pounds + \mathsf{b£\pounds} + \mathbf{c£\pounds} + \mathit{d£\pounds}$
\end{document}
困难在于您需要从 mathit 字体中提取默认字体,因为普通数学斜体没有正确的字符。
答案2
如果使用 运行,代码将产生预期的输出pdflatex
。
使用 XeLaTeX 或 LuaLaTeX 时,ctexart
定义\textfont5
(或分配给 的任何系列\mathit
)在 TU 编码中为拉丁现代斜体,而在 OT1 编码中它仍为计算机现代斜体article
。
由于在数学模式下\pounds
被定义为\mathsterling
\mathsterling
\mathit{\mathchar"7024}
您将获得一个带有 的美元符号ctexart
。
您可以使用以下适用于所有引擎的解决方法来解决该问题。
\documentclass{ctexart}
\usepackage{iftex}
\iftutex
\renewcommand{\mathsterling}{\mathit{\Umathchar"7 "0 "A3}}
\fi
\begin{document}
\verb|$\pounds$->|$\pounds$,\medspace \verb|\pounds->|\pounds
\end{document}
\mathsterling
但是,如果您始终使用 (Xe|Lua)LaTeX 来尊重当前数学系列(并默认生成直立的英镑符号),那么修改可能是有意义的:
\documentclass{ctexart}
\usepackage{iftex}
\iftutex
\Umathchardef\mathsterling="7 "0 "A3
\fi
\begin{document}
\verb|$\pounds$->|$\pounds$,\medspace \verb|\pounds->|\pounds
$\pounds\mathit{\pounds}\mathbf{\pounds}\mathsf{\pounds}$
\end{document}
如果你想要默认使用斜体,你可以这样做
\documentclass{ctexart}
\usepackage{iftex}
\iftutex
\RenewDocumentCommand{\mathsterling}{}{%
\ifnum\fam<0
\mathit{\mathsterlingchar}
\else
\mathsterlingchar
\fi
}
\Umathchardef\mathsterlingchar="7 "0 "A3
\fi
\begin{document}
\verb|$\pounds$->|$\pounds$,\medspace \verb|\pounds->|\pounds
$\pounds\mathit{\pounds}\mathbf{\pounds}\mathsf{\pounds}$
\end{document}