使用 XeTeX 声明无衬线 Unicode 字符?

使用 XeTeX 声明无衬线 Unicode 字符?

使用以下原始文本:

This is a ligature: fi This is not a ligature: fi.

我想在 LaTeX 中获得相同的输出,但我得到了以下结果。但是您会注意到它在 tex.stackexchange 中运行良好。您可以看到连字符。

在此处输入图片描述

我的目标是声明所有 LaTeX 无法显示的符号并调整字体使它们出现:

\documentclass{article}
\usepackage{newunicodechar}
\usepackage{fontspec}
\usepackage{xeCJK}
\usepackage{FiraSans}
\setCJKmainfont{ipaexm.ttf}
\setmonofont{Fira Code}

\newfontfamily{\fira}{FiraCode-Regular}[Contextuals=Alternate]
\newunicodechar{fi}{{\fira fi fi}}

\begin{document}
\texttt{This is a ligature: fi. This is not a ligature: fi.}
\end{document}

不幸的是我还没有找到任何办法...

答案1

它比这简单一些。

问题是 Fira 代码没有字符。如果您使用的字体有该字符,XeTeX 或 LuaTeX 可以很好地处理它,但\fira您定义的字体对您没有帮助,因为您选择了与之前相同的字体,该字体仍然没有该字符。

默认情况下,TeX 会将此默默地记录在文件中间的某个位置.log。您可以通过命令 让它至少向控制台打印一条警告消息\tracinglostchars=2。这应该是默认设置。

因此,有两种解决方案。你可以使用fl以下方法将字符映射到 Fira Code 的连字符:

\newunicodechar{fi}{fl}

替换,只要 处于活动状态(这是默认设置) fl,它就会为您提供字体的双倍宽度连字。它将从 PDF 中复制并粘贴为 ,而不是。flLigatures=TeXfl

您还可以加载另一个具有该字符作为连字并且其度量标准合理兼容的字体系列:已经加载为的 Fira Sans\sffamily可以正常工作这将在您的输出中为您提供 Unicode字符,这可能是您在逐字源列表中想要的。

\documentclass{article}
\tracinglostchars=2
\usepackage{newunicodechar}
\usepackage{fontspec}
\usepackage{ctex}
\usepackage{FiraSans}
\setCJKmainfont{ipaexm.ttf}
\setmonofont{Fira Code}

\newunicodechar{fi}{{\sffamily fi}}

%% To format the MWE for TeX.SX:
\usepackage[paperwidth=10cm]{geometry}
\pagestyle{empty}

\begin{document}
\texttt{This is a ligature: fi. This is not a ligature: fl fi.}

\texttt{These are ligatures in Fira Code: -> =>}
\end{document}

Fira 代码示例

我擅自更新XeCJKctex

Fira Mono 字体也可以使用。此版本fl即使在 之外使用也能获得等宽字体\texttt

\documentclass{article}
\tracinglostchars=2
\usepackage{newunicodechar}
\usepackage{fontspec}
\usepackage{ctex}
\usepackage{FiraSans}
\setCJKmainfont{ipaexm.ttf}
\setmonofont{Fira Code}

\newfontfamily\firamono{Fira Mono}[Ligatures={Common,Discretionary,TeX}]
\newunicodechar{fi}{{\firamono fi}}

%% To format the MWE for TeX.SX:
\usepackage[paperwidth=10cm]{geometry}
\pagestyle{empty}

\begin{document}
\texttt{This is a ligature: fi. This is not a ligature: fl fi.}

\texttt{These are ligatures in Fira Code: -> =>}
\end{document}

Fira 代码示例

相关内容