如何制作一个 LaTeX 文档,使其生成 PDF,以便复制粘贴空行和前导空格缩进能够正确进行?

如何制作一个 LaTeX 文档,使其生成 PDF,以便复制粘贴空行和前导空格缩进能够正确进行?

我们正在用 LaTeX 编写 PDF 文档,其中包含各种安装说明和其他技术文本。我们的想法是,用户用 Serif 字体阅读各种说明,然后会有多行 monotype 部分,他会将其复制粘贴到控制台或编辑器中,即 monotype 内联是 shellscript、C 等。

最后,我们希望那些 shell/C/等代码片段未转义(即 HEREDOC 的<PRE>一种行为)。出于这个原因,我们尝试了“listings”包和\lstset+\begin{lstlisting}表单,以实现文本内容的 HEREDOC 行为,即 Tex 文件将包含不使用任何转义序列的文本,然后我们尝试\usepackage[space=true]{accsupp}使从 PDF 中复制文本按预期工作。

然而,尝试这种方法并没有成功,我们也不明白为什么,具体来说,复制出来的文本往往会排除空行和前导空格

最后详细信息:

  • 我们喜欢使用 IBM Plex Mono 作为技术字体。

  • 如果需要的话,我们可以容忍在每个空行上添加一个空格。

  • 我们尝试使用一些技巧使页脚(以及侧面的任何行号)不包含在复制粘贴中,并且效果很好。

  • 如果复制粘贴功能只在某些特定的 PDF 查看器中有效,那也没关系。如果是这样,那么跨平台 PDF 查看器之一将是首选,它们是:Evince、Chrome、Firefox、MuPDF。(如果还有其他想法,请分享。)有限平台的 PDF 查看器将是 Adob​​e Reader 和 PDF Exchange Viewer。

  • 如果如果在 Latex 中不可能使用 heredoc 样式,那么没有它我们也可以生存,例如每行一个 BeginAccsupp 或任何其他需要的措施。

您能分享一下您对此的想法和例子吗?

如果这不能令人满意地完成,你建议怎么做 - 使用其他输出语言,例如“htlatex”生成的 HTML?使用 PS 是否有帮助,但如果有帮助,有什么查看器软件。

我们尝试过的Tex代码

\LoadClass[a4paper,12pt,openright,oneside,chapter=TITLE,section=TITLE,hidelinks]
 {article}
\documentclass{article}
\RequirePackage[utf8]{inputenc}
\RequirePackage[a4paper,margin=2cm]{geometry}
\RequirePackage{plex-mono}
\usepackage[space=true]{accsupp}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{listings}
\RequirePackage{xcolor}
\lstset{ 
 % Configuration to make it unescaped and copy-paste right
 %upquote=true,
 %columns=fullflexible,
 %showstringspaces=true,
 %literate={\ }{{\copyablespace}}1,
 % For the looks - make it monotype etc
 %frame=tb,
 %aboveskip=3mm,
 %belowskip=3mm,
 %numbers=left,
 %numberstyle=\tiny\color{lightgray}\ttfamily, % \nonumbercopy,
 %keywordstyle=\color{green},
 %commentstyle=\color{blue},
 %stringstyle=\color{red},
 %breaklines=true,
 %breakatwhitespace=true,
 %tabsize=2,
 %numbersep=0.5em,
 %framerule=0pt,
 %xleftmargin=10pt,
 %xrightmargin=0pt,
 breaklines=true,
 backgroundcolor=\color{yellow},
 %keepspaces=true,
 basicstyle=\fontsize{9}{11}\ttfamily%,
 %columns=fixed,
 %fontadjust=true,
 %showlines=false,
 %showstringspaces=false
} 

%\newcommand{\copyablespace}{
%    \BeginAccSupp{method=hex,unicode,ActualText=0040}
%\ %
%    \EndAccSupp{}
%}

% Make the line numbers not appear in copy-paste
% \newcommand{\nonumbercopy}[1]{
%   \BeginAccSupp{method=hex,unicode,ActualText=00A0}#1\EndAccSupp{}
% }

% Footer
\renewcommand{\title}[1]{
 \pagestyle{fancy}               
 \lhead{}
 \rhead{}
 \cfoot{\squelch{\thepage}}
}


\begin{document}
    \noindent Beginning of document, serif outside unescaped part.
    \begin{lstlisting}
This is the uppermost-left unescaped monotyped text, it has no indentation.
  This is the second line, it has three letters of indentation
Here are some characters that prove that we can type without escaping: \{$
Now let's do an empty line:

The empty line worked fine. Copypaste this and see the copy is the same!
    \end{lstlisting}
    End of document, serif outside unescaped part.
\end{document}

参考

参考我们已经尝试过但没有奏效的方法:

更多 AccSup 讨论请访问使表格内容可复制的技巧

相关内容