我想找到或创建一个类似于除法符号的数学关系符号,但水平线将改为波浪符号 (\sim)。有人能帮忙吗?
答案1
在这里,我用堆栈构建一个通用表单,然后使用scalerel
包的
\ThisStyle{...\SavedStyle...}
并\mathchoice
使其适用于各种数学样式。可选参数是\genericform
上下点垂直移动的距离。它们可以进行调整以适应。
\documentclass{article}
\usepackage{stackengine}
\usepackage{graphicx}
\usepackage{scalerel}
\stackMath
\def\ccdot{\scalebox{1.15}{$\SavedStyle\cdot$}}
\def\genericform#1#2{\stackunder[#1]{\stackon[#2]{\SavedStyle\sim}{\ccdot}}{\ccdot}}
\def\altdiv{\mathbin{\ThisStyle{\mathchoice%
{\genericform{-2.5pt}{-1.5pt}}%
{\genericform{-2.5pt}{-1.5pt}}%
{\genericform{-2.0pt}{-1.1pt}}%
{\genericform{-1.4pt}{-0.8pt}}%
}}}
\begin{document}
$A \altdiv B ~~A \div B$\par
$\scriptstyle A \altdiv B ~~A \div B$\par
$\scriptscriptstyle A \altdiv B ~~A \div B$\par
\end{document}
注意:下面讨论的对 scalerel 包的修改已在scalerel
V1.6(2014 年 3 月 10 日)中实施。 内随 mathstyle 缩放的新长度\ThisStyle{}
可用作\LMex
和\LMpt
。
这个答案让我开始思考如何改进我的scalerel
包。具体来说,\ThisStyle{...\SavedStyle...}
语法允许我访问当前数学样式中的字形(因为它在内部执行\mathchoice
),但我上面的答案仍然需要额外的操作,\mathchoice
因为长度(即使是像“ex”这样的可伸缩长度)不会随当前数学样式缩放。
我需要的是\ThisStyle{}
另外创建一个长度做使用当前数学样式进行缩放。因此我在下面执行此操作,并将其称为\LMex
(局部数学样式“ex”)。它在\displaystyle
和中为 1ex \textsstyle
,在中为 0.7ex \scriptstyle
,在中为 0.5ex \scriptscriptstyle
(在 的参数内\ThisStyle
)。
这样做的话,如果我用 的倍数来表示堆栈的长度移位,那么我就可以避免 es 的低效嵌套\mathchoice
,并且完全避免使用 my 。\genericform
\LMex
\documentclass{article}
\usepackage{stackengine}
\usepackage{graphicx}
\usepackage{scalerel}
\stackMath
%%%%% scalerel MODIFICATION
\makeatletter
\newlength\LMex
\renewcommand\ThisStyle[1]{%
\ifmmode%
\def\@mmode{T}\mathchoice%
{\edef\m@switch{D}\LMex=1ex\relax#1}%
{\edef\m@switch{T}\LMex=1ex\relax#1}%
{\edef\m@switch{S}\LMex=.7ex\relax#1}%
{\edef\m@switch{s}\LMex=.5ex\relax#1}%
\else%
\def\@mmode{F}%
\edef\m@switch{T}#1%
\fi%
}
\makeatother
%%%%% END scalerel MODIFICATION
\def\ccdot{\scalebox{1.15}{$\SavedStyle\cdot$}}
\def\altdiv{\mathbin{\ThisStyle{%
\stackunder[-.6\LMex]{\stackon[-.45\LMex]{\SavedStyle\sim}{\ccdot}}{\ccdot}}}}
\begin{document}
$A \altdiv B ~~A \div B$\par
$\scriptstyle A \altdiv B ~~A \div B$\par
$\scriptscriptstyle A \altdiv B ~~A \div B$\par
\end{document}
答案2
以下示例处理以下问题:
- 该符号会根据当前的数学样式自动改变其大小。
- 正确的边界框。
- 这些点以数学轴为中心。
它做出以下假设:
\sim
以数学轴为中心。- 该点位于基线正上方。
它跟随\div
:
- 点稍微大一些,示例使用的比例因子
1.15
。 - 下方的点略低于基线,本示例将点的高度设为基线以下的四分之一,并将上方的点向顶部移动相同的量。
\documentclass{article}
\usepackage{graphicx}
\makeatletter
\newcommand*{\mydiv}{%
\mathbin{%
\mathpalette\@mydiv{}%
}%
}
% #1: math style
% #2: unused
\newcommand*{\@mydiv}[2]{%
\sbox0{$#1\vcenter{}$}%
\sbox2{\scalebox{1.15}{$#1.\m@th$}}%
\sbox0{%
\raisebox{-.25\ht2}{\rlap{\copy2}}%
\raisebox{\dimexpr2\ht0-\ht2+.25\ht2\relax}{\copy2}%
}%
\sbox2{$#1\sim$}%
\rlap{\copy2}%
\hbox to \wd2{\hfil\copy0\hfil}%
}
\makeatother
\begin{document}
% Comparison
\[
A \div B \mydiv C
\]
% Automatic adaptations to math style
\[
A \mydiv B^{A \mydiv B^{A \mydiv B}}
\]
% Show bounding box
\[
\setlength{\fboxsep}{0pt}
\setlength{\fboxrule}{0.1pt}
A \mathbin{\fbox{$\mydiv$}} B
\]
\end{document}
答案3
定义的方式很丑陋,但是它有效。
\documentclass{article}
\usepackage{graphicx,amsmath,amssymb}
\newcommand{\mydiv}{%
\mathbin{\text{%
\mathsurround=0pt
\ooalign{%
\hidewidth\vphantom{$\div$}\raisebox{.95ex}{\scalebox{1.2}{.}}\hidewidth\cr
$\sim$\cr
\hidewidth\vphantom{$\div$}\raisebox{-.05ex}{\scalebox{1.2}{.}}\hidewidth\cr
}%
}}%
}
\begin{document}
$A\mydiv B$ $A\div B$
\end{document}
答案4
在我看来,这很像 unicode U+223B(同源);还有 U+2A6B(带有上升点的波浪符号运算符)。这些将在stix
或xits
字体中。
Speravir 确认了 U+2238 的身份,并在评论中指出它包含在其他 opentype 和 truetype 字体中(请参阅下文了解他的编辑)。
它是不是可以在综合符号列表中找到,或者通过 找到detexify
。
通常,为了提供一两个缺失的符号而替换整个字体是不可取的。这个问题解决了这种情况: 从不同字体导入单个符号。
(应 Barbara 的要求,Speravir 进行了编辑,参见评论)
无需详尽说明,我可以确认这些 Open 或 Truetype 字体包含符号“Homothetic”:
两者都已被 Barbara 命名并包含在 TeX 发行版中。对于以下内容,我没有查看它们是否可用作 TeX 包(实际上我知道其中一些是可以的)。