列表标题中的方括号

列表标题中的方括号

如何在列表中添加方括号作为标题?我尝试将标题放在“{}”内,但输出结果很奇怪。

\documentclass{article}

\usepackage{listings}

\begin{document}
    \begin{lstlisting}[caption={Algorithm [1] - example}]
    example
    \end{lstlisting}
\end{document}

答案1

\begin{lstlisting}[caption={Algorithm \unexpanded{[1]} - example}]

对我有用。或者正如 Manuel 所说:

\begin{lstlisting}[caption={Algorithm {[1]} - example}]

答案2

\lstKV@OptArg我认为问题是由于listings-package 的机制定义方式造成的:

使用列表 2020/03/24 版本 1.8d,MWE

\documentclass{article}

\usepackage{listings}

\begin{document}
    \begin{lstlisting}[caption={Algorithm [1] - example}]
    example
    \end{lstlisting}
\end{document}

输出结果如下:

在此处输入图片描述

caption-key 定义如下:

3373 \lst@Key{caption}\relax{\lstKV@OptArg[{#1}]{#1}%
3374     {\def\lst@caption{##2}\def\lst@@caption{##1}}%
3375     \let\lst@title\@empty}

机制\lstKV@OptArg定义如下:

431 \def\lstKV@OptArg[#1]#2#3{%
432     \gdef\@gtempa[##1]##2{#3}\lstKV@OptArg@{#1}#2\@}
433 \def\lstKV@OptArg@#1{\@ifnextchar[\lstKV@OptArg@@{\lstKV@OptArg@@[#1]}}
434 \def\lstKV@OptArg@@[#1]#2\@{\@gtempa[#1]{#2}}

\lstKV@OptArg@和都\lstKV@OptArg@@将参数作为]-delimited 参数传递给其他宏,而不考虑这些参数的大小写以及是否包含该分隔符,这在执行这些其他宏时会导致参数分隔符的错误匹配。

\lstKV@OptArg@如果通过将和\lstKV@OptArg@@传递]嵌套在之间的分隔参数考虑在内{..},就像在示例中那样

\documentclass{article}

\usepackage{listings}
\makeatletter
\def\lstKV@OptArg@#1{\@ifnextchar[\lstKV@OptArg@@{\lstKV@OptArg@@[{#1}]}}%
\def\lstKV@OptArg@@[#1]#2\@{\@gtempa[{#1}]{#2}}%
\makeatother

\begin{document}
    \begin{lstlisting}[caption={Algorithm [1] - example}]
    example
    \end{lstlisting}
\end{document}

,然后你会得到:

在此处输入图片描述

相关内容