我正在努力适应这个答案在环境中产生相同的结果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 字体系列,诗歌中的单词间空格来自诗歌使用的字体。\myversemodulo
5
\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}