1.问题的提出
前几天在使用LaTex写数学公式的时候发现需要插入自定义的符号,例如使用一个正方形中放置一个z表示z域运算集,显然这个符号是在标准宏包里面没有的,所以需要用户自己定制这个符号。
2.自定义用户符号
这里使用Tikz-PGF来绘制用户符号,首先先使用tikz绘制出符号,代码如下
我是$Z$运算集
\begin{tikzpicture}
\draw (0,0) -- (0em,1em) -- (1em,1em) -- (1em,0) -- (0,0);
\node at (0.5em,0.5em) {$Z$};
\end{tikzpicture}
但是我为什么没有对齐?
效果如下:
可以看到,该符号虽然绘制出来了,但是根本没有与两边的文字对齐,此时应该在tikzpicture后面加上[baseline]基线选项,同时微调一下y坐标,让tikz把基线作为绘制的参考位置,如果想了解基线,请阅读排版相关的资料。修改后的代码如下
\begin{equation}
F(z)\in
\begin{tikzpicture}[baseline]
\draw (0,-0.2em) -- (0em,0.8em) -- (1em,0.8em) -- (1em,-0.2em) -- (0,-0.2em);
\node at (0.5em,0.3em) {$Z$};
\end{tikzpicture}
\end{equation}
效果如下,完美!
接下来我们将其定义为一个命令,以便后面可以愉快的使用
\newcommand{\MyFz}{
\begin{tikzpicture}[baseline]
\draw (0,-0.2em) -- (0em,0.8em) -- (1em,0.8em) -- (1em,-0.2em) -- (0,-0.2em);
\node at (0.5em,0.3em) {$Z$};
\end{tikzpicture}
}
在其他地方调用
\begin{equation}
F(z+1)\in \MyFz,
F(z+2)\in \MyFz,
F(z+N)\in \MyFz
\end{equation}
效果如下
哈哈,妈妈以后再也不用担心数学符号库中没有我想要的符号了(自力更生,丰衣足食!)。完了吗,还不够,我想要里面的z换成任意给定的字母或符号,简单,把命令改为带有参数的命令即可。
最终版:
\newcommand{\MyFz}[1]{
\begin{tikzpicture}[baseline]
\draw (0,-0.2em) -- (0em,0.8em) -- (1em,0.8em) -- (1em,-0.2em) -- (0,-0.2em);
\node at (0.5em,0.3em) {$#1$};
\end{tikzpicture}
}
在其他地方使用
\begin{equation}
F(z+1)\in \MyFz{R},
F(z+2)\in \MyFz{H},
F(z+N)\in \MyFz{K}
\end{equation}
效果如下,很好
经过测试发下,使用tikz-pgf会增加编译时间,为了解决这个问题,可以事先把符号制作成pdf图片,然后插入到文本中当做符号使用。这样做同样会涉及位置对齐问题,在下一篇LaTex博客中将会介绍使用插入pdf图片的方式来定制自己的各种符号,happy LaTex!