二维码在标题内不起作用

二维码在标题内不起作用

我想在 a\qrcode内部使用 a \caption,例如:

% !TeX program = lualatex 
\documentclass{scrartcl} 
\usepackage{polyglossia}\setdefaultlanguage{german} 
\usepackage{graphicx, qrcode} 
 
\begin{document} 

\begin{figure}
%\includegraphics[width=\linewidth]{02-794.jpg}
\caption{\qrcode{https://www.scinexx.de/fotos/schiffsspuren-in-den-wolken/} }
\end{figure}
    
\end{document}

\qrcode似乎只能在…之外工作\caption。上面的代码会产生错误:

! Argument of \@caption has an extra }.
<inserted text> 
\par 
l.12 ...exx.de/fotos/schiffsspuren-in-den-wolken/} }

这个错误是什么意思?我该如何解决?

答案1

谢谢 daleif、Skillmon 和 egreg。虽然您的\protect解决方案是针对二维码的,但该二维码链接到最多两个字符的链接,例如:\caption{\protect\qrcode{https://ab.com}}它不适用于超过两个字符的链接……

针对这些情况的解决方法可能是:

\documentclass{standalone} 
\usepackage{qrcode}
\begin{document}
\qrcode{https://tex.stackexchange.com}
\end{document}

结合:

\caption{\includegraphics{standalone_qrcode.pdf}}

答案2

正如评论中提到的,您需要\protect二维码,这样 LaTeX 才不会尝试将宏的扩展写入\qrcode辅助文件。

但这让人不禁想知道为什么 LaTeX 会将标题写入辅助文件。答案是,如果您有一个\listoffigures,那么 TeX 可以在那里重复标题。但如果二维码与其标题图像相关,那么在没有标题图像的情况下将二维码放在图形列表中会很奇怪。

LaTeX 提供了一个解决方案:该\caption命令有一个可选参数,用于指定应出现在图形列表中的内容(注释中也提到了)。这更常用于长标题,因此您有\caption[short caption that should appear in the list of figures which doesn't have enough space for the full text of the longer caption that appears in the text]{long caption}。 (可能应该是\caption[short caption]{long caption that takes too much space for the list of figures}。)我们可以利用这个想法在图形列表中获得一个没有二维码的标题版本,并在正文中获得一个标题版本。事实证明,正文中的标题不需要编辑\protect

\documentclass{article}
\usepackage{qrcode} 

\begin{document} 

\listoffigures

\clearpage

\begin{figure}
\caption{My caption says \protect\qrcode{https://tex.stackexchange.com}}
\end{figure}

\begin{figure}
\caption[My caption says qrcode]{My caption says \qrcode{https://tex.stackexchange.com}}
\end{figure}
    
\end{document}

相关内容