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