![将斜线(不)放置在(数学)字形的中心?](https://linux22.com/image/304791/%E5%B0%86%E6%96%9C%E7%BA%BF%EF%BC%88%E4%B8%8D%EF%BC%89%E6%94%BE%E7%BD%AE%E5%9C%A8%EF%BC%88%E6%95%B0%E5%AD%A6%EF%BC%89%E5%AD%97%E5%BD%A2%E7%9A%84%E4%B8%AD%E5%BF%83%EF%BC%9F.png)
我的目标是构造一个关系符号,它在图形上等同于标准无穷符号(编码为\infty
)在其中间正好相交。然而我无法克服一些事情。更准确地说:
我想将斜线符号精确移动到无穷符号的中间位置。上面的定义如下:
\documentclass{standalone}
\begin{document}
\newlength{\length}
\settowidth{\length}{$\infty$}
\newcommand\ninfty{\mathrel{\infty\hspace{-0.5\length/}}}
$\ninfty$ is not what I am aiming at.
\end{document}
因此,正如您所看到的,我的想法是将长度定义为无穷大符号的长度,然后将斜线置于无穷大符号的一半。如上所示,它位于四分之一处(向后)。
您能解释一下我哪里做错了吗?我如何才能准确确定给定数学字形的中间点(就宽度而言)?或者一般的字形?
答案1
不要重新发明轮子。;-)
\documentclass{article}
\usepackage{centernot}
\begin{document}
$\centernot{\infty}$
\end{document}
一些手动调整可能会有帮助:
\documentclass{article}
\usepackage{centernot}
\begin{document}
$\centernot{\mkern-0.35mu\infty}\mkern-0.35mu$
\end{document}
寻找精确的几何中心并不容易确定,因为它取决于符号的侧边距。下面是一张显示它们的图片
另外斜线有侧轴承,所以这是一个平衡它们的问题。
当然,当你对定位满意时,你可以定义
\newcommand{\cinfty}{\mathrel{\centernot{\mkern-0.35mu\infty}\mkern-0.35mu}}
使用斜线而不是\not
(和我最喜欢的工具\ooalign
)的不同版本。
\documentclass{article}
\makeatletter
\newcommand{\cinfty}{\mathrel{\mathpalette\do@cinfty\relax}}
\newcommand{\do@cinfty}[2]{%
\vphantom{/}%
\ooalign{\hidewidth$\m@th#1/$\hidewidth\cr$\m@th#1\infty$}%
}
\begin{document}
$A\cinfty B_{\cinfty}$
\end{document}
答案2
\documentclass{article}
\usepackage{stackengine}
\renewcommand\stacktype{L}
\stackMath
\begin{document}
$\stackon[0pt]{\infty}{/}$
\end{document}
\mathrel
如果你想要一个与数学风格相符的版本,
\documentclass{article}
\usepackage{scalerel,stackengine}
\def\notinfty{%
\renewcommand\stacktype{L}\mathrel{\ensurestackMath{%
\ThisStyle{\stackon[0pt]{\SavedStyle\infty}{\SavedStyle/}}}}%
}
\begin{document}
$A \notinfty B ~\scriptstyle A\notinfty B ~\scriptscriptstyle A \notinfty B$
\end{document}
答案3
\not
通常针对等号进行优化。软件包centernot
负责水平居中。\infty
比等号更宽,请参阅 egreg 的回答。
等号垂直居中于数学轴周围,\not
通常遵循这种对称性。然而,符号\infty
只是位于基线上(Computer Modern 字体,cmsy10
)。由于它作为关系符号似乎具有不同的含义,因此可能允许将其垂直居中。
以下示例围绕数学轴垂直居中\infty
,\vinfty
并使用包centernot
进行水平居中。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[variablett]{lmodern}
\usepackage{amsmath}% for environment "gather*"
\usepackage{centernot}
\makeatletter
\newcommand*{\vinfty}{%
\mathrel{%
\mathpalette\@vinfty{}%
}%
}
\newcommand*{\@vinfty}[2]{%
% #1: math style
% #2: unused
\vcenter{%
\hbox{$#1\infty\m@th$}%
}%
}
\makeatother
\newcommand*{\notvinfty}{%
\centernot\vinfty
}
\begin{document}
\centering
{\scriptsize Vertically centered (\texttt{\textbackslash vinfty})}
\begin{gather*}
a \vinfty b \notvinfty c
\\
\scriptstyle a \vinfty b \notvinfty c
\\
\scriptscriptstyle a \vinfty b \notvinfty c
\end{gather*}
%
{\scriptsize Not vertically centered (\texttt{\textbackslash infty})}
\begin{gather*}
a \mathrel{\infty} b \centernot\infty c
\\
\scriptstyle a \mathrel{\infty} b \centernot\infty c
\\
\scriptscriptstyle a \mathrel{\infty} b \centernot\infty c
\end{gather*}
\end{document}