定义新的数学符号并指定它们在 \mathrm 等命令下的行为

定义新的数学符号并指定它们在 \mathrm 等命令下的行为

我想定义一个数学符号\dbar,它通常会显示斜体版本,但当它出现在里面时会直立显示\mathrm

我的天真尝试是这样的

\documentclass{article}
\usepackage{stix2}

\DeclareSymbolFont{stix2-italic}{T1}{stix2}{m}{it}
\DeclareSymbolFont{stix2-upright}{T1}{stix2}{m}{n}
\DeclareMathSymbol{\dbar}{\mathalpha}{stix2-italic}{158}
\DeclareMathSymbol{\updbar}{\mathalpha}{stix2-upright}{158}

\begin{document}
$\dbar \mathrm{\dbar} \updbar$
\end{document}

输出:

在此处输入图片描述

这是预期的,因为stix2LS1对 使用了 encoding \mathrm,其在位置 158 处有,而T1encodingđ在该位置有。

有没有办法定义命令\dbar以便它显示为

\DeclareMathSymbol{\dbar}{\mathalpha}{stix2-italic}{158}

正常但显示为

\DeclareMathSymbol{\updbar}{\mathalpha}{stix2-upright}{158}

当它出现在范围内时\mathrm?我不想修改stix2包或其他字形如何与 交互\mathrm。我还想听听涉及unicode-math包裹。

答案1

有两种不同的\mathrm含义:直立的数学符号(例如 ISO 样式中的常量)和数学模式下的短行文本。

Unicode 和 T1 编码均具有 đ (U+0111) 字符,即 其本身 或\dj,因此您可以设置\mathrm为任一编码并使用\mathrm{\dj}

但是,您更可能希望使用\textfromamsmathamstext或类似命令来定义此命令。一对用于直立和斜体数学符号的命令可能是:

\newcommand\dstrokeup{\textup{\dj}}
\newcommand\dstrokeit{\textit{\dj}}

如果您确实想要一个根据您处于数学模式还是文本模式而改变其形状的命令,那么可以是:

\documentclass{article}
\usepackage{iftex}
\usepackage{amsmath}

\iftutex
  \usepackage{fontspec}
\else
  \usepackage[T1]{fontenc}
\fi

\newcommand\dstroke{%
  \ifmmode{\textit{\dj}}%
  \else{\dj}%
  \fi}

\begin{document}
\( \dstroke \text{ is {\dstroke} in text mode.}\)
\end{document}

相关内容