当我使用 listing 包从我的 LaTeX 文件中导入 C# 代码片段时,我得到了如下输出。
第一行有一个不必要的空白,这是因为 Microsoft (R) Visual Studio 有意添加了 BOM(字节顺序标记)。
我确实想将其从输出中删除而不是从 C# 文件中删除,该怎么做?
这是我的 LaTeX 代码:
\documentclass{article}
\usepackage{listings,xcolor}
\lstset{%
language={[Sharp]C},
backgroundcolor=\color{yellow!20},
basicstyle=\tiny,
keywordstyle=\color{blue},
identifierstyle=\color{magenta},
breaklines=true}
\begin{document}
\lstinputlisting{Program.cs}
\end{document}
答案1
实际上,只有当您使用 OT1 字体时才会出现空格。使用 T1 编码,您会看到由 BOM 的三个八位字节编码的三个字符。假设列表中未使用它们,并且您的主文档是 8 位编码的,您可以用 literate 替换它们:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{listings}
\usepackage{xcolor}
\lstset{%
language={[Sharp]C},
backgroundcolor=\color{yellow!20},
basicstyle=\tiny,
keywordstyle=\color{blue},
identifierstyle=\color{magenta},
breaklines=true}
\lstset{
literate={ï}{}0
{»}{}0
{¿}{}0
}
\begin{document}
\lstinputlisting{test-bom.txt}
\end{document}
答案2
可能这对您来说不是一个可用的解决方案,但使用 lualatex 或 xelatex 而不是 pdflatex 可以解决这个问题。
答案3
我遇到了同样的问题,并找到了一个简单的解决方案。
\usepackage[utf8x]{inputenc}
\lstset{
extendedchars=\true
}
给出具有正确颜色且没有多余空间的输出。