如何使用对象的标签引用对象的部分和部件编号

如何使用对象的标签引用对象的部分和部件编号

本质上,我希望做的是仅使用对象本身的标签(而不是部分和部分的标签)来完全引用对象部分、章节和部分的编号。我有以下命令及其自己的计数器(每个新部分都会重置):

\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——如何显示部分名称及其编号

相关内容