在之前一篇题为“外连接符号”的文章中,给出了生成外连接符号的解决方案。
$R \leftouterjoin S$
然而,当在标题中使用例如时,此解决方案会产生错误。
有什么解决办法吗?
\documentclass[a4paper,10pt]{article}
\usepackage{latexsym}
% Definition of outer joins
\def\ojoin{\setbox0=\hbox{$\Join$}
\rule[0.10ex]{.3em}{.4pt}\llap{\rule[1.40ex]{.3em}{.4pt}}}
\def\leftouterjoin{\mathrel{\ojoin\mkern-6.5mu\Join}}
\def\rightouterjoin{\mathrel{\Join\mkern-6.5mu\ojoin}}
\def\fullouterjoin{\mathrel{\ojoin\mkern-6.5mu\Join\mkern-6.5mu\ojoin}}
\begin{document}
The outer join symbols work great in text: $R\rightouterjoin S$, $R\leftouterjoin S$, $R\fullouterjoin S$.
However, it generates the error \verb+Argument of \@caption has an extra }.+ when used in captions.
\begin{figure}
\centering
This a figure
\caption{$R\rightouterjoin S$}
\end{figure}
\end{document}
答案1
如果你定义\ojoin
为健壮那么就没有问题:
\documentclass[a4paper,10pt]{article}
\usepackage{latexsym}
% Definition of outer joins
\DeclareRobustCommand{\ojoin}{\rule[0.10ex]{.3em}{.4pt}\llap{\rule[1.40ex]{.3em}{.4pt}}}
\newcommand{\leftouterjoin}{\mathrel{\ojoin\mkern-6.5mu\Join}}
\newcommand{\rightouterjoin}{\mathrel{\Join\mkern-6.5mu\ojoin}}
\newcommand{\fullouterjoin}{\mathrel{\ojoin\mkern-6.5mu\Join\mkern-6.5mu\ojoin}}
\begin{document}
\show\ojoin
The outer join symbols work great in text: $R\rightouterjoin S$, $R\leftouterjoin S$, $R\fullouterjoin S$.
However, it generates the error \verb+Argument of \@caption has an extra }.+ when used in captions.
\begin{figure}
\centering
This a figure
\caption{$R\rightouterjoin S$}
\end{figure}
\end{document}
问题是,这\rule
是 LaTeX 中的一个脆弱命令,需要进行\protect
修改或使其更强大,以便用于字幕。参见脆弱命令和坚固命令之间有什么区别?