最近写论文时,需要用到一个填充的等边三角形作为符号标记,latex本身的\blacktriangle 所呈现的却是等腰三角形,而\triangle只是未填充的等边三角形。网上查阅资料,发现了tikz包可以用于绘制一些符号,在导言区定义符号,并在实际始终在利用对符号的命名直接调用。
于是,定义了一个填充三角形,如下
\newcommand{\brtri}{
\begin{tikzpicture}[scale=0.7]
\draw[line width=0.1pt] (0em,0em) -- (0.5em,0.866em) --(1em,0em) -- (0em,0em);
\fill (0em,0em) -- (0.5em,0.866em) --(1em,0em) -- (0em,0em);
\end{tikzpicture}}
但是在实际使用时,将该符号置于图片的caption中,却出现了问题,编译不能通过,报错#
! Missing \endcsname inserted
#。对于此报错信息,普遍给出的答案是缺少“}”,认真检查了符号定义部分(定义该符号前正常编译),确实未找到缺少的大括号。
Google上找了一些网页,发现类似报错很多,但是原因却各不相同,同样未找到与我遇到问题一致的。最后考虑是否是\newcommand命令与\caption存在冲突,果然在google
的一个Group中找到了解决方案(点击打开链接)。
解决方案有二,其一为在定义符号时, 用\DeclareRobustCommand替代\newcommand;其二是在调用\brtri时,使用\protect\brtri的形式。