错误: \newcommand{...} 的参数有一个额外的 }

错误: \newcommand{...} 的参数有一个额外的 }

我正在尝试创建一个新命令来帮助格式化图片列表的条目。参数 1 应该是可选的,并包含访问源的日期,参数 2 只是我想在图片列表中显示的图的标题,参数 3 是指向图像源的超链接。我希望来源和日期仅显示在图片列表中,而不是实际图像下方。我在序言中写道:

\newcommand{\lof}[3][]{
\textbf{#2}
\linebreak
{\scriptsize #3 #1}
}

这是一些图形的标题:

\caption[
\lof[(Accessed on 02.01.2019)]
{Basic neural network with three layers}
{\url{https://commons.wikimedia.org/wiki/File:Artificial_neural_network.svg}}
]
{Basic neural network with three layers}

请注意,我希望能够声明该图像是我自己的,在这种情况下应该省略超链接和日期。

\caption[
{Basic neural network with three layers}
{Made by the author.}
]
{Basic neural network with three layers}

这给了我以下错误:

! Argument of \\lof has an extra }.

但是,如果我没有弄错的话,括号应该是匹配的。我读到过一些“脆弱”命令,使用它们会导致和我收到的相同的错误消息。 \url{} 可能是脆弱的命令吗?还是我以某种方式弄乱了命令定义?

编辑

以下代码显示了可能与问题相关的所有内容。如果我从代码中删除这些部分,LaTeX 文档就会编译。

\documentclass{article}
\usepackage{wrapfig,graphicx,amsmath,hyperref}

\newcommand{\lof}[3][]{\textbf{#2}\newline {\scriptsize #3 #1}}
\begin{document}

 \listoffigures

\begin{wrapfigure}{r}{0.25\textwidth} 
\centering 
\includegraphics[width=0.25\textwidth]{example-image}
\caption[ {\lof[(Accessed on 02.01.2019)] 
{Basic neural network with three layers}
{\url{https://commons.wikimedia.org/wiki/File:Artificial_neural_network.svg}}} ] 
{Basic neural network with three layers}
\label{fig:nn}
\end{wrapfigure}

\begin{wrapfigure}{h}{0.5\textwidth}
\centering
\includegraphics[width=0.5\textwidth]{example-image}
\caption[{\lof{$\boldsymbol{\sigma (x)}$, the sigmoid function}
{Created by the author}}]
{$\sigma (x)$, the sigmoid function}
\label{fig:sigmoid}
\end{wrapfigure} 

\end{document}

答案1

我没有收到任何错误,但是您的输入非常尴尬并且容易出错。

我建议定义一个新的\xcaption命令,以尽量减少负担。

\documentclass{article}
\usepackage{xparse}
\usepackage{amsmath}
\usepackage{wrapfig}
\usepackage{graphicx}
\usepackage{hyperref}

\usepackage{kantlipsum}

\NewDocumentCommand{\xcaption}{O{#2}mmo}{%
  \caption[\lof{#1}{#3\IfValueT{#4}{ #4}}]{#2}%
}
\NewDocumentCommand{\lof}{mm}{%
  {\boldmath\textbf{#1}}\newline
  {\scriptsize #2}%
}

\begin{document}

\listoffigures

\begin{wrapfigure}{r}{0.25\textwidth} 
\centering 
\includegraphics[width=0.25\textwidth]{example-image}
\xcaption
  {Basic neural network with three layers}
  {\url{https://commons.wikimedia.org/wiki/File:Artificial_neural_network.svg}}
  [(Accessed on 02.01.2019)]
\label{fig:nn}
\end{wrapfigure}

\kant[1]

\begin{wrapfigure}{h}{0.5\textwidth}
\centering
\includegraphics[width=0.5\textwidth]{example-image}
\xcaption
  [Short caption with $\sigma(x)$]
  {$\sigma (x)$, the sigmoid function}
  {Created by the author}
\label{fig:sigmoid}
\end{wrapfigure} 

\kant[1]

\end{document}

语法是

\xcaption
  [<optional caption for the lof>]
  {<main caption>}
  {<attribution>}
  [<optional info>]

我添加了一个可选标题的示例,同时展示了如何在不明确添加的情况下获得粗体数学\boldsymbol

\lof命令仅起辅助作用,不应在文档中真正使用。

在此处输入图片描述

相关内容