如何高效添加简单符号以供重复使用

如何高效添加简单符号以供重复使用

我希望在我的数学框中使用自定义符号。它们是非常简单的符号,但我在 LaTeX 文档中经常使用它们(到目前为止,我已经使用了至少 150 次)。我已设法通过定义一个新命令将它们放入文档中,使用 导入\includegraphics我使用 保存的 2KB PDF Tikz,但当我调用此命令 150 次时,文件的编译速度太慢了。

这些符号很简单,但我需要自由地在它们周围放置更多的数学符号,如下所示(顺便说一句,我想知道是否有办法不使它们b下垂):

在此处输入图片描述

每个字母都有一个参数。

可以看出,符号本身非常简单,最多三行。我简直不敢相信没有更快的方法来编译它们。我将它们写入 Tikz 中,如下所示(此示例是上图中没有的 X):

\documentclass[tikz]{standalone}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}%
    \draw (-1ex,-2ex) -- (1ex,2ex);%
    \draw (-1ex,2ex) -- (1ex,-2ex);%
\end{tikzpicture}%
\end{document}

我将其保存为 PDF,最终大小为 2KB,然后.tex使用(此示例为 K)将其导入到我的主文件中:

\newcommand{\knot}[6][1]{%
\prescript{#4}{#2}{\vcenter{\hbox{
\includegraphics[page=1, scale = #1]{K-notation/knot.pdf}
\newcommand{\starcup}{$\sqcup$\kern-0.58em{$\star$}}
}}^{#5}_{#3}} #6
}

% Then, inside math text (after \begin{document}, of course):
\knot{\Omega}{\boldsymbol{\eta\cdot}}{a}{b}{c}

我在这个论坛上找到了很多将这种自定义字符导入 LaTeX 的方法,但没有一种方法可以更快。尽管这已经比Tikz每次使用绘制符号快得多,但对于这么简单的符号来说,还是需要太长时间。

答案1

以下是(我认为)可以满足您的要求的宏。每个符号都是tikzpicture存储在中的,\sbox因此每次调用时都不会重新绘制。然后它变成一个运算符,因此命令\sidesetamsmath)将用于放置下标和上标。该scalerel包用于像 一样缩放和定位符号\sum

两个全局参数可以根据您的喜好进行调整。首先,\symscale会影响符号中的线条粗细:数字越大,线条越细。其次,\trimlen控制符号与其脚本之间的水平间距。

在此处输入图片描述

\documentclass{article}

\usepackage{tikz, scalerel, amsmath}

\newcommand{\symscale}{.25}
\newcommand{\trimlen}{1pt}

\newsavebox{\Kforward}
\sbox{\Kforward}{\tikz[scale=\symscale, trim left=-\trimlen, trim right=\symscale cm+\trimlen]
    {\draw(0,0)--(0,2)(1,2)--(0,1)--(1,0);}}
\DeclareMathOperator{\KSYM}{\scalerel*{\usebox{\Kforward}}{\sum}}
\newcommand{\Ksym}[4]{\sideset{^{#3}_{#1}}{^{#4}_{#2}}\KSYM}

\newsavebox{\Kbackward}
\sbox{\Kbackward}{\tikz[scale=\symscale, trim left=-\trimlen, trim right=\symscale cm+\trimlen]
    {\draw(1,0)--(1,2)(0,2)--(1,1)--(0,0);}}
\DeclareMathOperator{\KBSYM}{\scalerel*{\usebox{\Kbackward}}{\sum}}
\newcommand{\Kbsym}[4]{\sideset{^{#3}_{#1}}{^{#4}_{#2}}\KBSYM}

\newsavebox{\Lforward}
\sbox{\Lforward}{\tikz[scale=\symscale, trim left=-\trimlen, trim right=\symscale cm+\trimlen]
    {\draw(0,2)--(1,0)(0,0)--(.5,1);}}
\DeclareMathOperator{\LSYM}{\scalerel*{\usebox{\Lforward}}{\sum}}
\newcommand{\Lsym}[3]{\sideset{^{#3}_{#1}}{_{#2}}\LSYM}

\newsavebox{\Lbackward}
\sbox{\Lbackward}{\tikz[scale=\symscale, trim left=-\trimlen, trim right=\symscale cm+\trimlen]
    {\draw(1,2)--(0,0)(1,0)--(.5,1);}}
\DeclareMathOperator{\LBSYM}{\scalerel*{\usebox{\Lbackward}}{\sum}}
\newcommand{\Lbsym}[3]{\sideset{_{#1}}{^{#3}_{#2}}\LBSYM}

\newsavebox{\Xsymbol}
\sbox{\Xsymbol}{\tikz[scale=\symscale, trim left=-\trimlen, trim right=\symscale cm+\trimlen]
    {\draw(0,0)--(1,2)(0,2)--(1,0);}}
\DeclareMathOperator{\XSYM}{\scalerel*{\usebox{\Xsymbol}}{\sum}}
\newcommand{\Xsym}[4]{\sideset{^{#3}_{#1}}{^{#4}_{#2}}\XSYM}

\begin{document}

\[
\Ksym{\Omega}{\boldsymbol{\eta\cdot}}{\,a}{b}c\qquad
d\Kbsym{\Omega}{\boldsymbol{\eta\cdot}}{\,a}{b}\qquad
d\Lsym{\Omega}{\boldsymbol{\eta\cdot}}{\,a}c\qquad
d\Lbsym{\Omega}{\boldsymbol{\eta\cdot}}{b}c\qquad
d\Xsym{\Omega}{\boldsymbol{\eta\cdot}}{\,a}{b}c
\]

\end{document}

相关内容