尽管定义和使用不同的语言,但所有列表的样式都相同

尽管定义和使用不同的语言,但所有列表的样式都相同

所以我想使用列表包展示一些 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}

相关内容