家谱系统

家谱系统

我正在写一部家族史,我想做这样的事情:为每个人都写一章,每个人都用唯一的代码来识别。

例如这样的事情:

\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.

产生如下结果:

约翰·多伊

John Doe 出生于 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}.

产生如下结果:

詹妮弗·多伊

Jennifer Doe 出生于 1920 年,是约翰·多伊¹.


¹ 请参阅第 46 页的 John Doe。

其中约翰·多伊是指向 John Doe 页面的链接(在此示例中为第 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.

产生这个:

John Doe 的女儿¹ 于 1990 年去世。


¹ 请参阅第 125 页的 Jennifer Doe。

其中女儿是 Jennifer Doe 页面的链接。

此外,人们可以有多个代码,例如:

\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

已编辑以使用热链接。它使用辅助文件来保存标签信息,因此它可以向前和向后引用,如本 MWE 所示。

我已经\person使用脚注链接\personLink实现了直接链接。编辑后实现了\personFoot提供普通脚注而不提供指向其他页面的链接。

\textheight为了更好地显示结果,在此 MWE 中将其缩小。

\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 的回答将 \\ 写入文件

相关内容