Два разных счетчика страниц в критических изданиях

Два разных счетчика страниц в критических изданиях

Я редактирую сборник статей одного ученого. Для этого я считаю крайне полезным, если не необходимым, указывать разрывы страниц в первом издании статей, чтобы цитирование определенных отрывков этих статей в других, особенно старых текстах, оставалось действительным и жизнеспособным. Вот мой пример 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}

Связанный контент