列表中的幻像空间

列表中的幻像空间

我在 PDF 文档中遇到了 SQL 代码问题。对于代码表示,我使用了listings包。一切都很完美,直到我从创建的 PDF 文档中复制粘贴该代码。我在字符串类型中得到了一些幻像空格。当人们阅读我的 PDF 文档时,他们需要复制粘贴一些代码。从视觉上看,代码在 PDF 中看起来不错,但是当我尝试将代码复制粘贴到 NotePad 或任何其他编辑器时,我在字符串中得到了一些意外的空格。在下面的示例中,当我复制粘贴我的 SQL 代码时,得到的不是:

SELECT ST_Area(the_geom) 
 FROM katastar 
 WHERE kc_broj = '1414';

我明白了

SELECT ST_Area(the_geom) 
 FROM katastar 
 WHERE kc_broj = ' 1414 ';

查看引号之间的空格。

\documentclass{article}
\usepackage{listings,xcolor}

\lstset{
 tabsize=4,
        basicstyle=\scriptsize,
        %upquote=false,
        aboveskip=\baselineskip,
        columns=fixed,
        showstringspaces=false,
        extendedchars=true,
        breaklines=true,
        prebreak = \raisebox{0ex}[0ex][0ex]{\ensuremath{\hookleftarrow}},
 frame=single,
        showtabs=false,
        showspaces=false,
        identifierstyle=\ttfamily,
        keywordstyle=\color[rgb]{0,0,1},
        commentstyle=\color[rgb]{0.133,0.545,0.133},
        stringstyle=\color[rgb]{0.627,0.126,0.941},
 language=SQL
}

\begin{document}
\begin{lstlisting}
SELECT ST_Area(the_geom) 
 FROM katastar 
 WHERE kc_broj = '1414';
\end{lstlisting}
\end{document}

答案1

此行为是由 引起的\lstset{columns=fixed}。更改为columns=flexiblecolumns=fullflexible应可消除此问题。

答案2

您始终可以提供 SQL 代码作为“附件“转换为 PDF。当然,这可能只适用于 Acrobat Reader...

答案3

我正在寻找有关此问题的主题来写下我在使用字体系列时发现的内容。

我在我的示例中使用了 columns=fullflexible 选项,但它引发了其他问题,如果保留这些选项,问题将非常严重。例如,我在 lstlisting 环境中有以下代码。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%   Package: ExampleMyBoxed               %
%                                         %
%   version: 0-1 (beta)                   %
%   Author: Kostis Leledakis              %
%                                         %
%   License: Do anything you want         %
%                                         %
%   Date: 01/Jul/2017                     %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\NeedsTeXFormat{LaTeX2e}[1995/05/16]

上述代码与选项 columns=fullflexible 一起给出以下结果:

在此处输入图片描述

但如果我删除该选项并添加选项

basicstyle=\fontfamily{pcr}\selectfont,

那么上述问题就消失了来自 pdf我可以从 pdf 复制粘贴到文本编辑器。pdf 中的结果是:

在此处输入图片描述

当然,上面的文本不会连同空格一起复制到文本编辑器中...我们必须手动修复它...但其余文本将不包含额外的空格(它将包含较少的空格,但也许你也可以通过将我的答案与@PhilippeGoutet 的答案结合起来来修复它这里我也会在那里发表评论,因为他的“幻影空间”方法在我的(linux)pdf 阅读器上不起作用)。

无论如何,即使你找到了添加空格的解决方案,即使你没有找到并且丢失了一些空格..设置:

basicstyle=\fontfamily{pcr}\selectfont

删除多余的空格而不需要全灵活的列......

答案4

我可以通过设置不同的等宽字体来解决此问题:

\newfontfamily\listingsfont[Scale=.7]{DejaVu Sans Mono}
\lstset{basicstyle=\listingsfont}

(这或多或少是@Jan Hlavacek 在他的评论中所描述的)

相关内容