技术细节

技术细节

包装libertine文档说

建议将字体编码设置为 T1 或 LY1,但也支持默认的 OT1 编码。

\documentclass{article}
% \usepackage[T1]{fontenc}
\usepackage[lining, tabular]{libertine}
\usepackage[libertine, cmintegrals]{newtxmath}

\begin{document}
    \Huge The \{ stuffing \} 123 $f(x) = \int \sqrt{x}\,dx$
\end{document}

(使用pdflatex。)

\usepackage[T1]{fontenc}

没有 T1:

LaTeX 字体警告:字体形状“OMS/LinuxLibertineT-TLF/m/n”未定义
LaTeX 字体警告:某些字体形状不可用,请用默认字体形状替代。

 
这 ”“连字符是可取的,但如果没有 T1,{}字符就是错误的。我该怎么办?

(如果使用 XeLaTeX 是唯一的解决方案,那么我需要的最简单的一组包和设置命令是什么?)

答案1

编码OT1中没有大括号的位置,因为通常分配的位置是不同的符号(分别是短划线和右双引号)。相反,大括号采用T1编码字体。

跳到结尾查看简短摘要;否则,请继续阅读。

技术细节

当编码为 OT1 时,\{选择\}不同的字体。让我们看看;我假设已xpatch加载\xshowcmd

\show\{

> \{=macro:
->\x@protect \{\protect \{  .

\xshowcmd\{

> \{ =\long macro:
->\ifmmode \lbrace \else \textbraceleft \fi .

由于我们处于文本模式,\textbraceleft因此展开:

\show\textbraceleft

> \textbraceleft=macro:
->\OMS-cmd \textbraceleft \OMS\textbraceleft .

这个比较难:必须知道要展示什么:这里是

\expandafter\show\csname OMS\string\textbraceleft\endcsname

> \OMS\textbraceleft=\char"66.

然而,LaTeX 首先会尝试查看是否\?\textbraceleft已定义,结果是:

\expandafter\show\csname ?\string\textbraceleft\endcsname

> \?\textbraceleft=\long macro:
->\UseTextSymbol {OMS}\textbraceleft .

好的。我们开始吧!LaTeX 以组的形式执行

{\fontencoding{OMS}\selectfont\textbraceleft}

这将打印0x66所选字体的字符。但字体替换在角落:确实,当前系列是,LinuxLibertineT-TLF并且有一条消息

LaTeX Font Warning: Font shape `OMS/LinuxLibertineT-TLF/m/n' undefined
(Font)              using `OMS/ntxsy/m/n' instead
(Font)              for symbol `textbraceleft' on input line 7.

因为没有与第一行对应的外部字体,所以 LaTeX 使用默认字体进行编码OMS,这恰好是ntxsy(NewTXMath,因为你的包)。使用默认的 Computer Modern 字体时,你不会收到警告,因为 LaTeX知道一种字体,与(查看文件以了解如何完成)OMS/cmr/m/n完全相同。OMS/cmsy/m/nomscmr.fd

当基本编码为 时T1,你会得到与 不同的答案\show\textbraceleft,即

> \textbraceleft=macro:
->\T1-cmd \textbraceleft \T1\textbraceleft .

现在我们可以做

\expandafter\show\csname T1\string\textbraceleft\endcsname

要得到

> \T1\textbraceleft=\char"7B.

0x7B因此 LaTeX 使用当前字体打印插槽中的字符。

以上是什么意思?

区别在于 NewTXMath 中的括号与 Linux Libertine 中的括号略有不同。前者使用 OT1 编码,后者使用T1

答案2

你应该使用XeLaTeXLuaLaTeX

\documentclass{article}
\usepackage{unicode-math}
\setmathfont{texgyrepagellamath-regular.otf}
\usepackage[lining,tabular]{libertine}

\begin{document}
    \Huge The \{ stuffing \} 123 $f(x) = \int \sqrt{x}\,dx$
\end{document}

在此处输入图片描述

相关内容