如何防止代码列表中出现换行?

如何防止代码列表中出现换行?

我正在添加一个大的 Linux 终端输出作为列表,并希望防止发生这些换行符:

例如

user@pc ~ $ top
PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     
TIME+ COMMAND                                  
19173 user      20   0   26720   1572   1048 R   6.4  0.0   
0:00.01 top                           
    1 root      20   0   33904   3200   1496 S   0.0  0.0   
0:06.67 init   

编辑:工作解决方案

\documentclass{article}
\usepackage{linegoal,listings}
\usepackage{adjustbox}
\lstdefinestyle{Bash}
{
  language=bash,
  breaklines=false,
  showspaces=true,
}
\makeatletter
\def\lst@visiblespace{\lst@ttfamily{\char32} } % <-- hack
\makeatother

\begin{document}
\begin{adjustbox}{width=\textwidth,keepaspectratio}

\begin{lstlisting}[style=Bash, caption={bash output}]
PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                  
19173 user      20   0   26720   1572   1048 R   6.4  0.0   0:00.01 top                           
    1 root      20   0   33904   3200   1496 S   0.0  0.0   0:06.67 init                          
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.01 kthreadd                      
    3 root      20   0       0      0      0 S   0.0  0.0   0:04.00 ksoftirqd/0 
\end{lstlisting}
\end{adjustbox}

\end{document}

答案1

看起来像是listings包中的一个错误,因为除非您明确要求,否则不会产生换行符breaklines=true

此外,如果您使用showspaces=true,则不会产生换行符(但当然,所有空格都可见为␣)。

这让我想到了以下技巧:使用showspaces=true,但将“可见空间”重新定义为空白空间而不是␣。

这是代码:

\documentclass{article}
\usepackage{linegoal,listings}
\lstdefinestyle{Bash}
{
  language=bash,
  breaklines=false,
  showspaces=true,
}
\makeatletter
\def\lst@visiblespace{\lst@ttfamily{\char32} } % <-- hack
\makeatother

\begin{document}

\begin{lstlisting}[style=Bash, caption={bash output}]
PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                  
19173 user      20   0   26720   1572   1048 R   6.4  0.0   0:00.01 top                           
    1 root      20   0   33904   3200   1496 S   0.0  0.0   0:06.67 init                          
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.01 kthreadd                      
    3 root      20   0       0      0      0 S   0.0  0.0   0:04.00 ksoftirqd/0 
\end{lstlisting}
\end{document}

结果:

结果

这种方法可行,但产生的列表对于文本区域来说太宽,并且与右边距重叠。您可以缩小列表中的字体,或更改页面布局等。

相关内容