以正确的大小排版 \gls 的下标和上标

以正确的大小排版 \gls 的下标和上标

继续下标中的 \gls 大小太正常,运行一个循环,latex然后makeglossaries直到稳定

\documentclass{article}
\usepackage{amssymb}
\usepackage[hidelinks]{hyperref}
\usepackage{glossaries-extra}%%% glossaries-extra internally loads glossaries, and glossaries according to its documentation should be loaded after hyperref.
\makeglossaries
\newglossaryentry{nonnegativeNat}{name={$\mathbb{N}$}, text={\mathbb{N}}, description={The set of nonnegative integers.}}
\newcommand{\nonnegativeNat}{\gls{nonnegativeNat}}
\begin{document}
\[\nonnegativeNat\]
\clearpage
\[\mathbb{N}^{\nonnegativeNat}\]
\clearpage
\[\mathbb{N}^{\mathbb{N}^{\nonnegativeNat}}\]
\clearpage
\printglossaries
\end{document}

产量

DVI 输出的第二页DVI 输出第三页

在 DVI 文件的第二页和第三页上,运行后dvips

PS 输出的第二页PS 输出的第三页

在 Postscript 文件的第二页和第三页上。

显然,上标和上上标的正常大小是不好的,所以我们遵循http://tex.stackexchange.com/a/399707并使解决方案适应主要引擎:

\documentclass{article}
\usepackage{amssymb}
\usepackage[hidelinks]{hyperref}
\usepackage{glossaries-extra}%%% glossaries-extra internally loads glossaries, and glossaries according to its documentation should be loaded after hyperref.
\makeglossaries
\newglossaryentry{nonnegativeNat}{name={$\mathbb{N}$}, text={\mathbb{N}}, description={The set of nonnegative integers.}}
\ifTUTeX%%% xelatex and lualatex produce PDF only
  \newcommand{\nonnegativeNat}{\gls{nonnegativeNat}}
\else
  \ifpdf%%% for pdflatex
    \newcommand{\nonnegativeNat}{\gls{nonnegativeNat}}
  \else%%% for latex
    \newcommand{\nonnegativeNat}{%
      \mathchoice%
      {\gls{nonnegativeNat}}%
      {\gls{nonnegativeNat}}%
      {\text{$\gls{nonnegativeNat}$}}%%% or {\gls*{nonnegativeNat}} if we can tolerate the absense of the links but still want the page number
      {\text{$\gls{nonnegativeNat}$}}%%% or {\gls*{nonnegativeNat}} if we can tolerate the absense of the links but still want the page number
    }
  \fi
\fi
\begin{document}
\[\nonnegativeNat\]
\clearpage
\[\mathbb{N}^{\nonnegativeNat}\]
\clearpage
\[\mathbb{N}^{\mathbb{N}^{\nonnegativeNat}}\]
\clearpage
\printglossaries
\end{document}

结果似乎不错(除了蓝色和下划线,我们不愿意容忍它们出现在 DVI 文件中,因为我们仅使用 DVI 输出进行调试):

DVI 输出的第二页DVI 输出第三页

在 DVI 文件的第二页和第三页上,运行后dvips

PS 文件的第二页PS 文件的第三页

在 Postscript 文件的第二页和第三页上。

本质上,通过嵌套条件语句的解决方案对于用户来说似乎有点麻烦,而对于包来说却相当简单。是否可以简化此解决方案以获得相同的效果?如果可以,如何简化?为什么尚未在 hyperref 与 glossaries-extra 的组合中实现此解决方案(或等效解决方案)? 是否存在潜在问题\text{$…$}? 是否存在潜在问题(除了我们会丢失和\gls*{…}中的超链接,即下标、上标、双下标和双上标中的超链接)?是否已经有一个命令可以自动执行我们的大条件语句?我们不想重新发明轮子。\scriptstyle\scriptscriptstyle

答案1

我个人认为上标中的词汇表条目和链接都非常奇怪,为了找到真正的解决方案,我会寻找禁用选项\gls和那里的链接。

除此之外:在 dvips 路由上,hyperref 必须计算链接区域的大小,并且至少在编写代码时需要将内容放在一个框中。这会冻结大小,并且随着框的重复使用,排版结果在上标中太大。您可以尝试直接在数学模式下使用内容,但请注意,链接区域的大小是错误的,并且内容会被排版两次,这可能会产生副作用:

\documentclass{article}
\usepackage{amssymb}
\usepackage{hyperref}

\usepackage{etoolbox}
\makeatletter
\ifcsname pdf@rect\endcsname 
 \patchcmd\pdf@rect{\expandafter\box\pdf@box}{\ifmmode #1\else \expandafter\box\pdf@box \fi}{}{\fail}
\fi 
\makeatother

\usepackage{glossaries-extra}%%%
\makeglossaries
\newglossaryentry{nonnegativeNat}{name={$\mathbb{N}$}, text={\mathbb{N}}, description={The set of nonnegative integers.}}
\newcommand{\nonnegativeNat}{\gls{nonnegativeNat}}
\begin{document}

{\[\nonnegativeNat\]}
%\clearpage
\[\mathbb{N}^{\nonnegativeNat}\]
%\clearpage
\[\mathbb{N}^{\mathbb{N}^{\nonnegativeNat}}\]
%\clearpage
\printglossaries
\end{document}

在此处输入图片描述

相关内容