![在 \label 中调用一个新命令(或强命令)](https://linux22.com/image/434492/%E5%9C%A8%20%5Clabel%20%E4%B8%AD%E8%B0%83%E7%94%A8%E4%B8%80%E4%B8%AA%E6%96%B0%E5%91%BD%E4%BB%A4%EF%BC%88%E6%88%96%E5%BC%BA%E5%91%BD%E4%BB%A4%EF%BC%89.png)
我想向 传递一个新命令\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}
在我看来更干净。