我想定义自己的数字及其显示。
例如,
今天我在停车场遇见了大卫(P1)。大卫很友善。突然间我记得他是我的朋友苏珊(P2)。...
如果我通过添加编辑文本
今天我在停车场遇见了 David (P1)。David 很友好。David 是 John 的父亲(P2)。突然我想起来他是我的朋友苏珊(P3)。……
我希望数字会自动改变。
答案1
也许是这样的?
\documentclass{article}
\newcounter{numerations}
\newcommand\nlabel[1]{%
\refstepcounter{numerations}%
\expandafter\xdef\csname REF#1\endcsname{\thenumerations}%
\expandafter\xdef\csname NUMERATIONS\thenumerations\endcsname{#1}%
#1 (P\thenumerations)%
}
\newcommand\nref[1]{#1 (P\csname REF#1\endcsname)}
\newcommand\numeration[1]{\csname NUMERATIONS#1\endcsname{} (P#1)}
\begin{document}
Today I have met \nlabel{David} in the parking. David was friendly.
\textit{David is the father of \nlabel{John}.} Suddenly I remember he was
a friend of mine \nlabel{Susan}...
I can recall the label for \nref{John}, \nref{David}, and or \nref{Susan}.
Or I can invoke them by number: \numeration{2}, \numeration{1}, and or
\numeration{3}.
\end{document}
答案2
这是一个使用 - 工作(如果需要)和自动标记的版本\nameref
,使用可选参数,它指的是人的名字,而额外的\label
命令后该\newpersons
宏将引用该人的号码(即 P1 等)
\documentclass{article}
\usepackage{xparse}
\newcounter{person}
\renewcommand{\theperson}{P\arabic{person}}
\makeatletter
\NewDocumentCommand{\newperson}{O{#2}m}{%
\protected@edef\@currentlabel{#1}%
% If hyperref is not loaded, \protected@edef\currentlabelname does no harm here
\protected@edef\@currentlabelname{#1}% for nameref.
\label{#2}%
\refstepcounter{person}%
#1~(\theperson)%
}
\makeatother
\usepackage{hyperref}
\begin{document}
Today I have met \newperson{David} in the parking. David was friendly.
\textit{\ref{David} is the father of \ref{John}.} Suddenly I remember he was
a friend of mine \newperson{Susan}\label{susansnumber}...
I can recall the label for \newperson{John}, \ref{David}, and or \nameref{Susan} or call them by a reference to the number with \ref{susansnumber}.
\end{document}
答案3
下面的示例提供了\newperson{<name>}
设置名称后跟递增计数器的形式(P<num>)
:
\documentclass{article}
\newcounter{person}
\newcommand{\newperson}[1]{%
\refstepcounter{person}%
#1~(P\theperson)}
\begin{document}
Today I have met David~(P1) in the parking. David was friendly.
David is the father of John~(P2). Suddenly I remember he was a friend of mine, Susan~(P3).
Today I have met \newperson{David} in the parking. David was friendly.
David is the father of \newperson{John}. Suddenly I remember he was a friend of mine, \newperson{Susan}.
\end{document}
这可以扩展为使用\label
-\ref
系统,允许引用已经命名的人(不是新的),以保持一致性。这里有一个这样的实现,它提供了\newperson[<tag>]{<name>}
可以使用 引用的\refperson{<tag>}
。如果没有<tag>
提供,<name>
则使用:
\documentclass{article}
\newcounter{person}
\makeatletter
\newcommand{\newperson}[2][]{%
\refstepcounter{person}% New person added
\def\@currentlabel{#2}% Update label
\@currentlabel~(P\theperson)% Set person
% https://tex.stackexchange.com/a/53091/5764
\if\relax\detokenize{#1}\relax
\label{#2}%
\else
\label{#1}%
\fi
}
\makeatother
\newcommand{\refperson}[1]{\ref{#1}}%
\begin{document}
Today I have met Davidofilofsky~(P1) in the parking. Davidofilofsky was friendly.
Davidofilofsky is the father of John~(P2). Suddenly I remember he was a friend of mine, Susan~(P3).
Today I have met \newperson[david]{Davidofilofsky} in the parking. \refperson{david} was friendly.
\refperson{david} is the father of \newperson{John}. Suddenly I remember he was a friend of mine, \newperson{Susan}.
\end{document}