我遇到一个问题,如果启用了自动换行功能,列表标题中的自动连字符将不起作用。如果我设置breaklines=false
或captionpos=t
,它就会起作用,这很奇怪。有解决方法吗?我想在底部有标题,我需要自动换行。
\documentclass{article}
\usepackage[english]{babel}
\usepackage{listings}
\lstset{
breaklines=true,
captionpos=b
}
\begin{document}
\begin{lstlisting}[caption={information information information information information information information}]
A = B
C = D
\end{lstlisting}
\end{document}
captionpos=b
(错误的):
captionpos=t
(正确的):
答案1
问题在于这条线
\hbadness\@M \pretolerance\@M
和设置的lstmisc
宏\lst@AddToHook{Init}
前列表内容带有breaklines=true
。带有captionpos=t
不属于标题,但带有captionpos=b
属于标题。它可以防止连字符。一个简单的修复方法是重置\pretolerance
:
\documentclass{article}
\usepackage[english]{babel}
\usepackage{listings}
\lstset{
breaklines=true,
}
\begin{document}
\begin{lstlisting}[caption=information information information information information information information,captionpos=t]
A = B
C = D
\end{lstlisting}
\begin{lstlisting}[caption={\pretolerance=100 information information information information
information information information},captionpos=b]
A = B
C = D
\end{lstlisting}
\end{document}
更好的解决方案是重置里面的值\lst@MakeCaption
,并应将其报告给当前的维护者listings
。