例如,我正在编写一个包含许多源代码的讲座。这些代码存储在多个不同的文件中。我使用清单和铸造用于格式化源的包。
我想在某些代码的每一行开头添加字符,例如:
- 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
来更改单个行的格式。您可以为您的环境定义自己的宏,并将其插入到密钥minted
中formatcom
。代码:
\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}