我想向 传递一个新命令\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}
在我看来更干净。