用更小的 \setminus 重新定义 \smallsetminus

用更小的 \setminus 重新定义 \smallsetminus

我不喜欢它的外观\setminus(它很大而且不好看),也不喜欢它的外观\smallsetminus(它的尺寸很完美,但在我看来,它太水平了,而且不是垂直居中)。

我发现在普通数学中我可以使用以下内容:

\[
    A \mathbin{\vcenter{\hbox{$\scriptscriptstyle\setminus$}}} B
\]

看起来像A \xsetminus B。但它非常薄。所以我做了下一个(我真的不知道这些命令中有多少是有效的,它经过了大量的反复试验):

\[
    A \mathbin{\vcenter{\hbox{$\scriptscriptstyle\mathrlap{\setminus}{\hspace{.2pt}\setminus$}}} B
\]

看起来更像A \xbsmallsetminus B

此时我得到了所需的厚度。但是如果你放大它,它会很丑,而不是精心设计,如果它在下标中,则不符合正确的大小(而在子下标中则为 less )。

问题:

关于如何重新定义\setminus以获得该方向(与平常相同\setminus)的任何想法,或多或少高度在图片中显示并且厚度与通常相同\setminus(所有尺寸:displaysytle,textstyle(与displaystyle相同),scriptstyle和scriptscriptstyle)?

我会听取你的所有想法(包括那些你试图说服我通常的做法\setminus\smallsetminus完美做法的想法)。

编辑:这里是所有内容的外观示例(\setminus,我的宏,\smallsetminus):

比较1

这里是另一个例子,包括@AndrewSwann \fgebackslash\setminus,,\smallsetminus我的宏,修改得更小\fgebackslash\fgebackslash

比较2

答案1

鉴于您不喜欢现有字体中的现有形状,我的另一个建议是使用tikz绘制符号;然后您可以根据需要调整所有参数和坐标。

示例输出

\documentclass{article}

\usepackage{amssymb,tikz}

\newcommand{\mysetminusD}{\hbox{\tikz{\draw[line width=0.6pt,line cap=round] (3pt,0) -- (0,6pt);}}}
\newcommand{\mysetminusT}{\mysetminusD}
\newcommand{\mysetminusS}{\hbox{\tikz{\draw[line width=0.45pt,line cap=round] (2pt,0) -- (0,4pt);}}}
\newcommand{\mysetminusSS}{\hbox{\tikz{\draw[line width=0.4pt,line cap=round] (1.5pt,0) -- (0,3pt);}}}

\newcommand{\mysetminus}{\mathbin{\mathchoice{\mysetminusD}{\mysetminusT}{\mysetminusS}{\mysetminusSS}}}

\begin{document} 
\thispagestyle{empty}

\verb+\setminus,\mysetminus,\smallsetminus+:
\begin{displaymath}
 A\setminus B \qquad A \mysetminus B \qquad
A\smallsetminus B 
\end{displaymath}

\verb+\mysetminus+ in display, script and scriptscript styles
\begin{displaymath}
 A\mysetminus B\quad \scriptstyle A\mysetminus B \quad
\scriptscriptstyle A\mysetminus B
\end{displaymath}

\end{document}

代码为 displaystyle、textstyle、scriptstyle 和 scriptscriptstyle 提供了单独的命令,并用于\mathchoice选择正确的命令。我已将 textstyle 版本设置为与 displaystyle 版本相同。在命令中,\tikz您现在可以准确指定要使用哪条线以及它应该具有的宽度。我已使用选项将线的末端设为圆形,而不是方形line cap。最后,如果需要,您可以通过添加 tikz 构造为这些字符指定不同的边界框

\useasboundingbox (-0.5pt,-0.5pt) rectangle (5pt,8pt);

选择合适的坐标。(这样可以避免\vcenter代码中的类型混乱。)

添加如果您担心每次使用 tikz 命令的开销(我认为在这种情况下开销并不高),那么您可以不用使用新命令,而是使用带有\newsavebox\sbox和 的框,如下所示\usebox

\newsavebox{\mysetminusD}
\sbox{\mysetminusD}{\hbox{\tikz{\draw[line width=0.6pt,line cap=round]
(3pt,0) -- (0,6pt);}}}
\newsavebox{\mysetminusT}
\sbox{\mysetminusT}{\mysetminusD}
\newsavebox{\mysetminusS}
\sbox{\mysetminusS}{\hbox{\tikz{\draw[line width=0.45pt,line
cap=round] (2pt,0) -- (0,4pt);}}}
\newsavebox{\mysetminusSS}
\sbox{\mysetminusSS}{\hbox{\tikz{\draw[line width=0.4pt,line cap=round] (1.5pt,0) -- (0,3pt);}}}

\newcommand{\mysetminus}{\mathbin{\mathchoice{\usebox{\mysetminusD}}{\usebox{\mysetminusT}}{\usebox{\mysetminusS}}{\usebox{\mysetminusSS}}}}

答案2

你可以旋转\smallsetminus

\documentclass{article}
\usepackage{graphicx,amsmath,amssymb}

\newcommand\rsetminus{\mathbin{\mathpalette\rsetminusaux\relax}}
\newcommand\rsetminusaux[2]{\mspace{-4mu}
  \raisebox{\rsmraise{#1}\depth}{\rotatebox[origin=c]{-20}{$#1\smallsetminus$}}
 \mspace{-4mu}
}
\newcommand\rsmraise[1]{%
  \ifx#1\displaystyle .8\else
    \ifx#1\textstyle .8\else
      \ifx#1\scriptstyle .6\else
        .45%
      \fi
    \fi
  \fi}

\begin{document}
$A\rsetminus B_{A\rsetminus B_{A\rsetminus B}}$
\end{document}

在此处输入图片描述

答案3

由于您对标准选择不满意,我建议您\fgebackslash尝试fge 包。这里它位于\setminus和之间\smallsetminus

示例输出

\documentclass{article}

\usepackage{amssymb,fge}
\newcommand{\mysetminus}{\mathbin{\fgebackslash}}

\begin{document} 

\( A\setminus B \qquad A \mysetminus B \qquad
A\smallsetminus B \)

\end{document}

相关内容