我正在尝试定义一个自定义部分命令,该命令在经过一些预解析后还将定义相应的标签。具体来说,我希望该命令定义具有给定名称的部分,然后定义一个名称小写且空格替换为破折号的标签。
到目前为止,我已经想到了以下方法:
\NewDocumentCommand\startSection{m}
{
\section{#1}\label{\lowercase{\StrSubstitute{#1}{ }{-}}}
}
它使用xstring
和xparse
包,但这会产生错误:
! Argument of \@sect has an extra }.
经过一番尝试后,我得到:
! Missing \endcsname inserted
围绕\lowercase
命令。
我似乎缺少一些关于标签如何工作的基本知识,所以有人有什么好的建议吗?
答案1
\usepackage{xstring}
\newcommand{\startSection}[1]{%
\lowercase{\def\templabel{#1}}%
\StrSubstitute{\templabel}{ }{-}[\templabel]
\section{#1}\label{\templabel}}
\StrSubstitute
和命令\lowercase
不可扩展,因此您\label
找不到任何适合它的东西。您必须\lowercase
先将 ,然后将\StrSubstitute
,最后将字符串输入\label
。
然而,这只是一个练习:如果章节标题中有重音字母或命令,这个命令可能会中断。