amssymb 中的两个符号有一半重叠

amssymb 中的两个符号有一半重叠

我使用的是空心三角形和实心三角形amssymb,但我需要第三个三角形。它应该看起来像\blacktriangleright前半部分和\rhd后半部分。


平均能量损失

\documentclass{article}
\usepackage{amssymb}
\begin{document}

$\rhd$

$\blacktriangleright$

% half \blacktriangleright and half \rhd

\end{document}

期望输出油漆制成:

一半黑色一半白色三角形

答案1

一种解决方案是将符号与 的截断版本\blacktriangleright和完整符号组合在一起\rhd。示例使用\mathrel表示结果作为关系符号(如\blacktriangleright)。如果最终符号最好是二进制符号(如\rhd),则\mathrel需要用 替换\mathbin。幸运的是, 的两个符号amssymb在三角形的形式和尺寸以及包括侧边距在内的字符宽度上都匹配。

\documentclass{article}
\usepackage{amssymb}

\usepackage{trimclip}
\makeatletter
\newcommand*{\halfblacktriangleright}{}%
\DeclareRobustCommand*{\halfblacktriangleright}{%
  \mathrel{% like \blacktriangleright or \mathbin like \rhd
    \mathpalette\@halfblacktriangleright{}%
  }%
}
\newcommand*{\@halfblacktriangleright}[2]{%
  % #1: math style
  % #2: unused
  \rlap{%
    \clipbox{0 0 {.55\width} 0}{$#1\blacktriangleright\m@th$}%
  }%
  \rhd
}
\makeatother

\begin{document}

%$\rhd\quad\blacktriangleright$

$1\halfblacktriangleright 2\quad
\scriptstyle 1\halfblacktriangleright 2\quad
\scriptscriptstyle 1\halfblacktriangleright 2$

\end{document}

结果

\@ifdefinable用于检查宏是否已定义的定义变体:

\documentclass{article}
\usepackage{amssymb}

\usepackage{trimclip}
\makeatletter
\@ifdefinable{\halfblacktriangleright}{%
  \@ifdefinable{\@halfblacktriangleright}{%
    \protected\def\halfblacktriangleright{%
      \mathrel{% like \blacktriangleright or \mathbin like \rhd
        \mathpalette\@halfblacktriangleright{}%
      }%
    }%
    \def\@halfblacktriangleright#1#2{%
      % #1: math style
      % #2: unused
      \rlap{%
        \clipbox{0 0 {.55\width} 0}{$#1\blacktriangleright\m@th$}%
      }%
      \rhd%
    }%
  }%
}
\makeatother

\begin{document}

%$\rhd\quad\blacktriangleright$

$1\halfblacktriangleright 2\quad
\scriptstyle 1\halfblacktriangleright 2\quad
\scriptscriptstyle 1\halfblacktriangleright 2$

\end{document}

相关内容