列表:复制到剪贴板功能?

列表:复制到剪贴板功能?

我只是想知道是否可以在每个列表旁边有一个“复制到剪贴板按钮”,将 lstlistings 环境的逐字内容复制到剪贴板。

仅 acroread 解决方案就足以满足我的目的。

答案1

好的,这里有两种方法,它们都不完美,都不是 100% 满足要求。但也许我们可以一起优化它们 :-)

\documentclass{article}

\usepackage{listings}
\usepackage{attachfile}
\usepackage{accsupp}
\usepackage{verbatim}
\usepackage{color}
\usepackage[misc]{ifsym}

\definecolor{lstbgcolor}{rgb}{0.9,0.9,0.9} 

\makeatletter
\lst@RequireAspects{writefile}

% Use \attachfile command to add listing content as paperclip.
\lstnewenvironment{attachedlisting}{%
  \lst@BeginAlsoWriteFile{\jobname.lsttmp}%
}
{%
  \lst@EndWriteFile
  \marginpar{\attachfile[appearance=false,icon=Paperclip,mimetype=text/tex]{\jobname.lsttmp}}
}

% Use accsupp package to add listing content as copyable text.
\lstnewenvironment{copyablelisting}{%
  \lst@BeginAlsoWriteFile{\jobname.lsttmp}%
}
{%
  \lst@EndWriteFile
  \let\verbatim@processline\add@lstline
  \global\let\lstfile\empty
  \verbatiminput{\jobname.lsttmp}%
  \marginpar{(\BeginAccSupp{method=escape,ActualText={\lstfile}}\PaperPortrait\EndAccSupp{})}
}
\def\add@lstline
{\xdef\lstfile{\unexpanded\expandafter{\lstfile}\the\verbatim@line\string^^J}}
\makeatother

\begin{document}

  \lstset{breakatwhitespace=true,breaklines=true,language=[LaTeX]TeX,basicstyle=\small\ttfamily,flexiblecolumns,backgroundcolor=\color{lstbgcolor}}

  \begin{attachedlisting}
    \documentclass{article}
    \title{Cartesian closed categories and the price of eggs}
    \author{Jane Doe}
    \date{September 1994}
    \begin{document}
      \maketitle
      Hello world!
    \end{document}
  \end{attachedlisting}

  \begin{copyablelisting}
    \documentclass{article}
    \title{Cartesian closed categories and the price of eggs}
    \author{Jane Doe}
    \date{September 1994}
    \begin{document}
      \maketitle
      Hello world!
    \end{document}
  \end{copyablelisting}

\end{document}

在此处输入图片描述

第一个环境,attachedlisting显示一个回形针,允许在编辑器中打开列表内容(或保存到文件)。

第二种环境,copyablelisting显示一个符号,当复制时,将粘贴到列表内容中。

开放式问题

  1. 符号的放置:由于在文件完全写入之前需要结束列表环境,因此“目标符号”的放置是一个问题。要将其放到顶部,可能需要运行两次。
  2. 复制符号:我无法制作一个可以粘贴到列表内容中的字符。如果“复制符号”两侧没有至少一个“正常”字符包围,这个技巧将不起作用这些也被复制了。因此,目前,您会在列表文本前后看到两个多余的字符。我也无法以某种方式使它们“不可见”。

这是我目前能做到的最好了。当然,我愿意听取建议。

相关内容