Маркировать мои собственные предметы

Маркировать мои собственные предметы

Я пишу небольшой финансовый отчет по латексу... Есть несколько пунктов 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}для повторной печати результата.

Это будет работать как с выходом, так и без него.гиперреф.

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