
Я пишу небольшой финансовый отчет по латексу... Есть несколько пунктов expenses
, которые довольно часто повторяются во всем отчете, например food
, hotels
, train tickets
, , и т. д. Думаю, будет удобно сделать для них метки.
Например, когда я впервые пишу food
, я могу написать метку food
рядом с ней в tex
файле (например \labelexpenses{food}
); когда я пишу hotels
, я пишу \labelexpenses{hotels}
рядом с ней. Затем позже, написав что-то вроде Expense~\refexpenses{food}
в tex-файле, это может отобразиться в pdf Expense 1
; Expense~\refexpenses{hotels}
в tex-файле генерируется Expense 2
. Числа 1
и 2
генерируются системой.
Таким образом, это очень похоже на \label{...}
и \ref{...}
, но зарезервировано для чего-то, что я могу определить сам, а числа будут сгенерированы системой автоматически.
Кто-нибудь знает, как это реализовать?
решение1
Я думаю, вы имеете в виду что-то вроде этого:
\documentclass{article}
\usepackage{hyperref}
\newcounter{refexp}
\setcounter{refexp}{0}
\newcommand{\labelexpenses}[1]{%
\phantomsection
\refstepcounter{refexp}%
\label{#1}%
}
\newcommand{\refexpenses}[1]{%
\ref{#1}%
}
\begin{document}
For instance, the first time I write food, I can write a label food
close to it in the tex file (for example
\verb|\labelexpenses{food}|\labelexpenses{food}); when I write hotels,
I write \verb|\labelexpenses{hotels}|\labelexpenses{hotels} next to it.
Then later, by writing something like Expense~\refexpenses{food} in the
tex file, it could show in the pdf Expense 1; Expense~\refexpenses{hotels}
in the tex file generates Expense 2. The numbers 1 and 2 are generated by
the system.
\end{document}
решение2
Вот еще один, хотя и похожий, вариант:
\documentclass{article}
\usepackage{booktabs}
\newcounter{expensecntr}
\renewcommand{\theexpensecntr}{(\arabic{expensecntr})}
\newcommand{\labelexpense}[1]{%
\refstepcounter{expensecntr}%
\label{expense:#1}%
#1~\theexpensecntr}
\newcommand{\refexpense}[1]{\ref{expense:#1}}
\begin{document}
\begin{tabular}{lr}
\toprule
\textbf{Expense} & \textbf{Total} \\
\midrule
\labelexpense{Food} & abc \\
\labelexpense{Hotel} & def \\
\labelexpense{Gas} & ghi \\
\bottomrule
\end{tabular}
Expense~\refexpense{Hotel} is really expensive.
\end{document}
решение3
Вот как я делал подобные вещи в прошлом:
\documentclass{article}
\usepackage{etoolbox}
\usepackage{hyperref}
\makeatletter
% save text as a \ref-erencable reference in the auxfile
% usage: \labelledText{label}{text} --> \ref{label} recalls it
\newrobustcmd{\labelledText}[2]{#2\edef\@currentlabel{#2}\label{#1}}
\makeatother
\begin{document}
Here is something that I want to refer to later
\labelledText{later}{101}
And here I go using \ref{later} again.
\newcounter{test}
Saving test to none: \labelledText{none}{\thetest}.
\addtocounter{test}5
Saving test to five: \labelledText{five}{\thetest}.
Using the saved values of none=\ref{none} and five=\ref{five}.
\end{document}
Вот что получилось:
Поэтому вы используете \labelledText{mylabel}{some text}
для печати some text
и присваиваете ему метку mylabel
. После этого вы можете использовать \ref{mylabel}
для повторной печати результата.
Это будет работать как с выходом, так и без него.гиперреф.