我正在添加一个大的 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}
结果:
这种方法可行,但产生的列表对于文本区域来说太宽,并且与右边距重叠。您可以缩小列表中的字体,或更改页面布局等。