如何从 lstlistings 复制/粘贴?

如何从 lstlistings 复制/粘贴?

我正在尝试在 LaTeX 文档中编写代码,该代码可以使用 Adob​​e Reader 从输出的 pdf 中复制/粘贴,并且还可以自动换行,而不是超出右边距。

我发现在逐字模式下我可以复制/粘贴,但没有启用自动换行的选项。在 lstlistings 中我可以启用自动换行,但无法弄清楚如何正确复制/粘贴文本。尝试从 Adob​​e Reader X 复制/粘贴时,我得到了多余的空格。通过在线搜索,似乎我只需要正确选择 lstset{...} 中的内容,但无法弄清楚。

请参阅以下示例以及从编译文档复制/粘贴后的结果(注意额外的间距)

\documentclass[letterpaper]{article}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{fancyhdr}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage[lmargin=2.5cm,rmargin=2.5cm,tmargin=1.5cm,bmargin=3.5cm]{geometry}
\usepackage{listings}  % Environment meant for source code (useful for word-wrapping verbatim text)
\lstset{language=[LaTeX]TeX,breaklines=true} % Word wrap within listings environment

\begin{document}
\lstset{basicstyle = \verbatim@font}

\begin{lstlisting}
//Define Variables
Test1_up = [XZ:This (Index)][1];
Test2_down = [XZ:This Index][1];

//Specify Parameter Values
beta1 = .2238202445016966;
beta2 = .6676275732948469;
\end{lstlisting}

\begin{verbatim}
//Define Variables
Test1_up = [XZ:This (Index)][1];
Test2_down = [XZ:This Index][1];

//Specify Parameter Values
beta1 = .2238202445016966;
beta2 = .6676275732948469;
\end{verbatim}

\end{document}

复制/粘贴后的输出:

// Define Variables
Test 1_ up = [XZ: This ( Index ) ][1];
Test 2_ down = [XZ: This Index ][1];
// Specify Parameter Values
beta 1 = .2238202445016966;
beta 2 = .6676275732948469;
//Define Variables
Test1_up = [XZ:This (Index)][1];
Test2_down = [XZ:This Index][1];
//Specify Parameter Values
beta1 = .2238202445016966;
beta2 = .6676275732948469;

答案1

粘贴文本中的空格问题在于会listings在字母之间添加空格,除非columns=fullflexible使用该选项。

\documentclass[letterpaper]{article}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{fancyhdr}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage[lmargin=2.5cm,rmargin=2.5cm,tmargin=1.5cm,bmargin=3.5cm]{geometry}
\usepackage{listings}  % Environment meant for source code (useful for word-wrapping verbatim text)
\lstset{language=[LaTeX]TeX,breaklines=true} % Word wrap within listings environment

\begin{document}
\lstset{basicstyle = \ttfamily,columns=fullflexible}

\begin{lstlisting}
//Define Variables
Test1_up = [XZ:This (Index)][1];
Test2_down = [XZ:This Index][1];

//Specify Parameter Values
beta1 = .2238202445016966;
beta2 = .6676275732948469;
\end{lstlisting}

\end{document}

在此处输入图片描述

以下是我复制粘贴后得到的结果:

//Define Variables
Test1_up = [XZ:This (Index)][1];
Test2_down = [XZ:This Index][1];
//Specify Parameter Values
beta1 = .2238202445016966;
beta2 = .6676275732948469;

请注意,basicstyle=\verbatim@font将会引发错误。

相关内容