正则表达式中的无符号整数变量

正则表达式中的无符号整数变量

我需要为每个章节和部分动态生成特定章节/部分标签。我已经修改了章节和部分命令来执行此操作。我使用基于正则表达式的字符串操作和以下方案来实现它(MWE 使用文章类来说明)-

\documentclass{article}
\usepackage{expl3,l3regex}
\ExplSyntaxOn
\NewDocumentCommand{\compactlabel}{m}
{
    \tl_set:Nn \l_tmpa_tl { #1 }
    \regex_replace_all:nnN {[^a-zA-Z]} {\ } \l_tmpa_tl
    \regex_replace_all:nnN {\ ([a-zA-Z]{1,2}\ )*} {\ } \l_tmpa_tl
    \regex_replace_all:nnN {^[a-zA-Z]{1,2}\ } {\ } \l_tmpa_tl
    \regex_replace_all:nnN {\ [a-zA-Z]{1,2}$} {\ } \l_tmpa_tl
    \regex_replace_all:nnN {^\ +} {} \l_tmpa_tl
    \regex_replace_all:nnN {\ +$} {} \l_tmpa_tl
    \regex_replace_all:nnN {\ +} {\ } \l_tmpa_tl
    \regex_replace_all:nnN {\ } {_} \l_tmpa_tl
    \regex_replace_all:nnN {(^\w{1,20})\w*} {\1} \l_tmpa_tl
    \regex_replace_all:nnN {_$} {} \l_tmpa_tl
    \tl_use:N \l_tmpa_tl
}
\ExplSyntaxOff
\begin{document}
% \sidebyside is a temporary command just to display and illustrate the point
\newcommand*{\sidebyside}[1]{
        #1

        \compactlabel{#1}
}

    \sidebyside{A 1st Mathematical Primer for the universe of chimpmunks}
\end{document}

我的目标:

  1. 参数字符串必须清除所有单字母和双字母的单词以及所有数字和非字符。
  2. 字符串中的所有多个或单个空格都必须用下划线替换。
  3. 输出的最后一个或第一个字符不能是下划线。
  4. 字符串大小应缩短为 20**。

因此在 MWE 中,我将其视为输出 -

A 1st Mathematical Primer for the universe of chimpmunks
mathematical_primer

** 请注意上面那行的神奇数字 20 \regex_replace_all:nnN {(^\w{1,20})\w*} {\1} \l_tmpa_tl

** 理想情况下,我希望这个数字是一个变量,默认设置为 20。因此,如果我调用它,\compactlabel{#1}它应该意味着 20,如上所述。但我还想调用类似的东西\compactlabel[10]{#1},让字符串大小减少 10。

PS:说实话,我不敢说我​​完全理解 expl3 或 l3regex 语法。我从 tex.stackexchage 论坛复制并改编了它。

答案1

使用可选参数:

\documentclass{article}
\usepackage{xparse}
%\usepackage{l3regex} % only for releases earlier than June 2017

\ExplSyntaxOn
\NewDocumentCommand{\compactlabel}{O{20}m}
 {
  \tl_set:Nn \l_tmpa_tl { #2 }
  \regex_replace_all:nnN {[^a-zA-Z]} {\ } \l_tmpa_tl
  \regex_replace_all:nnN {\ ([a-zA-Z]{1,2}\ )*} {\ } \l_tmpa_tl
  \regex_replace_all:nnN {^[a-zA-Z]{1,2}\ } {\ } \l_tmpa_tl
  \regex_replace_all:nnN {\ [a-zA-Z]{1,2}$} {\ } \l_tmpa_tl
  \regex_replace_all:nnN {^\ +} {} \l_tmpa_tl
  \regex_replace_all:nnN {\ +$} {} \l_tmpa_tl
  \regex_replace_all:nnN {\ +} {\ } \l_tmpa_tl
  \regex_replace_all:nnN {\ } {_} \l_tmpa_tl
  \regex_replace_all:nnN {(^\w{1,#1})\w*} {\1} \l_tmpa_tl
  \regex_replace_once:nnN {_$} {} \l_tmpa_tl
  \tl_use:N \l_tmpa_tl
 }
\ExplSyntaxOff

\begin{document}

A 1st Mathematical Primer for the universe of chimpmunks

\texttt{\compactlabel{A 1st Mathematical Primer for the universe of chimpmunks}}

\texttt{\compactlabel[10]{A 1st Mathematical Primer for the universe of chimpmunks}}

\end{document}

请注意,l3regex已包含在最新版本的内核中expl3

在此处输入图片描述

带有注释的修订版本;我还添加了将最后一个字符串小写的内容。最后两个示例最终得到的字符串相同,因为删除了末尾的下划线。

\documentclass{article}
\usepackage{xparse}
%\usepackage{l3regex} % only for releases earlier than June 2017

\ExplSyntaxOn
\NewDocumentCommand{\compactlabel}{O{20}m}
 {
  \tl_set:Nn \l_tmpa_tl { #2 }
  % remove non alphabetic/space characters
  \regex_replace_all:nnN {[^a-zA-Z\s]} {} \l_tmpa_tl
  % remove one or two character words
  \regex_replace_all:nnN {\b[a-zA-Z]{1,2}\b} {} \l_tmpa_tl
  % remove leading and trailing spaces
  \regex_replace_once:nnN {\A\s+} {} \l_tmpa_tl
  \regex_replace_once:nnN {\s+\Z} {\ } \l_tmpa_tl
  % change runs of spaces into one underscore
  \regex_replace_all:nnN {\s+} {_} \l_tmpa_tl
  % curtail at the stated limit (default 20)
  \regex_replace_all:nnN {(^\w{1,#1})\w*} {\1} \l_tmpa_tl
  % remove a possible trailing underscore
  \regex_replace_once:nnN {_\Z} {} \l_tmpa_tl
  % use the result
  \tl_set:Nx \l_tmpa_tl { \str_lower_case:f { \tl_use:N \l_tmpa_tl } }
  \tl_use:N \l_tmpa_tl
 }
\ExplSyntaxOff

\begin{document}

A 1st Mathematical Primer for the universe of chimpmunks

\texttt{\compactlabel{A 1st Mathematical Primer for the universe of chimpmunks}}

\texttt{\compactlabel[10]{A 1st Mathematical Primer for the universe of chimpmunks}}

\texttt{\compactlabel[11]{A 1st Mathematical Primer for the universe of chimpmunks}}

\texttt{\compactlabel[12]{A 1st Mathematical Primer for the universe of chimpmunks}}

\texttt{\compactlabel[13]{A 1st Mathematical Primer for the universe of chimpmunks}}

\end{document}

在此处输入图片描述

相关内容