所以我想使用列表包展示一些 python、bash 和终端输出。
我为 listing 包搜索了一些 bash 和 python 语言定义,一开始效果很好。现在我想添加一些终端输出,但我发现所有列表都只使用最后定义的语言,无论我为给定列表手动定义了什么语言。
我在 overleaf 上编写了一个基本示例:
https://www.overleaf.com/18688751pxczqpkbbkyg#/70340370/
问题是,这个例子在 overleaf 上并没有给出与我在本地文档上遇到的结果相同的结果。
我做错了什么?我只想为 python 和 bash 脚本添加一些颜色突出显示,并为终端输出添加一些空白代码。
编辑:这是代码:
\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{color}
\usepackage[procnames]{listings}
\begin{filecontents}{00_python.py}
# Image processing
from PIL import Image
import numpy as np
image_dimensions = 224
# Image paths
train_dir = "/path/to/train"
validation_dir = "/path/to/train"
\end{filecontents}
\begin{filecontents}{00_terminal.txt}
test@ubuntu-vm:~/Desktop$ time ./00_preprocess_and_sort.sh
Getting variables...Done
input dir: /home/test/new/00_data/00_all
sorted dir: /home/test/new/00_data/01_sorted
backup dir (attr.): /home/test/new/00_data/00_all_backup_attributes
backup dir: /home/test/new/00_data/00_all_backup
id dir: /home/test/new/00_data/03_ids
stats dir: /home/test/new/00_data/04_statistics
\end{filecontents}
\begin{filecontents}{00_bash.sh}
#!/ bin/ bash
printf " Getting variables ... "
INPUT_DIR =~/ new /00 _data /00 _all
ID_DIR =~/ new /00 _data /03 _ids
SORTED_DIR =~/ new /00 _data /01 _sorted
BACKUP_DIR_ATTRIBUTES =~/ new /00 _data /00 _all_backup_attributes
BACKUP_DIR =~/ new /00 _data /00 _all_backup
STATISTIC_DIR =~/ new /00 _data /04 _statistics
\end{filecontents}
\definecolor{keywords}{RGB}{255,0,90}
\definecolor{comments}{RGB}{0,0,113}
\definecolor{red}{RGB}{160,0,0}
\definecolor{green}{RGB}{0,150,0}
\lstset{language=python,
basicstyle=\itshape\small,
keywordstyle=\color{keywords},
commentstyle=\color{comments},
stringstyle=\color{red},
showstringspaces=false,
identifierstyle=\color{green},
procnamekeys={def,class}
}
\lstset{language=bash,
basicstyle=\bfseries,
showstringspaces=false,
commentstyle=\color{red},
keywordstyle=\color{blue}
}
\begin{document}
\lstinputlisting[language=bash, breaklines=true, title={Bash script}, frame=tb]{00_bash.sh}
\lstinputlisting[language=python, breaklines=true, title={Python code}, frame=tb]{00_python.py}
\lstinputlisting[breaklines=true, title={Terminal output}, frame=tb]{00_terminal.txt}
\end{document}
答案1
正如 moewe 在评论中提到的,我需要从\lstset
(更改全局列表设置)更改为以\lstdefinestyle
创建不同的样式。
例如,从
\lstset{language=bash,
basicstyle=\bfseries,
showstringspaces=false,
commentstyle=\color{red},
keywordstyle=\color{blue}
}
...
\lstinputlisting[language=bash, breaklines=true, title={Bash script}, frame=tb]{00_bash.sh}
到
\lstdefinestyle{bashstyle}{language=bash,
basicstyle=\bfseries,
showstringspaces=false,
commentstyle=\color{red},
keywordstyle=\color{blue}
}
...
\lstinputlisting[style=bashstyle, breaklines=true, title={Bash script}, frame=tb]{00_bash.sh}