生成可复制粘贴的 PDF 输出,并带有正确的缩进和列表

生成可复制粘贴的 PDF 输出,并带有正确的缩进和列表

这是一段用于生成 Python 代码的 latex 代码块。我希望能够将其复制并粘贴到 Python 中。

\documentclass{standalone}

\usepackage{listings}             % Include the listings-package
\begin{document}
\lstset{language=Python,
  columns=fullflexible,
  basicstyle=\ttfamily,
  showstringspaces=false
}

\begin{lstlisting}
def test(inputvariable):
    if inputvariable == 4:
        print("The input variable is 4 .")
        print("So I'm giving this response.")
    print("done with if statement.")

test(4)
test(3)
\end{lstlisting}

\end{document}

看起来正确: 在此处输入图片描述 不幸的是,当我复制并粘贴它时,缩进丢失了,而这正是 Python 工作方式的关键。

当我复制/粘贴时,可以显示间距吗?

答案1

无论如何,这实际上不可能以可靠的方式实现。它过于依赖 pdf 查看器。可以使用原始函数插入真实空格\pdffakespace,但只有当我将空格(全局!)映射到 时,缩进才会在 Sumatra 中保留Unicode Character 'FIGURE SPACE' (U+2007),而在 Adob​​e Reader 中它仍然会消失。

\documentclass{article}

\usepackage{listings}             
\usepackage[T1]{fontenc}

\makeatletter
\lst@AddToHook{Init}
    {\def\lst@outputspace{ \pdffakespace}}
\makeatother

\input{glyphtounicode}

% saner but doesn't work
%\pdfglyphtounicode{space}{0020}

% works in sumatra:
\pdfglyphtounicode{space}{2007}

\begin{document}

\lstset{language=Python,
  columns=fullflexible,
  basicstyle=\ttfamily,
  showspaces,
  showstringspaces=false
}


\begin{lstlisting}
def test(inputvariable):
    if inputvariable == 4:
        print("The input variable is 4 .")
        print("So I'm giving this response.")
    print("done with if statement.")

test(4)
test(3)
\end{lstlisting}

\end{document}

相关内容