将斜线(不)放置在(数学)字形的中心?

将斜线(不)放置在(数学)字形的中心?

我的目标是构造一个关系符号,它在图形上等同于标准无穷符号(编码为\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}

结果

相关内容