Problem
Ich möchte eine expl3-Funktion innerhalb eines verwenden \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}
Beim Setzen des Dokuments erhalte ich eine
) (./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}}
Offenbar wird der Inhalt \slugify
nicht expandiert und der expl3-Code wird direkt in die aux-Datei geschrieben. Wie kann ich das verhindern und meinen Code zum Laufen bringen?
Hintergrund
Ich möchte die Verwendung von Querverweisen in meinem (riesigen) Dokument vereinfachen. Ich würde etwas wie
... e.g. using a \linkR{Time of Flight} detector.
That \linkR{TOF} would ...
% ...
\section{\anchorR{Time of Flight} Detector (\aliasR{TOF})}
% ...
anstatt
...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}
% ...
Antwort1
Was Sie tun möchten, ist einfach nicht möglich. Regex-Ersetzungen und Zuweisungen sind einfach nicht erweiterbar und können daherniemalsim Kontext einer vollständigen Erweiterung von beispielsweise verwendet werden \label
.
Sie können jedoch beispielsweise das verarbeitete Etikett in einem Makro speichern und weitergeben oder Ihr \slugify
Makro das Etikett sofort platzieren lassen usw.
Denken Sie bei solchen Dingen immer an dieses Zitat:
»Das ist auf Dauer nicht so produktiv, wie man denkt.« — Schlagzeug
\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}