外连接符号

外连接符号

在之前一篇题为“外连接符号”的文章中,给出了生成外连接符号的解决方案。

$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修改或使其更强大,以便用于字幕。参见脆弱命令和坚固命令之间有什么区别?

相关内容