Генеалогическая система

Генеалогическая система

Я пишу семейную историю и хочу сделать что-то вроде этого: для каждого человека у меня есть глава, и каждый человек идентифицируется уникальным кодом.

Например, что-то вроде этого:

\personChapter{John Doe}{1}

John Doe is born in 1900, lorem ipsum dolor sit amet, consectetur adipisci
elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua.

которые производят это:

Джон Доу

Джон Доу родился в 1900 году, lorem ipsum dolor sit amet, consectetur adipisci elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua.

На другой странице я могу написать следующее:

\personChapter{Jennifer Doe}{23}

Jennifer Doe, born in 1920, is the daughter of \person{1}.

которые производят это:

Дженнифер Доу

Дженнифер Доу, родившаяся в 1920 году, является дочерьюДжон Доу¹.


¹ См. Джона Доу на стр. 46.

в которомДжон Доуссылка на страницу Джона Доу (в данном примере страница 46).

Если я захочу, я могу добавить только ссылку или только сноску:

Jennifer Doe, born in 1920, is the daughter of \personLink{1}.

Jennifer Doe, born in 1920, is the daughter of \personFoot{1}.

Я также могу указать другое имя, например, такое:

John Doe's \person{23}[daughter] is dead in 1990.

создаем это:

Джон Доудочь¹ умер в 1990 году.


¹ См. Дженнифер Доу на стр. 125.

в которомдочьэто ссылка на страницу Дженнифер Доу.

Кроме того, у людей может быть несколько кодов, например:

\personChapter{Jennifer Doe}{23}[JenniferDoe1920][JD20]

Затем я могу создать индекс со всеми людьми. Для каждого человека в индексе, есть ссылка на главную страницу этого человека:

\printPeopleIndex

Или, с помощью другой команды, связываются все страницы, на которых они цитируются:

\printPeopleAllRef

Возможно ли что-то подобное?


Я написал эти команды, которые частично делают то, что я написал выше.

\newcommand{\personChapter}[2]
{
\chapter{#1}
\label{ch:#2}
}

\newcommand{\person}[1]
{
\nameref{ch:#1}
\footnote{See \nameref{ch:#1} on page \pageref{ch:#1} .}
}

решение1

ОТРЕДАКТИРОВАНО для использования горячих ссылок. Он использует aux-файл для сохранения информации о маркировке, поэтому он может ссылаться вперед и назад, как показано в этом MWE.

Я реализовал \personиспользование ссылки на сноску и \personLinkреализацию прямой ссылки. ОТРЕДАКТИРОВАНО для реализации \personFoot, которая обеспечивает простую сноску без ссылки на другую страницу.

В этом MWE изображение \textheightуменьшено, чтобы лучше показать результат.

\documentclass{article}
\usepackage{lipsum}
\makeatletter
\long\def \protected@iwrite#1#2#3{%
     \begingroup
     \let\thepage\relax
     #2%
     \let\protect\@unexpandable@protect
     \edef\reserved@a{\immediate\write#1{#3}}%
     \reserved@a
     \endgroup
     \if@nobreak\ifvmode\nobreak\fi\fi
    }
\newcommand\personChapter[2]{\bigskip%
  \protected@iwrite\@auxout{\def\nex{\noexpand\noexpand\noexpand}}{%
    \nex\expandafter\xdef%
    \nex\csname GenLabel#2%
    \nex\endcsname{#1}%
  }%
  \label{Label#2}%
  \noindent\textbf{#1}\smallskip}
\makeatother
\newcommand\person[1]{\csname GenLabel#1\endcsname\footnote{%
  See \csname GenLabel#1\endcsname{} on page \pageref{Label#1}}}
\newcommand\personLink[1]{\csname GenLabel#1\endcsname{} (page \pageref{Label#1})}
\newcommand\personFoot[1]{\csname GenLabel#1\endcsname\footnote{%
  See \csname GenLabel#1\endcsname{} on page \pageref*{Label#1}}}
\parindent 0pt
\textheight 2in
\usepackage{hyperref}

\begin{document}
\personChapter{John Doe}{1}

John Doe is born in 1900, father of \person{23} or, using unlinked footnote,
father of \personFoot{23}, \lipsum[3]

\personChapter{Jennifer Doe}{23}

Jennifer Doe, born in 1920, is the daughter of \person{1} or,
  using no footnote, the daughter of \personLink{1}.
\end{document}

введите описание изображения здесь

введите описание изображения здесь


Примечание: \protected@iwriteмакрос взят из ответа egreg наЗапись \\ в файл.

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