listings: 在加载的文件中设置 tabsize 并使用空格进行缩进不起作用

listings: 在加载的文件中设置 tabsize 并使用空格进行缩进不起作用

我正在写一份报告,其中我想包含一些源代码。为此,我使用listings包直接加载源文件的内容。

由于编码标准,我使用 4 个空格进行缩进。在文档中使用 4 个空格有点多,所以我使用了tabsize=2序言中的选项。经过一些测试,我发现此设置仅影响“真实”制表符的大小。

有没有办法轻松地将缩进大小更改为 2 个空格,同时保持代码不变?我能想到的唯一解决方案是复制所有源文件,用 2 个空格或一个“真实”制表符替换 4 个空格。

以下是 (M)WE:

\documentclass[10pt,a4paper,oneside]{article}
\usepackage[latin1]{inputenc}
\usepackage[english]{babel}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage[T1]{fontenc} %use different encoding (copy from pdf is now possible}
\usepackage{fullpage} %small margins
\usepackage{color}
\definecolor{light-gray}{gray}{0.85}
\usepackage{listings} %sourcecode
\lstset{
    numbers=left,
    breaklines=true,
    backgroundcolor=\color{light-gray},
    tabsize=2,
    basicstyle=\ttfamily,
}

\begin{document}
\section{With 4 leading spaces}
\lstinputlisting[tabsize=2]{code1.mcf}

\section{With `real' tabs}
\lstinputlisting[tabsize=2]{code2.mcf}
\end{document}

文件内容如下code1.mcf(缩进4个空格):

[
    true*.
    foo(false).
    !(foo(true))*.
    bar
]false

的内容code2.mcf使用真正的“制表符”代替 4 个空格。pdflatex 生成的输出如下所示:

在此处输入图片描述

答案1

literate={\ \ }{{\ }}1解决方案是在您的中添加选项\lstset

这样,您就声明用一个空格替换每个出现的两个空格,并且您不需要修改文件。

梅威瑟:

\documentclass[10pt,a4paper,oneside]{article}
\usepackage[latin1]{inputenc}
\usepackage[english]{babel}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage[T1]{fontenc} %use different encoding (copy from pdf is now possible}
\usepackage{fullpage} %small margins
\usepackage{color}
\definecolor{light-gray}{gray}{0.85}
\usepackage{listings} %sourcecode
\lstset{
    numbers=left,
    breaklines=true,
    backgroundcolor=\color{light-gray},
    tabsize=2,
    basicstyle=\ttfamily,
    literate={\ \ }{{\ }}1
}

\begin{document}
\section{With 4 leading spaces}
\lstinputlisting{code1.mcf}

\section{With `real' tabs}
\lstinputlisting{code2.mcf}
\end{document} 

输出:

在此处输入图片描述

相关内容