
Я хочу иметь возможность указать короткий отрывок текста, который можно будет процитировать как диапазон строк в выходном PDF-файле, в идеале с использованием такого синтаксиса:
\documentclass{memoir}
\usepackage{lineno}
\begin{document}
\runninglinenumbers*
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam lacinia posuere
magna ut imperdiet. \labellines{nunc-pellentesque}{Nunc pellentesque} velit quis
leo interdum ullamcorper. Ut fringilla sapien ut sem viverra, et rhoncus enim
lobortis. Morbi diam eros, tristique nec feugiat eu, consequat ac dui. Duis
molestie, sem id efficitur dignissim, velit metus auctor orci, sit amet mattis
metus purus in nibh. Etiam mattis, magna ut imperdiet molestie, ex leo viverra
velit, ac posuere augue est maximus risus. Etiam ac pellentesque nulla. Morbi
quis pharetra purus. Proin porta, turpis et scelerisque hendrerit, elit eros
malesuada mi, a imperdiet massa est id nibh. Class aptent taciti sociosqu ad
litora torquent per conubia nostra, per inceptos himenaeos.
\labellines{nunc-pharetra}{Nunc pharetra vehicula metus, eu tincidunt arcu
aliquet et. Aenean ac odio nunc. Etiam ultricies purus non dolor tincidunt, et
ultricies turpis consequat. Integer vitae ullamcorper eros. Nullam pulvinar
dictum nunc. Morbi ac justo mi.}
% \reflines{nunc-pellentesque} should print "line 2"
``Nunc pellentesque\ldots'' was on \reflines{nunc-pellentesque}.
% \reflines{nunc-pharetra} should print "lines 10--13"
``Nunc pharetra\ldots'' was on \reflines{nunc-pharetra}.
\end{document}
Сам текст выглядит так:
решение1
Простое решение, но, возможно, не самое надежное:
Поместите a
\linelabel{start:#1}
в начале прилагаемого #2Поместите a
\linelabel{end:#1}
в конце прилагаемого #2
Использовать \getrefnumber
из refcount
пакета и извлечь номера строк. В принципе \lineref
, это так, но это не даст расширяемых номеров, поэтому сравнение не удастся.
Я не добавлял код для проверки существования метки!
\documentclass{memoir}
\usepackage{refcount}
\usepackage{lineno}
\newcommand{\labellines}[2]{%
\linelabel{start:#1}%
#2%
\linelabel{end:#1}%
}
\makeatletter
\newcommand{\reflines}[1]{%
\begingroup
\edef\temp@a{\getrefnumber{start:#1}}%
\edef\temp@b{\getrefnumber{end:#1}}%
\ifnum\temp@a = \temp@b
line \temp@a%
\else
lines \temp@a\ and \temp@b%
\fi
\endgroup
}
\makeatother
\begin{document}
\runninglinenumbers*
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam lacinia posuere
magna ut imperdiet. \labellines{nunc-pellentesque}{Nunc pellentesque} velit quis
leo interdum ullamcorper. Ut fringilla sapien ut sem viverra, et rhoncus enim
lobortis. Morbi diam eros, tristique nec feugiat eu, consequat ac dui. Duis
molestie, sem id efficitur dignissim, velit metus auctor orci, sit amet mattis
metus purus in nibh. Etiam mattis, magna ut imperdiet molestie, ex leo viverra
velit, ac posuere augue est maximus risus. Etiam ac pellentesque nulla. Morbi
quis pharetra purus. Proin porta, turpis et scelerisque hendrerit, elit eros
malesuada mi, a imperdiet massa est id nibh. Class aptent taciti sociosqu ad
litora torquent per conubia nostra, per inceptos himenaeos.
\labellines{nunc-pharetra}{Nunc pharetra vehicula metus, eu tincidunt arcu
aliquet et. Aenean ac odio nunc. Etiam ultricies purus non dolor tincidunt, et
ultricies turpis consequat. Integer vitae ullamcorper eros. Nullam pulvinar
dictum nunc. Morbi ac justo mi.}
% \reflines{nunc-pellentesque} should print "line 2"
``Nunc pellentesque\ldots'' was on \reflines{nunc-pellentesque}.
% \reflines{nunc-pharetra} should print "lines 10--13"
``Nunc pharetra\ldots'' was on \reflines{nunc-pharetra}.
\end{document}