在 \label 中调用一个新命令(或强命令)

在 \label 中调用一个新命令(或强命令)

我想向 传递一个新命令\label。你能帮我怎么做吗?

我的(无法编译的) MWE 如下:

\documentclass{article}

\usepackage{longtable}
\DeclareRobustCommand{\ltlab}{lab}

\begin{document}

\begin{longtable}{l}
\caption{This is a cool table.}
\label{table:{\ltlab}}
\end{longtable}

Table~\ref{table:{\ltlab}} contains nothing.

\end{document}

更新:@Phelype Oleinik 提醒我这个 MWE 中有一个拼写错误。更正这个拼写错误并使用\newcommand\DeclareRobustCommand 代替后,我得到了我想要的结果。

答案1

\DeclareRobustCommand当命令应在操作中完全展开时使用。但和\write的参数需要完全相反:它应展开为在 上下文中合法的字符串。\label\ref\csname...\endcsname

因此您绝对应该使用\newcommand,它没有这样的保护。

顺便说一句,\label{table:{\ltlab}}这是合法的,但会产生一个带有括号的有趣标签,类别代码为 12。

没有必要添加这些括号:\label{table:\ltlab}在我看来更干净。

相关内容