我正在写一份报告,其中我想包含一些源代码。为此,我使用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}
输出: