一个普遍承认的事实是:一个拥有好的定理的数学家必定需要符号。1
unicode 不包含每一个阳光下的符号。
因此,时不时地,一些勇敢的灵魂会提出并定义一个新的符号,可能使用 TikZ,可能通过在外部图形程序中绘制它,或者像环境一样使用其他一些神秘的仪式picture
。
这个问题不是关于创造符号,而是要考虑如何使用它——特别关注它在数学模式。为了回答这个问题,假设我有一个符号的构造,其中包含一些调整其大小的方法(例如,在如何将图形变成符号?那么它是一个通过包含的外部图片\includegraphics
并且height
可以使用该选项,在 TikZ 图片中scale
可以给出一个选项)。
要在数学中使用该符号,需要解决两个问题:大小和间距。间距通过\mathop
、\mathbin
或处理\mathrel
,大小大概需要\mathchoice
正确处理(或者我们可以使用ex
尺寸来避免这种情况 - 即在下标中设置1ex
为下标字体还是正常字体?)。(我假设符号定义正确设置了基线。)
那么我应该如何定义符号的包装呢?
以下是一些可供使用的代码。目标是使新符号(红色)\neg
在大小和间距方面都像符号一样运行(我假设使其运行的代码\neg
很容易适应,例如,=
通过将或+
替换为)。让我们假设尺寸(和基线)对于版本来说是正确的,但从图像中可以清楚地看出,间距不正确。\mathwhatever
\mathrel
\mathbin
\textstyle
\documentclass{article}
%\url{https://tex.stackexchange.com/q/384784/86}
\usepackage{tikz}
\newcommand\sqsymbol[1]{
\tikz[x=#1,y=#1] {\draw[red,line cap=round,line join=round] (0,.83) -| ++(1.2,-.53) (0,0) coordinate (a);}
}
\newcommand\sq[0]{\sqsymbol{1ex}}
\begin{document}
\(\displaystyle A \sq B\), \(A \sq B\), \(A_{C \sq B}\), \(A_{C_{D \sq B}}\)
\(\displaystyle A \neg B\), \(A \neg B\), \(A_{C \neg B}\), \(A_{C_{D \neg B}}\)
\end{document}
该代码生成的结果如下:
答案1
这个问题没有定论,但我会提出一些问题。不清楚说“表现得像”,你是否想\sq
占据与相同的水平空间\neg
。如果是这样,你可以增加的大小\sq
或在其周围增加额外的空间。但是,至于处理新符号的大小,该scalerel
包会将一个符号缩放为另一个符号的垂直占用空间,同时保留当前的数学风格。因此,如果我告诉\sq
占用与 相同的垂直空间\neg
,那么由于 会\neg
随着数学样式而改变大小,所以 也会如此\sq
。
此外,scalerel
在参数上下文中提供scalerel
长度\LMex
和\LMpt
(LM
代表“本地数学样式”),它们提供 1ex 和 1pt 的长度,并根据当前数学样式进行缩放。这允许将尺寸缩放到较低的数学样式。
但是,通常情况下,某些尺寸不会缩放到较小的数学样式,例如字形边距 (*) 通常不会缩放(由字体设计师决定)。为了处理这种不统一的缩放比例,如果我试图模仿现有字形(例如)的间距\neg
,我可以结合两个尺寸(pts 和\LMpt
s)。因此,例如,当我说 时\kern1.23pt\kern-.9\LMpt
,这在文本和显示样式中是 .33pt,但在较小的数学样式中会大于这个数字,因为在较小的数学样式中,.9\LMpt
小于 .9pt。这些技术可用于纠正字形边距问题。
可以通过调整与和scalerel
相关的假定比例因子来实现微调,默认情况下这些比例因子为\scriptstyle
\scriptscriptstyle
\def\scriptstyleScaleFactor{0.7}
\def\scriptscriptstyleScaleFactor{0.5}
有趣的是,我\sqsymbol
使用 的参数来调用1\LMex
。尝试用 替换它1ex
,并查看较小数学样式的差异。
妇女权利委员会:
\documentclass{article}
\usepackage{tikz,scalerel}
\newcommand\sqsymbol[1]{%
\tikz[x=#1,y=#1] {\draw[red,line cap=round,line join=round] (0,.83) -| ++(1.2,-.53) (0,0) coordinate (a);}%
}
\newcommand\sq[0]{\ThisStyle{\kern1.23pt\kern-.9\LMpt\scalerel*{\sqsymbol{1\LMex}}{\neg}%
\kern1.23pt\kern-.9\LMpt}}
\begin{document}
\(\displaystyle A \sq B\), \(A \sq B\), \(A_{C \sq B}\), \(A_{C_{D \sq B}}\)
\(\displaystyle A \neg B\), \(A \neg B\), \(A_{C \neg B}\), \(A_{C_{D \neg B}}\)
\end{document}
你可能会发现,在 中\displaystyle
,\sq
符号比 宽\neg
,而在 中\scriptscriptstyle
,它比 窄。原因可以解释。的字形设计者\neg
选择在较小的数学样式中更改 的纵横比\neg
(垂直短线变得相对较短)。相反, 的纵横比\sq
(一般定义)保持不变。由于\sq
缩放到 的垂直占用空间,因此 和\neg
的相对宽度将随着 的纵横比变化而变化。\neg
\sq
\neg
另一种方法是,不缩放\sq
到 的垂直足迹\neg
,而是缩放到某个东西的垂直足迹,该东西在较小的数学样式下会改变其绝对高度和相对高度,例如\rule[-.12ex]{0pt}{\dimexpr.24ex+.7\LMex}}\kern.5pt}
。这样做可以让侧边距现在更简单地表示为固定的.5pt
,使用
\renewcommand\sq[0]{\ThisStyle{\kern.5pt\scalerel{\sqsymbol{1ex}}{%
\rule[-.12ex]{0pt}{\dimexpr.24ex+.7\LMex}}\kern.5pt}}
第 1 行显示原始内容,第 2 行、第 3 行显示修订内容\neg
,第 4 行显示第 2 行和第 3 行的叠加内容:
\documentclass{article}
\usepackage{tikz,scalerel,stackengine}
\newcommand\sqsymbol[1]{%
\tikz[x=#1,y=#1] {\draw[red,line cap=round,line join=round] (0,.83) -| ++(1.2,-.53) (0,0) coordinate (a);}%
}
\newcommand\sq[0]{\ThisStyle{\kern1.23pt\kern-.9\LMpt\scalerel*{\sqsymbol{1\LMex}}{\neg}%
\kern1.23pt\kern-.9\LMpt}}
\begin{document}
\(\displaystyle A \sq B\), \(A \sq B\), \(A_{C \sq B}\), \(A_{C_{D \sq B}}\)
\renewcommand\sq[0]{\ThisStyle{\kern.5pt\scalerel{\sqsymbol{1ex}}{%
\rule[-.12ex]{0pt}{\dimexpr.24ex+.7\LMex}}\kern.5pt}}
\(\displaystyle A \sq B\), \(A \sq B\), \(A_{C \sq B}\), \(A_{C_{D \sq B}}\)
\(\displaystyle A \neg B\), \(A \neg B\), \(A_{C \neg B}\), \(A_{C_{D \neg B}}\)
\stackengine{0pt%
}{\(\displaystyle A \neg B\), \(A \neg B\), \(A_{C \neg B}\), \(A_{C_{D \neg B}}\)
}{\(\displaystyle A \sq B\), \(A \sq B\), \(A_{C \sq B}\), \(A_{C_{D \sq B}}\)
}{O}{l}{F}{F}{L}
\end{document}
我的回答是,大运营商是如何定义的?\displaystyle
,当和之间的差异\textstyle
相关时,进一步讨论了这个问题。
*侧边距是字体设计师在字形中固有构建的水平死空间量。例如,代码
\fboxsep=0pt
\fbox{$+$}
\fbox{$\neg$}
\fbox{$\scriptstyle\neg$}
\fbox{$\scriptscriptstyle\neg$}
产量
可以看出,侧向空间并不小和它不一定能随着较小的数学样式缩放。OP 在创建时\sqsymbol
创建了一个没有侧边距的符号。因此,解决间距难题的一部分是分配一些侧边距并决定它是否应该在较小的数学样式下缩放。选择权取决于字体/符号设计师。但是,如果想要他们的符号模仿另一个预先存在的字形的水平间距,事情就会变得复杂。在这种情况下,了解字形在不同数学大小下的侧边距对于令人满意的模仿至关重要。
答案2
您肯定需要\mathchoice
一些时间(在假期时,您可以找到一些时间)。
\documentclass{article}
%\url{https://tex.stackexchange.com/q/384784/86}
\usepackage{amsmath}
\usepackage{tikz}
\newcommand\sqsymbol[1]{%
\tikz[x=#1,y=#1]{%
\draw[red,line cap=round,line join=round] (0,.83) -| ++(1.2,-.43) (0,0) coordinate (a);
}%
}
\newcommand\sq{%
\mathord{% or \mathrel or \mathbin
\mkern1mu
\mathchoice
{\expandafter\sqsymbol\expandafter{\the\dimexpr.42964\fontdimen6\textfont2}}
{\expandafter\sqsymbol\expandafter{\the\dimexpr.42964\fontdimen6\textfont2}}
{\expandafter\sqsymbol\expandafter{\the\dimexpr.41475\fontdimen6\scriptfont2}}
{\expandafter\sqsymbol\expandafter{\the\dimexpr.39672\fontdimen6\scriptscriptfont2}}
\mkern1mu
}%
}
\begin{document}
\sbox0{$A\neg B$}\the\wd0--\sbox0{$A\sq B$}\the\wd0
\sbox0{$\scriptstyle A\neg B$}\the\wd0--\sbox0{$\scriptstyle A\sq B$}\the\wd0
\sbox0{$\scriptscriptstyle A\neg B$}\the\wd0--\sbox0{$\scriptscriptstyle A\sq B$}\the\wd0
\(\displaystyle A \sq B\), \(A \sq B\), \(A_{C \sq B}\), \(A_{C_{D \sq B}}\)
\(\displaystyle A \neg B\), \(A \neg B\), \(A_{C \neg B}\), \(A_{C_{D \neg B}}\)
\leavevmode\rlap{%
\(\displaystyle A \sq B\), \(A \sq B\), \(A_{C \sq B}\), \(A_{C_{D \sq B}}\)%
}%
\(\displaystyle A \neg B\), \(A \neg B\), \(A_{C \neg B}\), \(A_{C_{D \neg B}}\)
\leavevmode\rlap{%
\color{red}%
\(\displaystyle A \sq B\), \(A \sq B\), \(A_{C \sq B}\), \(A_{C_{D \sq B}}\)%
}%
\(\displaystyle A \neg B\), \(A \neg B\), \(A_{C \neg B}\), \(A_{C_{D \neg B}}\)
\leavevmode\rlap{%
\(\displaystyle A \sq B\), \(A \sq B\), \(A_{C \sq B}\), \(A_{C_{D \sq B}}\)%
}%
\color{red}\(\displaystyle A \neg B\), \(A \neg B\), \(A_{C \neg B}\), \(A_{C_{D \neg B}}\)
\end{document}
下标中的高度是错误的,可能需要两个参数才能获得完美的结果。
宽度的差异小于 0.0001pt(我相信,由于多次四舍五入,不可能得到更小的值)。
1mu
您可以添加一些不可见的东西来扩大符号的边界框,而不是在任一侧。