如何在源代码的每一行开头插入一个字符?

如何在源代码的每一行开头插入一个字符?

例如,我正在编写一个包含许多源代码的讲座。这些代码存储在多个不同的文件中。我使用清单铸造用于格式化源的包。

我想在某些代码的每一行开头添加字符,例如:

  • Bash shell ($ 或 #)
  • Python 外壳(>>>)
  • 矩阵 (>>)
  • 其他 shell (>)

我尝试了一些解决方案,但都失败了:

但是当我尝试时,这两种解决方案都存在同样的问题:

\begin{foo_environment} 
    \input{bar.txt} 
\end{foo_environment}

在这两种解决方案中换行被忽视

我尝试执行 bash 命令:

sed 's/^/$ /' bar.sh > bar.txt

这在本地有效,但我不能在背页分享乳胶

这是示例代码bar.sh:

cd ..
mount /dev/sda3 /mnt/
cd ~/.ssh/
ll
cd ~
ls -al

结果必须是:

$ cd ..
$ mount /dev/sda3 /mnt/
$ cd ~/.ssh/
$ ll
$ cd ~
$ ls -al

答案1

通过列表,您可以重新定义数字样式:

\documentclass{article}
\usepackage{listings}

\lstset{
  language=tex,
  basicstyle=\footnotesize\ttfamily\selectfont,
  keepspaces=true,
  numbers=left,
  numbersep=5pt,
  numberstyle=\numberwithprompt,
}

\newcommand{\lstprompt}{>>>}
\newcommand\numberwithprompt[1]{\footnotesize\ttfamily\selectfont#1 \lstprompt}


\begin{document}
\begin{lstlisting}
a
b
c
\end{lstlisting}
\end{document}

在此处输入图片描述

答案2

minted.sty用于fancyvrb.sty排版minted环境。 fancyvrb.sty提供一个名为的宏\FancyVerbFormatLine来更改单个行的格式。您可以为您的环境定义自己的宏,并将其插入到密钥mintedformatcom。代码:

\documentclass{article}

\usepackage{minted}

\newcommand{\BashFancyFormatLine}{%
  \def\FancyVerbFormatLine##1{\$\,##1}%
}

\begin{document}

\noindent Some Text
\begin{minted}[formatcom=\BashFancyFormatLine]{bash}
cd ..
mount /dev/sda3 /mnt/
cd ~/.ssh/
ll
cd ~
ls -al
\end{minted}
some text

\end{document}

在此处输入图片描述


您可以使用以下命令将相同的过程应用于外部文件\inputminted

\documentclass{article}

\usepackage{minted,filecontents}

\begin{filecontents*}{bash.sh}
cd ..
mount /dev/sda3 /mnt/
cd ~/.ssh/
ll
cd ~
ls -al
\end{filecontents*}

\newcommand{\BashFancyFormatLine}{%
  \def\FancyVerbFormatLine##1{\$\,##1}%
}

\begin{document}

\noindent Now read the same code from a file:
\inputminted[formatcom=\BashFancyFormatLine]{bash}{bash.sh}

\end{document}

答案3

listings可以连接到行号代码。如果您不在\label代码中输入 s,这种方法是可行的——我从来没有这样做过,甚至不知道您可以这样做——但是如果您这样做了,当您引用行号时,它们后面将跟着您定义的任何提示文本。在这种情况下,请参阅 Ulrike Fischer 的回答。

\lstprompt下面是一个示例,它在第 13 行将“提示”()定义为“>>>”(python 样式),并在第 14 行应用它。

\documentclass{article}
\usepackage{listings}

\lstset{ 
  language=tex,
  basicstyle=\footnotesize\ttfamily\selectfont,
  keepspaces=true,                 
  numbers=left,                    
  numbersep=5pt,                   
  numberstyle=\footnotesize\ttfamily\selectfont\,
} 

\newcommand{\lstprompt}{>>>}
\renewcommand*\thelstnumber{{\the\value{lstnumber}}\lstprompt}
\begin{document}
    \lstinputlisting{lst_test.tex}
\end{document}

输出(使用上面的代码作为测试用例): 上述代码的输出

当然,您可以插入空格或随意调整。以下是没有数字的 $ 符号:

\newcommand{\lstprompt}{\$}
\renewcommand*\thelstnumber{\lstprompt}

bash 风格

相关内容