喂食
\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(对于我们的目的而言可容忍的形状):
B. 仅使用 NewTX(良好形状):
C. 仅使用超链接(对于我们的目的而言可容忍的形状):
为什么将 NewTX 和 hyperref 放在一起会如此严重地扭曲符号?罪魁祸首是谁?
如果我们使用(出于这个最小示例中未提及的原因)[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 中带圆圈数字的边界框?)。假设我们不仅需要文本模式 ⓪ 和 ①,还需要数学模式 ⓪ 和 ①。还有什么比 更好更直接的吗
\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}