在文字模式下存取 Postscript 字體的減號

在文字模式下存取 Postscript 字體的減號

Postscript 字體(例如libertine(來自libertine-legacy包裝)或 mathpazo)是否有可以在文字模式下存取的減號?我想做的是用減號替換正常的破折號,如下圖所示回答來自大衛·卡萊爾。

他的解決方案在使用開放式字體時效果非常好,因為大多數字體都有一個可以輕鬆存取的減號字元:

\def\yyy{%
  \bgroup\uccode`\~\expandafter`\string-%
  \uppercase{\egroup\edef~{\noexpand\text{\char"2212\relax}}}%
  \mathcode\expandafter`\string-"8000 }

然而,我嘗試用 Libertine 或 Pagella 做類似的事情pdfLaTeX是徒勞的。使用像連字號 ( ) 這樣的符號\textendash效果很好:

\def\yyy{%
  \bgroup\uccode`\~\expandafter`\string-%
  \uppercase{\egroup\edef~{\noexpand\text{\llap{\textendash}\relax}}}%
  \mathcode\expandafter`\string-"8000 }

但並不完全是我想要的。如何存取該字體的減號?或者,如果不可能,是否可以調整連字符的大小以“偽造”減號?

編輯:egreg 提供了以下解決方案。嵌入到我的框架中的程式碼是:

\def\yyy{% Thanks to egreg
  \begingroup\uccode`~=`-
  \uppercase{\endgroup\def~}{\mathbin{\text{\llap{\textminus}}}}
  \mathcode`-="8000 }

答案1

破折號位於"15T1 編碼中的位置:

\begingroup\uccode`~=`-
  \uppercase{\endgroup\def~}{\mathbin{\text{\char"15 }}}
\AtBeginDocument{\mathcode`-="8000 }

或者,\textminus在 TS1 編碼中:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{libertine}
\usepackage{textcomp}
\usepackage{amsmath}
\begingroup\uccode`~=`-
  \uppercase{\endgroup\def~}{\mathbin{\text{\textminus}}}
\AtBeginDocument{\mathcode`-="8000 }

\begin{document}
$-$
\end{document}

相關內容