我有一个 cls 文件,其中包含源代码的定义:
\lstnewenvironment{code}[1][]
{
\lstset{
basicstyle=\ttfamily\footnotesize,
breaklines=true,
frame=lines,
extendedchars=true,
captionpos=b,
caption=#1
}
}
{
}
我在代码列表和换行方面遇到了问题,但仅限于包含长度超过行宽且仅由数字和连字符组成的字符串的行。其他长字符串换行正常。
对我来说,突出此问题的长字符串的具体示例是尝试在窄列中显示“SID”值。其中一个示例如下所示:
# wbinfo --name-to-sid myuser
S-1-5-21-4099219672-1275272411-291422405-1104 SID_USER (1)
字符串“1-5-21-4099219672-1275272411-291422405-1104”太宽,无法放入窄列中,但它没有被拆分。再举一个(极长的行)示例:
12345-word-67890-word-09876-word-54321-word-12345-word-67890-word-09876-word-54321-word-12345-word-67890-word-09876-word-54321-word-12345-word-67890-word-09876-word-54321-word-12345-word-67890-word-12345-67890-09876-54321-12345-67890-09876-54321-12345-67890-09876-54321-word-54321-word-12345-word-67890-word-09876-word-54321-word-12345-word-67890-word-09876-word-54321-word-12345-word-67890-word-09876-word-54321
必要时,在字母和其后的连字符之间进行拆分。仅由数字和连字符组成的子字符串无论长度如何都不会被d
拆分word
。
因此,总而言之,只有当行包含非数字字符时,换行才有效。
我想要的是让它在连字符处断开(就像它所做的那样),但总是这样做,而不仅仅是在连字符前面有一个字母时才这样做。
答案1
您可以通过literate
将其转变-
为可自由支配的方法来打破这一局面:
\lstset{literate={-}{{-\allowbreak}}{1} }
或允许休息-
,0
并且1
\lstset{literate={-}{{-\allowbreak}}{1}
{0}{{0\allowbreak}}{1}
{1}{{1\allowbreak}}{1} }
如果您愿意,可以通过扩展模式来允许其他数字中断。格式为
{character sequence}{{replacement}}{length}
注意 周围的额外括号replacement
。为了便于阅读,多个这样的序列可以用空格或换行符分隔。
第一个例子的代码
\documentclass[twocolumn]{article}
\usepackage{listings}
\lstnewenvironment{code}[1][]
{
\lstset{
basicstyle=\ttfamily\footnotesize,
breaklines=true,
frame=lines,
extendedchars=true,
captionpos=b,
caption=#1,
literate={-}{{-\allowbreak}}{1}
}
}
{
}
\begin{document}
\begin{code}
# wbinfo --name-to-sid myuser
S-1-5-21-4099219672-1275272411-291422405-1104 SID_USER (1)
\end{code}
\end{document}
第二个示例的代码
\documentclass[twocolumn]{article}
\usepackage{listings}
\lstnewenvironment{code}[1][]
{
\lstset{
basicstyle=\ttfamily\footnotesize,
breaklines=true,
frame=lines,
extendedchars=true,
captionpos=b,
caption=#1,
literate={-}{{-\allowbreak}}{1}
{0}{{0\allowbreak}}{1}
{1}{{1\allowbreak}}{1}
}
}
{
}
\begin{document}
\begin{code}
# wbinfo --name-to-sid myuser
S-1-5-21-4099219672-1275272411-291422405-1104 SID_USER (1)
\end{code}
\end{document}