如何抑制输出中的BOM效应?

如何抑制输出中的BOM效应?

当我使用 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
}

给出具有正确颜色且没有多余空间的输出。

相关内容