基本上,我想实现与例如这个问题:将数学模式数字更改为“旧式”。但不是一般的数学,只适用于在数学模式下设置的 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}
编辑
我尝试用\mathversion
s 并仅替换 a range
,但这不起作用。但\mathversion
s 单独起作用 – 至少对于放在$
符号内的方程式。对于 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}