从 PDF 复制时如何保留诗句缩进和编号

从 PDF 复制时如何保留诗句缩进和编号

我正在努力适应这个答案在环境中产生相同的结果verse:我希望能够从 PDF 中复制一首诗,同时保持其缩进(包括编号)与 PDF 中的排版一致。

尽管以下 MWE 使用verbatim环境中的文本产生了所需的结果,但我无法使其在verse因诗句编号而变得更加复杂的环境中工作(我也想从 PDF 中复制出来)。

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{verse}
\usepackage{color}
\input{glyphtounicode}
\pdfglyphtounicode{visiblespace}{A0}
\pdfglyphtounicode{blank}{A0}
\pdfglyphtounicode{visualspace}{A0}
\pdfglyphtounicode{uni2423}{A0}
\pdfgentounicode=1
\begin{document}\showoutput
\makeatletter
\def\@xobeysp{\textcolor{white}{\char32}}
\makeatother

% Set style for poem typesetting
\verselinenumbersleft
\setlength{\vrightskip}{-2em}
\poemlines{5}

\begin{verbatim}
S'i' fosse foco

S'i' fosse foco, arderei 'l mondo;
  s'i' fosse vento, lo tempesterei;
  s'i' fosse acqua, i' l'annegherei;
  s'i' fosse Dio, mandereil' en profondo;

s'i' fosse Papa, allor sarei giocondo,
  che` tutti cristiani 'mbrigarei;
  s'i' fosse 'mperator, ben lo farei:
  a tutti taglierei lo capo a tondo.

S'i' fosse morte, andarei a mi' padre;
  s'i' fosse vita, non starei con lui:
  similmente faria con mi' madre.

S'i' fosse Cecco, com'i' sono e fui,
  torrei le donne giovani e leggiadre:
  le zoppe e vecchie lasserei altrui. 
\end{verbatim}

\begin{verse}
\poemtitle{S'i' fosse foco}

S'i' fosse foco, arderei 'l mondo;\\
\hspace{2em}s'i' fosse vento, lo tempesterei;\\
\hspace{2em}s'i' fosse acqua, i' l'annegherei;\\
\hspace{2em}s'i' fosse Dio, mandereil' en profondo;\\!
s'i' fosse Papa, allor sarei giocondo,\\
\hspace{2em}che` tutti cristiani 'mbrigarei;\\
\hspace{2em}s'i' fosse 'mperator, ben lo farei:\\
\hspace{2em}a tutti taglierei lo capo a tondo.\\!
S'i' fosse morte, andarei a mi' padre;\\
\hspace{2em}s'i' fosse vita, non starei con lui:\\
\hspace{2em}similmente faria con mi' madre.\\!
S'i' fosse Cecco, com'i' sono e fui,\\
\hspace{2em}torrei le donne giovani e leggiadre:\\
\hspace{2em}le zoppe e vecchie lasserei altrui.\\!
\end{verse}
\end{document}

我确实不知道代码是什么

\input{glyphtounicode}
\pdfglyphtounicode{visiblespace}{A0}
\pdfglyphtounicode{blank}{A0}
\pdfglyphtounicode{visualspace}{A0}
\pdfglyphtounicode{uni2423}{A0}
\pdfgentounicode=1
\begin{document}\showoutput
\makeatletter
\def\@xobeysp{\textcolor{white}{\char32}}
\makeatother

生产,所以我无法真正根据verse环境对其进行调整。

答案1

这是一种定义带有行数的自制诗歌环境的方法,其中遵循源的水平空格,并且必须使用例如来输入垂直空格\medskip

复制粘贴功能依赖于查看器,我刚刚在 Fedora 13 上使用 acroread 9 测试过它可以工作。

诗

从 acroread 9 复制粘贴后得到:

                     S’i’ fosse foco
          S’i’ fosse foco, arderei ’l mondo;
            s’i’ fosse vento, lo tempesterei;
            s’i’ fosse acqua, i’ l’annegherei;
            s’i’ fosse Dio, mandereil’ en profondo;
5         s’i’ fosse Papa, allor sarei giocondo,
            che‘ tutti cristiani ’mbrigarei;
            s’i’ fosse ’mperator, ben lo farei:
            a tutti taglierei lo capo a tondo.
          S’i’ fosse morte, andarei a mi’ padre;
10          s’i’ fosse vita, non starei con lui:
            similmente faria con mi’ madre.
          S’i’ fosse Cecco, com’i’ sono e fui,
            torrei le donne giovani e leggiadre:
            le zoppe e vecchie lasserei altrui.
And normal text

代码有两个可自定义的命令,用于设置左侧空格数,其中\myverseleftspaces行号是排版的,此处的行号仅为其倍数。标题必须在一行上。这不是逐字环境,可以使用 LaTeX 命令。左侧的空格来自 monotype 字体系列,诗歌中的单词间空格来自诗歌使用的字体。\myversemodulo5

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{color}

% the following is NOT needed if acroread 9 on Fedora Linux 13
% to the contrary it works better without
% \pdfglyphtounicode{visiblespace}{A0}
% \pdfglyphtounicode{blank}{A0}
% \pdfglyphtounicode{visualspace}{A0}
% \pdfglyphtounicode{uni2423}{A0}
% \pdfgentounicode=1


\newcounter{myversecount}
\newlength{\myversespwidth}

\newsavebox{\myversespbox}

\newcommand{\myverseresetspbox}[1][ ]{%
    \settowidth{\myversespwidth}{#1}%
    \sbox{\myversespbox}{\makebox[\myversespwidth]{\textcolor{white}{\char32}}}%
}

\newcommand{\myversesp}[1]{\ifnum \numexpr#1>0
             \usebox{\myversespbox}%
             \expandafter\myversesp\expandafter{\the\numexpr#1-1}\fi }

% \newlength{\myverseleftmargin}
% \setlength{\myverseleftmargin}{10ex}

\newcommand{\myverseleftspaces}{10}% at least 3

\newcommand{\myversemodulo}{5}

\newcommand{\myversestart}{\stepcounter{myversecount}%
   \texttt{\myverseresetspbox
   \ifnum \value{myversecount}=0
%              \makebox[\myverseleftmargin][l]{\myversesp{\myverseleftspaces}}%
               \myversesp{\myverseleftspaces}%
   \else
         \ifnum \numexpr\value{myversecount}-
                      \myversemodulo*(\value{myversecount}/\myversemodulo)=0
                \ifnum\value{myversecount}<10
                   %\makebox[\myverseleftmargin][l]
                     \arabic{myversecount}\myversesp{\myverseleftspaces-1}%
                \else
                   \ifnum\value{myversecount}<100
                    %\makebox[\myverseleftmargin][l]
                      \arabic{myversecount}\myversesp{\myverseleftspaces-2}%
                   \else
                     %\makebox[\myverseleftmargin][l]
                      \arabic{myversecount}\myversesp{\myverseleftspaces-3}%
                   \fi
                \fi
        \else
          %\makebox[\myverseleftmargin][l]{
           \myversesp{\myverseleftspaces}%
        \fi
   \fi }% end of texttt
}

\newenvironment{myverse}
   {\setcounter{myversecount}{-1}% title should be on one line only
    \myverseresetspbox
    \parindent 0pt
    \everypar{\myversestart}%
    \begingroup\lccode`~ 32
    \lowercase{\endgroup\def~{\usebox{\myversespbox}}}%
    \obeylines\obeyspaces}
   {}

\begin{document}

\begin{myverse}
           \textbf{S'i' fosse foco}
\medskip
S'i' fosse foco, arderei 'l mondo;
  s'i' fosse vento, lo tempesterei;
  s'i' fosse acqua, i' l'annegherei;
  s'i' fosse Dio, mandereil' en profondo;
\smallskip
s'i' fosse Papa, allor sarei giocondo,
  che` tutti cristiani 'mbrigarei;
  s'i' fosse 'mperator, ben lo farei:
  a tutti taglierei lo capo a tondo.
\smallskip
S'i' fosse morte, andarei a mi' padre;
  s'i' fosse vita, non starei con lui:
  similmente faria con mi' madre.
\smallskip
S'i' fosse Cecco, com'i' sono e fui,
  torrei le donne giovani e leggiadre:
  le zoppe e vecchie lasserei altrui. 
\end{myverse}
\noindent And normal text

\end{document}

相关内容