任意命名的计数器,引用

任意命名的计数器,引用

如果这个问题之前有人问过,我很抱歉,但我就是找不到,尽管搜索了很多次。部分问题回答了我的问题,但不是全部。问题是这样的。我想要一个实际上非数字的计数器,具有任意(文本)名称,可以引用。例如,在表格中:

\begin{tabular}{ll}
Project-Quick  \label{quick} & [Details here.] \\
Task-Brown     \label{brown} & [Details here.] \\ 
Todo-Fox       \label{fox}   & [Details here.] \\
Project-Jumped \label{jump}  & [Details here.] \\
\end{tabular}

其中:“\ref{jump} 已完成。”,将产生输出:“Project-Jumped 已完成。”

这可能吗?

答案1

除非您以某种方式标记相关文本,否则宏\label无法知道您正在标记什么。例如,\section将节号标记为\label可以命名的内容。

在这里,我为项目设置了一个新的参考系统,以便您可以标记事物\project并选择性地标记它们。

\documentclass{article}
\title{My notes for Bla}
\author{myself}

\newcommand{\projectnamestyle}[1]{\textsc{#1}}
\newcommand{\projectnamerefstyle}[1]{[\textsc{#1}]}
\newcounter{project}

    \newcommand{\project}[1]{%
      \projectnamestyle{#1}%
       \renewcommand{\theproject}{\projectnamerefstyle{#1}}%
       \refstepcounter{project}%
    }

\begin{document}
\begin{tabular}{ll}
  \project{Project-Quick}  \label{quick} & [Details here.] \\
  \project{Task-Brown}     \label{brown} & [Details here.] \\
  \project{Todo-Fox}       \label{fox}   & [Details here.] \\
  \project{Project-Jumped} \label{jump}  & [Details here.] \\
\end{tabular}

And \ref{jump} has been completed.
\end{document}

您可以自定义(或删除)\projectnamestyle设置项目名称的外观。同样,您可以通过更改定义来更改对项目名称的引用的排版方式\projectnamerefstyle(此处用方括号括起引用只是为了说明)。

这里的关键是调用\refstepcounter{YOURCOUNTER},使得下一个命令\label可以获取 中“存储”的所有内容\theYOURCOUNTER

更新感谢@egreg

先前的解决方案是正确的,但是使用了计数器,但在这种情况下,计数器是没有必要的,因为引用不需要自动编号。

更简洁的解决方案是定义

\newcommand{\projectnamestyle}[1]{\textsc{#1}}
\newcommand{\projectnamerefstyle}[1]{[\textsc{#1}]}

\makeatletter
\newcommand{\project}[1]{%
  \projectnamestyle{#1}%
  \def\@currentlabel{\projectnamerefstyle{#1}}%
}
\makeatother

因为重新定义是我们实际使用的\@currentlabel唯一效果。\refstepcounter

相关内容