amssymb 中没有的奇怪符号

amssymb 中没有的奇怪符号

有人建议我在评论中提出一个关于在 XeTeX 中获取此符号的新问题别处

在此处输入图片描述

我更喜欢高 LaTeX 或 XeTeX 定义,而不是 TeX 的原语。

编辑:

幸运的是,你们中的一些人,伟大的程序员,已经找到了可行但难以理解的解决方案。现在的挑战是缩短代码,即使不能,也要让初学者更容易阅读和理解!

答案1

警告:不要自己动手。唯一正确的方法是让字体设计师来实现字形。但我听从了这个建议吗?没有。

以下解决方案完全不切实际,因为它涉及太多的剪辑、旋转、缩放等,以至于它的运行速度最慢。我们正在讨论嵌套\mathchoice,即使您在代码中看不到它。

因此,作为一个挑战,我尝试看看自己能做些什么。因此,看看它,嘲笑它,投票赞成或反对它,然后继续前进并试着忘记你看到它。

\documentclass[10pt]{article}
\usepackage{trimclip,scalerel,rotate,stackengine}
\newcommand\subprec{\rotatebox{-7.7}{\clipbox{0pt 0pt 0pt {\dimexpr .79ex}}%
  {\rotatebox[origin=c]{7.7}{$\prec$}}}}
\newcommand\precone{\ensurestackMath{%
  \stackinset{c}{-.5pt}{c}{-2.3pt}{\hstretch{.9}{\subprec}}{\prec}}}
\newcommand\nprecone{\stackinset{c}{.45pt}{c}{-.45pt}
  {\rotatebox[origin=c]{50}{\rule{1.2pt}{.3pt}}}{\precone}}\newcommand\prectwo{\ensurestackMath{%
  \stackinset{c}{-.8pt}{c}{-2.1pt}{\hstretch{.79}{\subprec}}{\precone}}}
\newcommand\nprectwo{\stackinset{c}{.25pt}{c}{-.45pt}
  {\rotatebox[origin=c]{50}{\rule{2pt}{.3pt}}}{\prectwo}}
\newcommand\Preceq{\mathrel{\scaleto{\precone}{\dimexpr.2ex+1.65\LMex}}}
\newcommand\Preceqq{\mathrel{\scaleto{\prectwo}{\dimexpr.3ex+1.55\LMex}}}
\newcommand\nPreceq{\mathrel{\scaleto{\nprecone}{\dimexpr.2ex+1.65\LMex}}}
\newcommand\nPreceqq{\mathrel{\scaleto{\nprectwo}{\dimexpr.3ex+1.55\LMex}}}
\begin{document}
\stackMath
$ Z \prec A \Preceq B \Preceqq C \nPreceq D \nPreceqq E$

$\scriptstyle Z \prec A \Preceq B \Preceqq C \nPreceq D \nPreceqq E$

$\scriptscriptstyle Z \prec A \Preceq B \Preceqq C \nPreceq D \nPreceqq E$

\end{document}

在此处输入图片描述

答案2

这是一个“从头开始绘制”的 TikZ 解决方案。目前没有其他尺寸。(但可以通过更改轻松调整scale=.2。)

\precc请注意,应使用新命令而不是\prec来保持它们全部相同。

在此处输入图片描述

\documentclass{article}

\usepackage{tikz}

\newcommand{\precc}{\mathrel{\mkern1.5mu\tikz[baseline={([yshift=.5pt]current bounding box.south)}, line width=.4, line cap=round, line join=round, scale=.2]{
    \draw (1,1) to[out=-100,in=0] (0,.5) to[out=0,in=100] (1,0);
    }\mkern1.5mu}}

\newcommand{\preceqq}{\mathrel{\mkern1.5mu\tikz[baseline={([yshift=.5pt]current bounding box.south)}, line width=.4, line cap=round, line join=round, scale=.2]{
    \draw (1,1) to[out=-100,in=0] (0,.5) to[out=0,in=100] (1,0);
    \draw (0,.3) to[out=0,in=100] (.9,-.2);
    }\mkern1.5mu}}
    
\newcommand{\npreceqq}{\mathrel{\mkern1.5mu\tikz[baseline={([yshift=.5pt]current bounding box.south)}, line width=.4, line cap=round, line join=round, scale=.2]{
    \draw (1,1) to[out=-100,in=0] (0,.5) to[out=0,in=100] (1,0);
    \draw (0,.3) to[out=0,in=100] (.9,-.2);
    \draw (.5,.05) -- (.75,.25);
    }\mkern1.5mu}}

\newcommand{\preceqqq}{\mathrel{\mkern1.5mu\tikz[baseline={([yshift=1pt]current bounding box.south)}, line width=.4, line cap=round, line join=round, scale=.2]{
    \draw (1,1) to[out=-100,in=0] (0,.5) to[out=0,in=100] (1,0);
    \draw (0,.3) to[out=0,in=100] (.9,-.2);
    \draw (0,.1) to[out=0,in=100] (.8,-.4);
    }\mkern1.5mu}}

\newcommand{\npreceqqq}{\mathrel{\mkern1.5mu\tikz[baseline={([yshift=1pt]current bounding box.south)}, line width=.4, line cap=round, line join=round, scale=.2]{
    \draw (1,1) to[out=-100,in=0] (0,.5) to[out=0,in=100] (1,0);
    \draw (0,.3) to[out=0,in=100] (.9,-.2);
    \draw (0,.1) to[out=0,in=100] (.8,-.4);
    \draw (.35,-.1) -- (.75,.25);
    }\mkern1.5mu}}

\begin{document}

$A\precc B\preceqq C\npreceqq D\preceqqq E\npreceqqq F$

\end{document}

相关内容