\caption 中的 \reflectbox

\caption 中的 \reflectbox

我想在 中插入一个 copyleft 符号\caption。以下命令给出这里,在室外工作\caption

\reflectbox{\sffamily{\copyright}}

并做我想做的事。

但是这个:

\caption{A caption \reflectbox{\sffamily{\copyright}}}

导致错误。最让我吃惊的是

\documentclass{article}
\usepackage{graphicx}
\newcommand{\copyleft}{\reflectbox{\sffamily{\copyright}}}

\begin{document}

\begin{figure}
   \caption{A simple caption \copyleft}
\end{figure}
\end{document}

产生错误:

Undefined control sequence.
\Gscale@box #1[#2]#3->\leavevmode \def \Gscale@x
{#1}\def \Gscale@y {#2}\set...
l.9 \caption{A simple caption \copyleft}
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.
[...]

但这个有效!

\documentclass{article}
\usepackage{graphicx}
\newcommand{\copyleft}{\reflectbox{\sffamily{\copyright}}}


\begin{document}

\copyleft

\begin{figure}
    \caption{A simple caption \copyleft}
\end{figure}
\end{document}

有什么想法或建议吗?我只想使用 latex 在标题中包含版权标志。

答案1

\reflectbox是一个“脆弱”的命令(见脆弱命令和坚固命令之间有什么区别?),因此在移动论证中使用(直接或间接)时需要保护。

所以你必须做

\documentclass{article}
\usepackage{graphicx}
\newcommand{\copyleft}{\reflectbox{\sffamily\copyright}}


\begin{document}

\copyleft

\begin{figure}
    \caption{A simple caption \protect\copyleft}
\end{figure}
\end{document}

也就是说,在移动论证(主要是标题和说明)中,用\protect在前面,或者\copyleft

\documentclass{article}
\usepackage{graphicx}
\DeclareRobustCommand{\copyleft}{\reflectbox{\sffamily\copyright}}


\begin{document}

\copyleft

\begin{figure}
    \caption{A simple caption \copyleft}
\end{figure}
\end{document}

另外,请注意\sffamily不带参数:它是一个声明,直到它所在的组结束为止一直有效;框命令(例如 )\reflectbox将其内容构建在组中。带参数的版本是\textsf

相关内容