这是我上一个问题的后续如何使用 unicode-math 获得直立的 \hbar?我正在尝试制作一个d
带有横线的 ,就像物理学中用来表示不精确微分的一样(另见如何在 xelatex 中输入不精确微分的符号?和如何在 LaTeX 或 LyX 中调用 unicode 字符?和d 顶部有一条小线)。我看到字形上的条d
似乎相对于字母发生了移动,但我没有看到字符有这种行为h
。这种行为是真实的吗?如果是,是什么原因造成的?它会因不同的字体而异吗?可以克服吗?
对值进行实验并\mkern
没有使转变消失。
这是我的 MWE:
% !TEX program = lualatexmk
% !TEX encoding = UTF-8 Unicode
\documentclass{article}
\usepackage{unicode-math}
\makeatletter
\AtBeginDocument{%
\DeclareRobustCommand{\hbar}{{\mathpalette\hbar@\relax\symup{h}}}%
}
\newcommand*{\hbar@}[2]{%
\makebox[0pt][l]{\raisebox{-0.07\height}{\(\m@th#1\mkern-2mu\mathchar"AF\)}}%
}
\makeatother
% Let's try a \dbar glyph for inexact differentials.
\makeatletter
\AtBeginDocument{%
\DeclareRobustCommand{\dbar}{{\mathpalette\dbar@{\relax}{\symsfup{d}}}}%
}
\newcommand*{\dbar@}[2]{%
\makebox[0pt][l]{\raisebox{-0.09\height}{\(\m@th#1\mkern+3mu\mathchar"AF\)}}%
}
\makeatother
\begin{document}
\( \hbar \scriptstyle\hbar \scriptscriptstyle\hbar \)
\( \dbar \scriptstyle\dbar \scriptscriptstyle\dbar \)
\end{document}
以下是 MWE 输出:
更新:经过多次试验,下面的方法似乎有效,但我无法完全解释原因。如果我更改[c]
为,[r]
我会注意到,无论我提供什么,该栏都不会移动\mkern
。
\makeatletter
\AtBeginDocument{%
\DeclareRobustCommand{\dbar}{{\symsfup{d}\mathpalette\dbar@\relax\relax}}%
}
\newcommand*{\dbar@}[2]{%
\makebox[0pt][c]{\raisebox{-0.07\height}{\(\m@th#1\mkern-6mu\mathchar"AF\)}}%
}
\makeatother
答案1
如果您使用的是unicode-math
,最好的选择是从支持 的文本字体插入 đ (U+0111,带笔划的拉丁小写字母 d)。如果您的主字体不支持,您可以使用\setmathrm
或\setmathsf
将您的\mathrm
或\mathsf
字母表更改为支持 的字母表,或者定义一个支持 的新数学字母表\setmathfontface
。
\documentclass{article}
\tracinglostchars=3
\usepackage{newcomputermodern} % Or your font package of choice.
\newcommand\dbar{\mathsf{đ}}
\newcommand\vardbar{\text{\sffamily\ulcshape\upshape đ}}
\newcommand\mitdbar{\text{\sffamily\ulcshape\slshape đ}}
\begin{document}
\[ \dbar \vardbar \mitdbar
\]
\end{document}
我使用的命令\text
有点复杂,因为它们保持权重不变,但设置其他每个轴,但你可能可以摆脱\textnormal{đ}
如果您使用的是旧版 TeX 进行编译,那么从技术上讲,您也可以使用相同的方法,因为 8 位 T3 编码支持此字符。您可以选择字体系列(Computer Modern Roman、Computer Modern Sans Serif、Times、Helvetica、Junicode 或 Linguistics Pro),其中一些支持倾斜形状。
\documentclass{article}
\tracinglostchars=3
\usepackage[T3,T1]{fontenc}
\usepackage[utf8]{inputenc} % The default since 2018
\usepackage{amsmath}
\DeclareTextSymbol{\textdbar}{T3}{"A1}
\DeclareTextSymbolDefault{\textdbar}{T3}
\newcommand\dbar{\textnormal{\textdbar}}
\newcommand\vardbar{\textnormal{\fontfamily{cmss}\selectfont\textdbar}}
\newcommand\mitdbar{\textnormal{\fontfamily{cmss}\slshape\selectfont\textdbar}}
\begin{document}
\[ \dbar\vardbar\mitdbar
\]
\end{document}
答案2
这是一种使用堆栈的方法。
\documentclass{article}
\usepackage{unicode-math}
\usepackage{scalerel,stackengine}
\newcommand\dbar{\ThisStyle{\ensurestackMath{%
\stackengine{-.7\LMpt}{\SavedStyle\mathsf{d}}{\SavedStyle\bar{}%
\mkern2.25mu}{O}{r}{F}{F}{L}}}}
\begin{document}
\( \dbar \scriptstyle\dbar \scriptscriptstyle\dbar \)
\end{document}
\mathsf
例如,将 更改\mathit
为 会导致
可以通过调整 来更改栏的水平位置2.25mu
。通过调整 来更改垂直位置-.7\LMpt
。