如何在列表中添加方括号作为标题?我尝试将标题放在“{}”内,但输出结果很奇怪。
\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}
,然后你会得到: