我正在写一部家族史,我想做这样的事情:为每个人都写一章,每个人都用唯一的代码来识别。
例如这样的事情:
\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 的回答将 \\ 写入文件。