我需要在表格中分配一个参考编号,这样当参考编号的初始部分发生变化时,它会自动更新末尾的编号并重新启动计数器。例如,我可能有 FX-##,并且我希望 LaTeX 枚举 FX-01、FX-02 等。然后我可能会更改为 EL-##,并且我需要 LaTeX 重置计数器,因为我已经开始了一个新的参考编号,所以它将变成 EL-01。我还希望能够标记参考编号并在以后引用它们。当我稍后引用它们时,我希望显示完整的参考编号,FX-01 等。我不知道从哪里开始,所以包含了非常基本的代码。
\documentclass{article}
\begin{document}
\begin{table}[]
\begin{tabular}{|l|l|l|}
FX-01\label{fire} & Fire & Call for help \\
FX-02\label{explo} & Explosion & Run away \\
EL-01\label{elec} & Electrocution & Contact doctor \\
\end{tabular}
\end{table}
\end{document}
答案1
像这样吗?
我的建议是使用categories
(例如 FX 或 EL),每次引入新类别时,计数器都会增加,本地元素计数器会重置。宏\newcatelement
负责步进元素计数器、最终标签和数字的FX-XX
输出XX
。
\documentclass{article}
\usepackage{xparse}
\newcounter{categorycounter}
\newcounter{elementcounter}[categorycounter]
\makeatletter
\renewcommand{\theelementcounter}{%
\@currentcategory-%
\ifnum\value{elementcounter} <9\relax%
0\number\value{elementcounter}%
\else
\arabic{elementcounter}%
\fi
}
\newcommand{\newcategory}[1]{%
\gdef\@currentcategory{#1}%
\refstepcounter{categorycounter}%
}
\NewDocumentCommand{\newcatelement}{+o}{%
\refstepcounter{elementcounter}%
\IfValueT{#1}{\label{#1}}%
\theelementcounter%
}
\makeatother
\usepackage{hyperref}
\begin{document}
\begin{table}[]
\begin{tabular}{|l|l|l|}
\newcategory{FX}\newcatelement[fire] & Fire & Call for help \\
\newcatelement[explo] & Explosion & Run away \\
\newcategory{EL}\newcatelement[elec] & Electrocution & Contact doctor \\
\end{tabular}
\end{table}
See \ref{fire} or \ref{explo}, but also \ref{elec}
\end{document}
使用更好的设置进行更新
\documentclass{article}
\usepackage{xcolor}
\usepackage{xparse}
\newcounter{categorycounter}
\newcounter{elementcounter}[categorycounter]
\makeatletter
\newcommand{\@categoryseparator}{-}
\NewDocumentCommand{\setcategoryseparator}{+m}{%
\renewcommand{\categoryseparator}{#1}%
}
\renewcommand{\theelementcounter}{%
\@currentcategory\@categoryseparator%
\ifnum\value{elementcounter} <9\relax%
0%
\fi
\arabic{elementcounter}%
}
\def\@currentcategory{}
\NewDocumentCommand{\newcategory}{m}{%
\gdef\@currentcategory{#1}%
\refstepcounter{categorycounter}%
\ignorespaces
}
\NewExpandableDocumentCommand{\newcatelement}{s+o+m+m}{%
\refstepcounter{elementcounter}%
\edef\@currentlabelname{#4}%
\IfValueT{#2}{\label{#2}}%
\theelementcounter& #3 & #4 \IfBooleanF{#1}{\tabularnewline}%
}
\makeatother
\usepackage{hyperref}
\begin{document}
\begin{table}[]
\begin{tabular}{|*{3}{l|}}
\newcategory{FX}
\newcatelement[fire]{Fire}{Call for help}%
\newcatelement[explo]{Explosion}{Run away}%
\newcategory{EL}
\newcatelement[elec]{Electrocution}{Contact doctor}
\end{tabular}
\end{table}
In case of \ref{fire} just \colorbox{yellow}{\nameref*{fire}} or but in case of \ref{explo} \colorbox{red}{\color{white}\bfseries\nameref*{explo}}. Take care of \ref{elec}!
\end{document}