本质上,我希望做的是仅使用对象本身的标签(而不是部分和部分的标签)来完全引用对象部分、章节和部分的编号。我有以下命令及其自己的计数器(每个新部分都会重置):
\newcounter{important}[section]
\newcommand{\imp}[3]{\refstepcounter{important} \todo[inline, color=red!30,caption={}]{\hypertarget{#1}{\underline{Important (#2) \thepart.\thesection.\theimportant $\longrightarrow$ \label{#1}}} #3}}
\newcommand{\impref}[3]{\hyperlink{#1}{Important \ref{#2}.\ref{#3}.\ref{#1}}}
我可以像这样使用它们
\usepackage[colorinlistoftodos]{todonotes}
\usepackage[colorlinks=true, linkcolor=blue]{hyperref}
\newcounter{important}[section]
\newcounter{importantref}[section]
\newcommand{\imp}[3]{\refstepcounter{important} \todo[inline, color=red!30,caption={}]{\hypertarget{#1}{\underline{Important (#2) \thepart.\thesection.\theimportant $\longrightarrow$ \label{#1}}} #3}}
\newcommand{\impref}[3]{\hyperlink{#1}{Important \ref{#2}.\ref{#3}.\ref{#1}}}
\begin{document}
\part{this is a part} \label{pt: partlabel1}
\chapter{this is a chapter}
\section{this is a section} \label{sec: seclabel1}
\imp{important: label}{Brief name}{description}
\part{another part} \label{pt: partlabel2}
\chapter{another chapter}
\section{another section} \label{sec: seclabel2}
Here I am referencing this thing from another part chapter and section \impref{important: label}{pt: partlabel1}{sec: seclabel1}
\end{document}
输出结果如下:
现在,我的代码实现了我想要的功能。如您所见,我已成功完整引用了对象的部件、章节和节号以及对象本身的计数器。;所以您可能想知道好吧... 那么问题是什么?
我的问题是,每次我想使用 \impref 引用对象的部分、章节和节时,我都必须手动查找对象所在的部分和节的标签,并将这些标签输入到命令 \impref 中。我希望做的是以某种方式(我相信)创建一种新类型的标签,在为对象创建标签时自动存储创建对象的部分编号和节编号,这样当我以后想引用它时,仅有的我需要输入到 \impref 中的信息是对象本身的标签,这样 \impref 命令可以减少到只需要一个输入而不是三个输入。
答案1
您可以\p@important
在计数器前使用前缀字符串并直接\thepart.\thesection.
使用\theimportant
。
大多数自定义链接目标和链接可能都不需要,所以你可以不用
\documentclass{report}
\usepackage[colorinlistoftodos]{todonotes}
\usepackage[colorlinks=true, linkcolor=blue]{hyperref}
\newcounter{important}[section]
\makeatletter
\renewcommand*{\p@important}{Important~}
\makeatother
\renewcommand*{\theimportant}{\thepart.\thesection.\arabic{important}}
\newcommand{\imp}[3]{%
\refstepcounter{important}\label{#1}%
\todo[inline, color=red!30,caption={}]{\underline{Important (#2) \theimportant $\longrightarrow$ }#3}}
\begin{document}
\part{this is a part}
\chapter{this is a chapter}
\section{this is a section}
\imp{important:label}{Brief name}{description}
\part{another part}
\chapter{another chapter}
\section{another section}
Here I am referencing this thing from another part chapter and section \ref{important:label}
\end{document}
\imp
如果你想包括我能找到的最佳解决方案的名称是
\documentclass{report}
\usepackage[colorinlistoftodos]{todonotes}
\usepackage[colorlinks=true, linkcolor=blue]{hyperref}
\newcounter{important}[section]
\renewcommand*{\theimportant}{\thepart.\thesection.\arabic{important}}
\makeatletter
\newcommand{\imp}[3]{%
\refstepcounter{important}\def\@currentlabelname{#2}\label{#1}%
\todo[inline, color=red!30,caption={}]{\underline{Important (#2) \theimportant $\longrightarrow$ }#3}}
\makeatother
\newcommand*{\impref}[1]{\hyperref[{#1}]{Important (\nameref*{#1}) \ref*{#1}}}
\begin{document}
\part{this is a part}
\chapter{this is a chapter}
\section{this is a section}
\imp{important:label}{Brief name}{description}
\part{another part}
\chapter{another chapter}
\section{another section}
Here I am referencing this thing from another part chapter and section \impref{important:label}
\end{document}
不幸的是,这意味着你需要使用专用\impref
命令,而不是通用命令\ref
。另请参阅\nameref——如何显示部分名称及其编号