latex/pdflatex、NewTX 和 hyperref:在 ⓪ 和 ① 中,圆圈与数字相切

latex/pdflatex、NewTX 和 hyperref:在 ⓪ 和 ① 中,圆圈与数字相切

喂食

\documentclass{article}
\pagestyle{empty}
\usepackage{newtxtext}
\usepackage{hyperref}%%% it's bizarre that adding a package for referencing (and not using this package) changes the shapes of unrelated symbols
\begin{document}
\textcircled{0}\textcircled{1}
\end{document}

自 2022-09-26 起,在 TeX Live 中将 [pdf]latex 转换为(Debian 中的 TeX Live 版本 2021.20211217-1 中没有),会产生圆圈与数字相切的圆圈数字:

输出

这些形状对于我们来说是不可接受的。

请注意,删除 NewTX 或 hyperref 或两者可产生更好的圆圈数字,其中圆圈不会触及数字:

A. 标准,即没有 NewTX 和 hyperref(对于我们的目的而言可容忍的形状):

标准 LaTeX 输出

B. 仅使用 NewTX(良好形状):

NewTX 输出

C. 仅使用超链接(对于我们的目的而言可容忍的形状):

超参考输出

  1. 为什么将 NewTX 和 hyperref 放在一起会如此严重地扭曲符号?罪魁祸首是谁?

  2. 如果我们使用(出于这个最小示例中未提及的原因)[pdf]latex、NewTX 和 hyperref,如何获得图形上更好的符号 ⓪ 和 ①(其中圆圈不接触数字,例如上面项目 B 中的符号)?当然,我们可以用 picture、pstricks 或 tikz 在数字周围画一个圆圈,或者安装古老的https://ctan.org/pkg/magic,使用 pifont,并发出\textsmaller[2.5]{\Pisymbol{magic}{48}}} \textsmaller[2.5]{\Pisymbol{magic}{49}},……。但是,也许,可能有一个简单的 LaTeX、NewTX 或 hyperref 修复,或者可以以某种方式使用 hyperref 之后的 NewTX 定义\textcircled{0}\textcircled{1}当然,应该以某种方式修复边界框;参见。如何修复标准 LaTeX、hyperref、NewTX 和 magic 中带圆圈数字的边界框?)。

  3. 假设我们不仅需要文本模式 ⓪ 和 ①,还需要数学模式 ⓪ 和 ①。还有什么比 更好更直接的吗\text{\textcircled{0}}\text{\textcircled{1}}

这篇文章不是关于 UTF-8 引擎的(使用 {lua|xe}latex,我们从 OTF 字体中获取符号 ⓪ 和 ①),也不是关于除了 0 和 1 之外的任何其他内容的圈出。

答案1

回答第一个问题:

默认情况下,\textcircled这是一个依赖于编码的命令。它有一个 TS1 定义,对于 TS1 编码没有正确支持的字体,OMS 会提供后备功能。

hyperref 不仅仅用于引用。hyperref 还处理书签,因此必须能够翻译一些内容,就像\textcircled在那里可见的表示一样。为此,它还\textcircled在 PU 编码中给出了编码特定的定义。

的默认定义\textcircled对 newtx 不起作用,因此包尝试更改它,但它使用\renewcommand,并且由于 hyperref 再次覆盖定义,因此效果不佳。在 hyperref 之后加载 newtx 可以修复此问题,但会破坏书签中的命令。最好的方法可能是newtx重新定义 fallback 定义:

\documentclass{article}
\pagestyle{empty}

\usepackage{newtxtext}

\makeatletter
\DeclareTextCommand{\textcircled}{OMS}[1]{\hmode@bgroup\ooalign{%
    \hfil \raise .3ex\hbox{{%
    \normalfont
    {\scalefont{.6}\tlfstyle#1}}}% end hbox
    \hfil \crcr {\usefont{TS1}{ntxtlf}{m}{n}\char"4F}}%\textbigcircle}%
    \egroup}
\makeatother

\usepackage{hyperref}

\begin{document}

\section{\textcircled{0}\textcircled{1}}

\textcircled{0}\textcircled{1}

\end{document}

在此处输入图片描述

相关内容