expl3 함수가 `\label{...}` 내부에서 확장되지 않았습니다.

expl3 함수가 `\label{...}` 내부에서 확장되지 않았습니다.

문제

.expl3 함수를 사용하고 싶습니다 \label{...}.

%!TEX program=xelatex
\documentclass{article}

\usepackage{l3regex}

\ExplSyntaxOn
    \tl_new:N \l_slugify_tl
    \cs_new:Npn \slugify #1 {
        \tl_set:Nf \l_slugify_tl { \tl_lower_case:n { #1 } } %lower case
        \regex_replace_all:nnN { [^a-z]+ }{ - }\l_slugify_tl % remove non-letters
        \regex_replace_all:nnN { (^-|-$$$$) }{ } \l_slugify_tl % clean up leading/trailing dashes
        \tl_use:N \l_slugify_tl
    }
\ExplSyntaxOff


\begin{document}

\subsection{The Explanation}
    \label{wiki:\slugify{The Explanation}}

\end{document}

문서를 조판할 때 다음과 같은 메시지가 나타납니다.

) (./test-regex-slug.aux
! Undefined control sequence.
<argument> r@wiki:\tl 
                      _set:Nf {the explanation}\regex _replace_all:nnN {[^a-...
l.3 ...x_replace_all:nnN {(^-|-$$$$)}{}}{{0.1}{1}}

분명히 내용은 \slugify확장되지 않고 expl3 코드는 aux 파일에 직접 기록됩니다. 이를 방지하고 코드를 작동시키려면 어떻게 해야 합니까?

배경

내 (거대한) 문서 내에서 상호 참조 사용을 단순화하고 싶습니다. 나는 다음과 같이 입력 할 것입니다

... e.g. using a \linkR{Time of Flight} detector.
That \linkR{TOF} would ...

% ...

\section{\anchorR{Time of Flight} Detector (\aliasR{TOF})}
% ...

대신에

...e.g. using a \hyperref[time-of-flight]{Time of Flight} detector.
That \hyperref[time-of-flight]{TOF} would...

% ...

\section{Time of Flight Detector (TOF)} \label{time-of-flight} \label{tof}
% ...

답변1

당신이하고 싶은 일은 단순히 불가능합니다. 정규식 대체 및 할당은 확장이 불가능하므로절대예를 들어 \label.

그러나 처리된 라벨을 매크로에 저장하고 전달하거나 매크로 \slugify가 즉시 라벨을 배치하도록 하는 등의 작업을 수행할 수 있습니다.

그런 일을 할 때마다 다음 인용문을 명심하세요.

"이것은 장기적으로 생각하는 것만큼 생산적이지 않습니다." — 타악기

\documentclass{article}

\usepackage{xparse}

\ExplSyntaxOn

\tl_new:N \l_slugify_tl

\NewDocumentCommand \slugify { m m m }
{
  \tl_set:Nf \l_slugify_tl { \tl_lower_case:n { #3 } } %lower case
  \regex_replace_all:nnN { [^a-z]+ }{ - }\l_slugify_tl % remove non-letters
  \regex_replace_all:nnN { (^-|-$$$$) }{ } \l_slugify_tl % clean up leading/trailing dashes
  #1 { #2 \tl_use:N \l_slugify_tl }
}

\ExplSyntaxOff

\begin{document}

\subsection{The Explanation}
    \slugify{\label}{wiki:}{The Explanation}

\end{document}

관련 정보