在 \caption 中使用(重新定义的)宏不起作用,但它在另一个环境中起作用

在 \caption 中使用(重新定义的)宏不起作用,但它在另一个环境中起作用

我的问题是命令\vec{}中的奇怪行为\caption。我使用了这个构造:

\renewcommand{\vec}[1]{\accentset{\rightarrow}{#1}}

看看我的代码:

\documentclass[12pt, a4paper, czech, twoside]{book} 
 \usepackage{amsmath, amsthm, amssymb, amsfonts, amsbsy}  
 \usepackage{accents}        
 \usepackage{fontspec,xltxtra,xunicode,unicode-math} 
    \setmainfont[Mapping=tex-text,Numbers={OldStyle,Proportional}]{Calibri}
    \setsansfont[Mapping=tex-text,Numbers={OldStyle,Proportional}]{Candara}
    \setmonofont[Numbers=OldStyle]{Consolas}        
    \setmathfont{Cambria Math} 
\usepackage{tikz}

\begin{document}

\renewcommand{\vec}[1]{\accentset{\rightarrow}{#1}}

    \begin{figure}[hb!]
        \centering
            \begin{tikzpicture}
              \coordinate (dS) at (2,0.5);
              \draw[->] (dS) ++ (0.25,0.25) -- +(1,0.5) node[right]{$\vec{n}$};
              \draw[->] (dS) ++ (0.25,0.25) -- +(2,1.5) node[right]{$\vec{h}$};
            \end{tikzpicture}
        \label{FYZ:fig_01}
        \caption{vector $\vec{n}$.}   
    \end{figure}

\end{document}

SW:MiKTeX 2.9 64 位最新版本。当我尝试\vectikzpicture环境中使用该命令时,一切正常,但出现错误。我不明白。我做错了什么?

答案1

\accentset使您的命令变得脆弱,因此您需要\protect\vec{n}或使用\DeclareRobustCommand而不是\newcommand

相关内容