我想在将参数传递给之前自动格式化它\label
;我试过弄乱扩展等,但我没有弄清楚。如果能快速提示我将不胜感激,谢谢!
平均能量损失(抛出Missing \endcsname inserted
和Extra \endcsname
错误):
\documentclass{article}
\begin{document}
\section{Section}\label{\MakeLowercase{Some Text}}
See \ref{some text}.
\end{document}
答案1
你可以使用
\newcommand{\mycmd}[1]{\section{#1}\lowercase{\label{#1}}}
然而,这会将内部标签与排版部分标题绑定。
从技术层面上讲,如果章节标题包含任何不允许的内容(\csname
例如数学或换行符\lowercase
),它将失败。可以使用比 expl3 文本函数更复杂的函数来避免这些问题,但更概念性的问题是,这失去了它\label
应该是作者选择的内部 ID 的意义,即使文档被编辑并且章节顺序改变或标题被编辑,它也能实现稳定的交叉引用。
答案2
这里,\speclabel{}
将采用其参数,删除所有命令序列、空格和组,并对剩余部分的小写版本进行标签。
\documentclass{article}
\usepackage{tokcycle}
\newcommand\speclabel[1]{\protect\speclabelaux{#1}}%
\newcommand\speclabelaux[1]{%
\tokcycle{\addcytoks{##1}}{}{}{}{#1}%
\expandafter\lowercase\expandafter{\expandafter\label\expandafter{\the\cytoks}}%
}
\begin{document}
\section{My Section\speclabel{My Section}}
\subsection{My $\beta$ Subsection for \today%
\speclabel{My $\beta$ Subsection for \today}}
In section \ref{mysection} and subsection \ref{my$$subsectionfor}
\end{document}