Fontspec 导致长下划线

Fontspec 导致长下划线

我的合作者\usepackage[no-math]{fontspec}在我们正在处理的文档中添加了以下内容。结果是\_下划线变得非常长:参见下面的图片。

\documentclass{article}
\usepackage[no-math]{fontspec}
\pagestyle{empty}

\begin{document}
\textrm{metric\_space}
\end{document}

使用字体规范: 在此处输入图片描述

没有字体规范: 在此处输入图片描述

使用 fontspec 后,下划线的长度大约是原来的两倍,而且细得多。我的问题是,如何恢复到原来的宽度?(理想情况下,我希望保留细度——这样看起来比原来的好看得多。)

如果有人问“你为什么要使用\_?”,简短的回答是我需要排版涉及下划线的标识符。请参阅https://i.stack.imgur.com/XynbT.png\textrm以作为上下文中的示例。如果它在该示例的上下文中看起来不错,我很乐意使用除 之外的其他内容。

答案1

您可以重新定义\_绘制一条与拉丁现代使用的字形类似但更短的规则,而拉丁现代使用的字形确实相当长。

\makeatletter
\let\_\relax
\DeclareRobustCommand{\_}{%
  \leavevmode\vbox{%
    \hrule\@width.5em
          \@height-.26ex
          \@depth\dimexpr.26ex+.28pt\relax}}
\makeatother

只是为了在上下文中显示结果,这里有一个例子,它使用重新定义的命令和你得到的字形,它仍然可以使用\textunderscore

\documentclass{article}
\usepackage[no-math]{fontspec}

\makeatletter
\let\_\relax
\DeclareRobustCommand{\_}{%
  \leavevmode\vbox{%
    \hrule\@width.5em
          \@height-.26ex
          \@depth\dimexpr.26ex+.28pt\relax}}
\makeatother
\pagestyle{empty}

\begin{document}
\textrm{metric\_space}\textrm{metric\textunderscore space}

\textrm{metric\textunderscore space}
\end{document}

在此处输入图片描述

答案2

使用较新的 luaotfload(这意味着它仅适用于 lualatex),可以交换字体中的单个字形。这里有一个例子。

注意!combofont 包是实验。此外,该示例仅显示了如何设置常规字体,对于粗体、斜体等,需要类似的定义。因此需要做相当多的工作。但与规则定义相比,它的优点是下划线可以正确复制和粘贴。

\documentclass{article}

\usepackage[]{fontspec}
\usepackage{combofont}
\setupcombofont{lmodernshortscoreA-regular}
 {
 {name:lmroman10-regular:\combodefaultfeat} at #1pt,
 {name:lmmono10-regular} at #1pt
 }
 {{},0x5F}

\DeclareFontFamily{TU}{lmodernshortscoreA-regular}{}
\DeclareFontShape {TU}{lmodernshortscoreA-regular}{m}{n} {<->combo*lmodernshortscoreA-regular}{}

\setupcombofont{lmodernshortscoreB-regular}
 {
 {name:lmroman10-regular:\combodefaultfeat} at #1pt,
 {name:lmroman10-regular} at \fpeval{#1*0.6}pt
 }
 {{},0x5F}

\DeclareFontFamily{TU}{lmodernshortscoreB-regular}{}
\DeclareFontShape {TU}{lmodernshortscoreB-regular}{m}{n} {<->combo*lmodernshortscoreB-regular}{}



\begin{document}
Normalunderscore:

abc\_abc 

\fontfamily{lmodernshortscoreA-regular}\selectfont 
Patched font with underscore from the ttfont:

abc\_abc

\fontfamily{lmodernshortscoreB-regular}\selectfont
Patched font with underscore scaled down:

abc\_abc

\end{document}

在此处输入图片描述

答案3

您可以使用\rule命令来代替\_

代码

\documentclass{article}
\usepackage[no-math]{fontspec}
\pagestyle{empty}
\newcommand*{\oldunderscore}{\kern.061em\rule[0ex]{.7ex}{.4pt}}
\newcommand*{\newunderscore}{\rule[-.319ex]{1.74ex}{.26pt}}
\begin{document}
x\_x\oldunderscore x\newunderscore x
\end{document}

相关内容