Я редактирую сборник статей одного ученого. Для этого я считаю крайне полезным, если не необходимым, указывать разрывы страниц в первом издании статей, чтобы цитирование определенных отрывков этих статей в других, особенно старых текстах, оставалось действительным и жизнеспособным. Вот мой пример MWE для этого:
\documentclass{scrbook}
\usepackage{lipsum}
\usepackage{scrlayer-scrpage}
\ohead{\textbf{\pagemark}}
\ihead{\textit{\theoldpage}}
\ofoot{}
\pagestyle{scrheadings}
\newcounter{oldpage}
\setcounter{oldpage}{1}
\newcommand{\markoldpage}{
[mark]
\marginpar{\begin{center}\footnotesize\theoldpage\end{center}}
\stepcounter{oldpage}
}
\begin{document}
\chapter{Chapter}
\markoldpage{} This is the first oldpage. \markoldpage{} Now the second oldpage has begun.
\newpage
\lipsum \markoldpage{} \lipsum \markoldpage{}
\end{document}
Чего я добился, так это определения нового счетчика oldpage
. Каждая глава начинает новую статью. Поэтому я вручную устанавливаю -counter oldpage
каждый раз, когда начинается новая глава. Некий символ ›[mark]‹ указывает на разрыв страницы в старом тексте. Затем oldpage также указывается на полях. Затем -counter oldpage
устанавливается в заголовке, на противоположной стороне обычных счетчиков страниц (например, если счетчик страниц в книге — верхний внешний, oldpage-counter — верхний внутренний). Я добился этого с помощью scrlayer-scrpage
.
Мне бы хотелось, чтобы oldpage-counter был контекстно-зависимым, то есть он должен вести себя следующим образом:
- Если на новой странице есть ссылка на одну старую страницу, счетчик старых страниц должен просто показывать номер (например, ›1‹)
- если на новой странице есть ссылки на две старые страницы, счетчик старых страниц должен показывать числа, разделенные пробелом и запятой (например, ›1, 2‹)
- если на новой странице есть ссылки на три или более старых страниц, счетчик старых страниц должен показывать первую и последнюю цифры, соединенные двойным тире (например, ›1--3‹)
Для программирования предполагаемого поведения, я полагаю, необходимо работать с условными операторами, и эти условные операторы, вероятно, нуждаются в информации о том, сколько oldpage-breaks будет на выходной странице в конце. Мои вопросы таковы:
- Где можно получить информацию и как на нее ссылаться? Понятия не имею, и он не знает, с чего начать поиск.
Я был бы чрезвычайно признателен, если бы кто-нибудь помог мне сделать первый шаг и написать немного кода по этой теме.
решение1
Система отметок TeX позволяет отслеживать значения, которые должны быть зарегистрированы в заголовке страницы.
\documentclass{scrbook}
\usepackage{lipsum}
\usepackage{scrlayer-scrpage}
\ohead{\textbf{\pagemark}}
\def\lastoldpagemark{\topmarks\oldpagemark}
\ihead{\textit{\lastoldpagemark\ifnum\lastoldpagemark<\botmarks\oldpagemark--\botmarks\oldpagemark\fi
\xdef\lastoldpagemark{\botmarks\oldpagemark}}}
\ofoot{}
\pagestyle{scrheadings}
\newmarks\oldpagemark % etex marks not completely reliable in latex, but probably OK here
\newcounter{oldpage}
\setcounter{oldpage}{1}
\newcommand{\markoldpage}{%%%
[mark]%%%
\marks\oldpagemark{\theoldpage}\marginpar{\centering\footnotesize\theoldpage}%%%
\stepcounter{oldpage}%%%
}
\begin{document}
\chapter{Chapter}
\markoldpage{} This is the first oldpage. \markoldpage{} Now the second oldpage has begun.
\newpage
\lipsum \markoldpage{} \lipsum \markoldpage{}
\end{document}