问题描述

问题描述

问题描述

对于交互式 Unix shell 使用的教程,我使用了\usepackage{listings}自动breaklines=true将长 shell 命令拆分为多行的选项。

\在交互式 shell 中,通过在命令中以 结束行并点击 来插入换行符<RETURN>,例如:

ls \ <RETURN>
-l

为了用listings包来说明这一点,我想配置它的prebreak选项,以便用 来终止长行\,然后使用包\return中的宏menukeys(它为回车键绘制一个符号)。

然而,尽管我可以获得prebreak使用其他符号(例如\leftarrow),使用\returnbreaks 编译。我怎样才能让它工作?

最小工作示例(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}

相关内容