在过去的几十年里,许多字体中的减号-
都缩减为连字符,这在编程语言中看起来很奇怪。我怎样才能恢复与加号宽度完全相同的原始大小+
?
我在用
\usepackage[scaled]{beramono}
\usepackage[T1]{fontenc}
\usepackage{microtype}
举个例子,考虑一下:
\begin{verbatim}
]+[
]-[
\end{verbatim}
编辑:感谢所有回答,但我仍然有一些问题,主要是:
从生成的 pdf 复制文本时,减号(或 minī)没有字符代码,-
而是另一个(x2212)。
答案1
这可能是 Bera Mono 的一个糟糕的设计选择,肯定不是在一般的等宽字体中发现的。
该字体在 TS1 编码中有一个较长的连字符,可以作为短连字符获得\textminus
,并且可以通过黑客手段verbatim
生成。\textminus
\documentclass{article}
\usepackage[scaled]{beramono}
\usepackage[T1]{fontenc}
\usepackage{microtype}
\makeatletter
\newcommand{\make@hyphen@textminus}{%
\begingroup\lccode`~=`-\lowercase{\endgroup\def~}{{\usefont{TS1}{fvm}{m}{n}\textminus}}%
}
\AddToHook{cmd/verbatim@nolig@list/after}{\make@hyphen@textminus}
\makeatother
\begin{document}
\noindent
\verb|-+|
\begin{verbatim}
]+[
]-[
\end{verbatim}
\end{document}
答案2
第一条消息:当您使用典型配置的键盘上的符号时-
,它表示连字符,而不是减号。连字符比减号短得多。当连字符处于数学模式时,传统 TeX 会打印减号,即$-$
。
设计用于模拟打字机的字体应该具有等于减号的连字符,因为它在旧打字机中没有什么区别,并且因为它用于编程代码,其中没有连字符(只有减号)。
您使用的 Bera Mono 字体不符合此功能:它同时包含连字符和减号。但您使用的 T1 编码中只映射了连字符。更多实施细节如下。
我知道 Bera Mono 字体只适用于旧 PostScript*.pfb
格式(没有 Unicode 字体)。它在 TeXlive 中安装为fvmr8a.pfb
。此字体在插槽 173(0xad)处包含真正的减号字符。不幸的是,vf
实现编码(T1 编码)的文件8t
不支持此字符。您可以使用raw
tfm fvwr8r
,其中减号在插槽 12 处编码:
\font\f=fvmr8r
\def\ttfont{\f\lccode`~=`- \lowercase{\def~}{\char12 }\catcode`-=13 }
test fvmr8r: {\ttfont text in +- type-writer }
\bye
或者您可以直接使用 PostScript 字体fvmr8a
,其中减号在插槽 173 处编码:
\pdfmapline{=fvmr8a BeraSansMono-Roman <fvmr8a.pfb}
\font\f=fvmr8a
\def\ttfont{\f\lccode`~=`- \lowercase{\def~}{\char173 }\catcode`-=13 }
test fvmr8a: {\ttfont text in +- type-writer }
\bye
如果字体实现为 Unicode 字体,生活就会变得更轻松。
正如 egreg 提到的,在名为 TS1 的 8 位编码丛林中还有另一种编码(或8c
在 tfm 文件名中)。减号在此编码中有插槽 61:)
\font\f=fvmr8t
\font\fc=fvmr8c
\def\ttfont{\f\lccode`~=`- \lowercase{\def~}{{\fc\char61}}\catcode`-=13 }
test fvmr8c: {\ttfont text in +- type-writer }
\bye
最后一种解决方案必须反复将当前字体更改为另一种字体才能获得减号,因为 TS1 编码不包含普通字母和普通 ASCII 字符。
答案3
在数学模式下,连字符-
默认转换为减号。也就是说,$-$
将−
在 PDF 中。
在普通文本模式下,您可以−
直接使用 xelatex 或 lualatex 使用 (U+2212),也可以 \textminus
使用任何编译器来获得真正的减号。
在逐字模式下,U+2212 默认等于连字符,但许多字体允许使用不同的字符,因此“唯一”的是选择一种好的字体。
\documentclass{article}
\parindent0pt\parskip0pt
\usepackage{fontspec}
\setmonofont{DejaVu Sans Mono}
\begin{document}\obeylines
+ - is a hyphen
+ − is U+2212
$+$ $-$ is a minus sign
+ \textminus{} is \verb|\texminus|
\begin{verbatim}
+ - is a hyphen
+ − is U+2212
\end{verbatim}
\end{document}