问题描述
对于交互式 Unix shell 使用的教程,我使用了\usepackage{listings}
自动breaklines=true
将长 shell 命令拆分为多行的选项。
\
在交互式 shell 中,通过在命令中以 结束行并点击 来插入换行符<RETURN>
,例如:
ls \ <RETURN>
-l
为了用listings
包来说明这一点,我想配置它的prebreak
选项,以便用 来终止长行\
,然后使用包\return
中的宏menukeys
(它为回车键绘制一个符号)。
然而,尽管我可以获得prebreak
使用其他符号(例如\leftarrow
),使用\return
breaks 编译。我怎样才能让它工作?
最小工作示例(MWE)
\documentclass{article}
\usepackage{menukeys}% Provides \return (return key symbol)
\usepackage{listings}%
\lstdefinestyle{shell}{
breaklines=true,%
%
% Backslash only works, but I want to append \return from \usepackage{menukeys} to it
prebreak=\char`\\,%
%
% This works, but uses the wrong symbol.
%prebreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\leftarrow}},
% Source:
% http://www.bollchen.de/blog/2011/04/good-looking-line-breaks-with-the-listings-package/
%
% TODO: Various strategies for using \return all break compilation
%prebreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\return}},%
%prebreak=\raisebox{0ex}[0ex][0ex]{\return},%
%prebreak={\return},%
}
\begin{document}
\begin{lstlisting}[style=shell]
sleep 1; sleep 2; sleep 3; sleep 4; sleep 5; sleep 6; sleep 7; sleep 8; sleep 9; sleep 10
\end{lstlisting}
\end{document}
答案1
您的代码(不带 return)对我来说不起作用:您的 prebreak 导致出现双引号。使用\textbackslash
相反的方法有效。
关于\return
:我建议将返回符号排版到一个框中,保存它,然后只使用预先排版的符号。
\usepackage{menukeys}% Provides \return (return key symbol)
\usepackage{listings}%
\newsavebox\RET
\sbox\RET{\return}
\lstdefinestyle{shell}{
breaklines=true,%
prebreak=\textbackslash\usebox\RET
}
\documentclass{article}
\usepackage{menukeys}% Provides \return (return key symbol)
\usepackage{listings}%
\newsavebox\RET
\sbox\RET{\return}
\lstdefinestyle{shell}{
breaklines=true,%
prebreak=\textbackslash\usebox\RET
}
\begin{document}
\begin{lstlisting}[style=shell]
sleep 1; sleep 2; sleep 3; sleep 4; sleep 5; sleep 6; sleep 7; sleep 8; sleep 9; sleep 10
\end{lstlisting}
\end{document}