在纯 TeX 中重复打出 \diamond 和加号?

在纯 TeX 中重复打出 \diamond 和加号?

我需要一个纯 TeX 字符,该字符将加号与四边形组合在一起,四边形的角是加号的四个端点。有没有办法创建这样的东西?

我很抱歉编辑了这个问题;我不知道如何输入答案。我能够使用 gpic 构造字符,将生成的特殊字符放在一个框中,并定义\gjoin为从该框复制。出于各种原因,我将在我的图论教科书第三版中使用这个字符来表示两个图的连接。我相信这是一个有用且自然的字符。

建议的重打使用方法\ooalign对我来说不起作用。将字符绘制为连接四个指定点的线应该可以避免由于重打而导致的间距困难。

以下是我找到的答案:

\expandafter\ifx\csname dplus\endcsname\relax \csname newbox\endcsname\dplus\fi
\expandafter\ifx\csname dplustemp\endcsname\relax
\csname newdimen\endcsname\dplustemp\fi

\setbox\dplus=\vtop{\vskip -7pt\hbox{%  
    \kern .021in%  
    \special{pn 11}%  
    \special{pa 0 50}%  
    \special{pa 50 100}%  
    \special{fp}%  
    \special{pa 50 100}%  
    \special{pa 100 50}%  
    \special{fp}%  
    \special{pa 100 50}%  
    \special{pa 50 0}%  
    \special{fp}%  
    \special{pa 50 100}%  
    \special{pa 50 0}%  
    \special{fp}%  
    \special{pa 50 0}%  
    \special{pa 0 50}%  
    \special{fp}%  
    \special{pa 0 50}%  
    \special{pa 100 50}%  
    \special{fp}%  
    \hbox{\vrule depth0.100in width0pt height 0pt}%  
    \kern 0.110in  
  }%  
}%  

\def\gjoin{\copy\dplus}

$G\gjoin H$ and $G_1\gjoin G_2$

答案1

基本上有至少三种明显的方法可以实现这一点:

  1. 把加号缩小,让它适合菱形,然后
  2. 把菱形符号放大,这样加号就可以放进去了,然后
  3. 以上两种情况,但效果不显著

其中每一个都可以定义为

\font\Bigmath=cmsy10 scaled \magstep2
\font\bigmath=cmsy10 scaled \magstep1
\def\diamondplus{\mathrel{%
  \ooalign{\raise.29ex\hbox{$\scriptscriptstyle+$}\cr\hss$\diamond$\hss}}}
\def\diamondplustwo{\mathrel{%
  \ooalign{$+$\cr\hss\lower.255ex\hbox{\Bigmath\char5}\hss}}}
\def\diamondplusthree{\mathrel{%
  \ooalign{$\scriptstyle+$\cr\hss\lower.29ex\hbox{\bigmath\char5}\hss}}}
$$\displaylines{
  a \diamondplus b \cr
  a \diamondplustwo b \cr
  a \diamondplusthree b \cr
}$$
\bye

在此处输入图片描述

(不要介意它们在屏幕上的样子,因为根据缩放级别,叠加的字形可能会在屏幕上稍微漂移)

请注意,ex这里使用的值取决于字体设计,因此即使更改为另一个 Computer Modern 光学尺寸也会破坏定位。

有关更多信息\ooalign,请参阅这个 egreg 的回答

答案2

您可以通过设置单位来缩放它。

\input pstricks
\def\gjoin{\psset{unit=0.15ex,linewidth=0.4pt}%
 \mathrel{\pspicture(10,10)
 \psline(5,0)(5,10)
 \psline(0,5)(10,5)
 \pspolygon(0,5)(5,10)(10,5)(5,0)
\endpspicture}}

$G \gjoin H$ and $G_1\gjoin G_2$

\bye

在此处输入图片描述

它还应该考虑不同的字体大小。

答案3

没有pstricks\ooalign,也可以使用\boxtimes提供的amssym和带有的 LaTeX 图形功能graphicx

\input graphicx
\input amssym

\catcode`@=11
\def\diamondplus{\mathbin{\mathpalette\diamondplus@\relax}}
\def\diamondplus@#1#2{%
  \vcenter{%
    \hbox{%
      \setbox\z@=\hbox{$\m@th#1\oplus$}%
      \dimen@=\ht\z@ \advance\dimen@ \dp\z@
      \resizebox{!}{\dimen@}{%
        \rotatebox[origin=c]{45}{$\m@th#1\boxtimes$}%
      }% resizebox
    }% hbox
  }% vcenter
}
\catcode`@=12

$a\diamondplus b \oplus c$

$\scriptstyle a\diamondplus b$

\bye

在此处输入图片描述

答案4

您可以旋转 \boxtimes:

\newcommand{\diamondplus}{\rotatebox[origin=c]{45}{$\boxtimes$}}

相关内容