数学模式中采用内衬数字,但 URL 中采用旧式数字

数学模式中采用内衬数字,但 URL 中采用旧式数字

基本上,我想实现与例如这个问题:将数学模式数字更改为“旧式”。但不是一般的数学,只适用于在数学模式下设置的 URL(在手册中,我读到这是由于“上下文敏感的换行”而完成的)。

因此,一个简单的 MWE:

%!TEX program=lualatex
\documentclass{article}
\usepackage[no-math]{fontspec}
\usepackage{unicode-math}
\usepackage{url}
\urlstyle{same}

\setmainfont[Numbers={OldStyle}]{Libertinus Serif}
\setmathfont[]{Libertinus Math}

\begin{document}

math: $123$

text: 123

url: \url{123}

\end{document}

在此处输入图片描述

数学数字当然应该保持原样,但我希望 URL 中的数字样式与普通文本中的相同。在 MWE 中,我使用了预定义的 url-style \urlstyle{same}。对于自定义样式,我将使用宏\renewcommand*{\UrlFont}{\mathversion{osf}\normalfont}并使用 定义合适的数学版本。但是,我不知道如何使用 unicode-math “激活”旧式数字。当添加与主字体相同的\setmathfont[version=osf,....enable oldstyle numbers....]{Libertinus Math}选项时,我没有观察到任何效果。Numbers={OldStyle}

编辑

我尝试用\mathversions 并仅替换 a range,但这不起作用。但\mathversions 单独起作用 – 至少对于放在$符号内的方程式。对于 URL,它以某种方式被忽略。

更新 MWE

%!TEX program=lualatex
\documentclass{article}
\usepackage[no-math]{fontspec}
\usepackage{unicode-math}
\usepackage{url}
\renewcommand*{\UrlFont}{\mathversion{osf}}

\setmainfont[Numbers={OldStyle}]{Libertinus Serif}
\setmathfont{Libertinus Math}[version=default]
\setmathfont{Libertinus Serif}[version=osf,Numbers=OldStyle]

\begin{document}

\mathversion{osf}    
math (osf): $123$

\mathversion{default}    
math (default): $123$

text: 123

url: \url{123}

\end{document}

在此处输入图片描述

答案1

url 使用数学模式,但字体是文本字体。我在下面使用 tex gyre heros 来使差异更加明显。

问题是 lualatex 中的数学模式需要使用基本渲染器的字体,但文本字体通常需要节点或 harf 模式。您可以尝试强制使用 url 的基本模式,但这可能意味着您失去了仅适用于节点模式的文本选项。真正的解决方案需要重新实现不使用数学模式的 url。

\documentclass{article}
\usepackage[no-math]{fontspec}
\usepackage{unicode-math}
\usepackage{url}
\def\UrlFont{\addfontfeature{Renderer=Basic}}

\setmainfont[Numbers={OldStyle}]{TeX Gyre Heros}
\setmathfont[]{Libertinus Math}

\begin{document}

math: $123$

text: 123

url: \url{123}

\end{document}

在此处输入图片描述

相关内容