在 TikZ 中创建符号

在 TikZ 中创建符号

我想出了一种在 LaTeX 中显示讲师用于嵌入偏序集的符号的方法,因为找不到它作为标准符号。我采用的方法是使用 TikZ 图片作为新函数,代码如下

\newcommand{\Sqsubset}{
\kern3pt
\begin{tikzpicture}
\draw (0ex,0ex) -- (0ex,1.3ex);
\draw (0ex,0) -- (1.3ex,0ex);
\draw (0ex,1.3ex) -- (1.3ex,1.3ex);
\draw (0.325ex,0.325ex) -- (1.3ex,0.325ex);
\draw (0.325ex,0.325ex) -- (0.325ex,0.975ex);
\draw (0.325ex,0.975ex) -- (1.3ex,0.975ex);
\end{tikzpicture}
\kern3pt }

我基本上只是想知道是否有一种方法可以使用这个符号,而不必让编译器每次都从代码中提取它......也许将它保存为字形?

答案1

符号质量可以得到提高。

间距:

  • \mathrel照顾不同数学环境中的水平数学模式间距。
  • 符号的侧边距可以从 3pt 减少到类似的值sqsubset

线条图:

  • 不应分割折线并将线段绘制为单线。这样线连接设置就不适用。如果将线绘制为连接线,则可以使线连接更平滑。下面的示例使用设置round

  • 并且线帽也可以做成圆形,就像这样\sqsubset

完整示例:

\documentclass{article}
\usepackage{tikz}

% Old version
\newcommand{\OldSqsubset}{
\kern3pt
\begin{tikzpicture}
\draw (0ex,0ex) -- (0ex,1.3ex);
\draw (0ex,0) -- (1.3ex,0ex);
\draw (0ex,1.3ex) -- (1.3ex,1.3ex);
\draw (0.325ex,0.325ex) -- (1.3ex,0.325ex);
\draw (0.325ex,0.325ex) -- (0.325ex,0.975ex);
\draw (0.325ex,0.975ex) -- (1.3ex,0.975ex);
\end{tikzpicture}
\kern3pt }

% New version
\newcommand{\Sqsubset}{%
  \mathrel{%
    \tikz[line cap=round, line join=round]
    \draw
      (1.3ex, 0ex) -- (0ex, 0ex) -- (0ex, 1.3ex) -- (1.3ex, 1.3ex)
      (1.3ex, 0.325ex) -- (0.325ex, 0.325ex) -- (0.325ex, 0.975ex)
      -- (1.3ex, 0.975ex)
      (-.13ex, 0ex) (1.3ex + .13ex, 0ex) % side bearings
    ;%
  }%
}

\begin{document}
  \noindent
  $A \OldSqsubset B$
  $A \Sqsubset B$
\end{document}

结果

答案2

使用标准符号不是更好吗?

\documentclass{article}
\usepackage{mathabx}

\begin{document}

\[
A\sqSubset B
\]

\end{document}

在此处输入图片描述

可以避免mathabx改变所有可能不受欢迎的符号。

\documentclass{article}

\DeclareFontFamily{U}{mathb}{}
\DeclareFontShape{U}{mathb}{m}{n}{
  <-5.5> mathb5
  <5.5-6.5> mathb6
  <6.5-7.5> mathb7
  <7.5-8.5> mathb8
  <8.5-9.5> mathb9
  <9.5-11> mathb10
  <11-> mathb12
}{}
\DeclareSymbolFont{mathb}{U}{mathb}{m}{n}
\DeclareFontSubstitution{U}{mathb}{m}{n}

\DeclareMathSymbol{\sqSubset}{3}{mathb}{"94}
\DeclareMathSymbol{\sqSupset}{3}{mathb}{"95}

\begin{document}

$A \sqSubset B \sqSupset C$

\end{document}

在此处输入图片描述

答案3

这是为了遵循数学风格而做的,我称之为\mathrel(我的一个假设)。它的高度将始终与大写字母的高度一样高。

已编辑,将第二个参数从 改为\scalerel*X以便\subset这个新符号永远获得 的高度\subset,以回应芭芭拉的评论。

\documentclass{article}
\usepackage{tikz,scalerel}
\newcommand{\SqsubsetRAW}{%
\begin{tikzpicture}
\draw (0ex,0ex) -- (0ex,1.3ex);
\draw (0ex,0) -- (1.3ex,0ex);
\draw (0ex,1.3ex) -- (1.3ex,1.3ex);
\draw (0.325ex,0.325ex) -- (1.3ex,0.325ex);
\draw (0.325ex,0.325ex) -- (0.325ex,0.975ex);
\draw (0.325ex,0.975ex) -- (1.3ex,0.975ex);
\end{tikzpicture}}
\newsavebox\SqsubsetBOX
\savebox\SqsubsetBOX{\SqsubsetRAW}
\newcommand\Sqsubset{\mathrel{\scalerel*{\kern1\LMpt\usebox{\SqsubsetBOX}}{\subset}}}
\begin{document}
$Z \subset A\Sqsubset B_{A\Sqsubset B_{A\Sqsubset B}}$

\LARGE
$A\Sqsubset B_{A\Sqsubset B_{A\Sqsubset B}}$
\end{document}

在此处输入图片描述

答案4

您可以使用\savebox。但是,如果符号用于下标或上标等,则可能会出现问题。

代码:

\documentclass{article}
\usepackage{tikz}

\newcommand{\SqsubsetMacro}{%
    \kern3pt
    \begin{tikzpicture}
    \draw (0ex,0ex) -- (0ex,1.3ex);
    \draw (0ex,0) -- (1.3ex,0ex);
    \draw (0ex,1.3ex) -- (1.3ex,1.3ex);
    \draw (0.325ex,0.325ex) -- (1.3ex,0.325ex);
    \draw (0.325ex,0.325ex) -- (0.325ex,0.975ex);
    \draw (0.325ex,0.975ex) -- (1.3ex,0.975ex);
    \end{tikzpicture}%
    \kern3pt%
}

\newsavebox{\SqsubsetBox}
\savebox{\SqsubsetBox}{\SqsubsetMacro}
\newcommand{\Sqsubset}{\usebox{\SqsubsetBox}}

\begin{document}

\Sqsubset  

\end{document}

相关内容