我希望在我的数学框中使用自定义符号。它们是非常简单的符号,但我在 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
因此每次调用时都不会重新绘制。然后它变成一个运算符,因此命令\sideset
(amsmath
)将用于放置下标和上标。该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}