如何对一长串数字和连字符进行换行?

如何对一长串数字和连字符进行换行?

我有一个 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}

相关内容