![用更小的 \setminus 重新定义 \smallsetminus](https://linux22.com/image/260096/%E7%94%A8%E6%9B%B4%E5%B0%8F%E7%9A%84%20%5Csetminus%20%E9%87%8D%E6%96%B0%E5%AE%9A%E4%B9%89%20%5Csmallsetminus.png)
我不喜欢它的外观\setminus
(它很大而且不好看),也不喜欢它的外观\smallsetminus
(它的尺寸很完美,但在我看来,它太水平了,而且不是垂直居中)。
我发现在普通数学中我可以使用以下内容:
\[
A \mathbin{\vcenter{\hbox{$\scriptscriptstyle\setminus$}}} B
\]
看起来像。但它非常薄。所以我做了下一个(我真的不知道这些命令中有多少是有效的,它经过了大量的反复试验):
\[
A \mathbin{\vcenter{\hbox{$\scriptscriptstyle\mathrlap{\setminus}{\hspace{.2pt}\setminus$}}} B
\]
看起来更像。
此时我得到了所需的厚度。但是如果你放大它,它会很丑,而不是精心设计,如果它在下标中,则不符合正确的大小(而在子下标中则为 less )。
问题:
关于如何重新定义\setminus
以获得该方向(与平常相同\setminus
)的任何想法,或多或少高度在图片中显示并且厚度与通常相同\setminus
(所有尺寸:displaysytle,textstyle(与displaystyle相同),scriptstyle和scriptscriptstyle)?
我会听取你的所有想法(包括那些你试图说服我通常的做法\setminus
或\smallsetminus
完美做法的想法)。
编辑:这里是所有内容的外观示例(\setminus
,我的宏,\smallsetminus
):
这里是另一个例子,包括@AndrewSwann \fgebackslash
(\setminus
,,\smallsetminus
我的宏,修改得更小\fgebackslash
,\fgebackslash
)
答案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}