更新 2020-01-14

更新 2020-01-14

我想将由字母、数字和控制序列组成的标记列表转换为小写\\。我尝试使用\str_lowercase:n,但控制序列未覆盖文本。

\documentclass{article}

\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\lowertl}{m}{%
  \tl_set:Nn \l_tmpa_tl {#1}
  \str_lowercase:f {\tl_to_str:N \l_tmpa_tl}
}
\ExplSyntaxOff


\begin{document}
  \lowertl{This is my\\ Text}
\end{document}

运行 xelatex 的输出是:

this is my““ text

是否有一种简单的方法来迭代标记列表中的标记并仅将字母小写?

答案1

更新 2020-01-14

LaTeX 内核现在具有\\强大的开箱即用功能。与最新expl3函数一起使用时\text_lowercase:n,无需进行额外调整即可使用。原始答案中关于字符串的评论相对文本仍然有效:您正在改变文本的大小写。

原始答案

该函数\str_lowercase:n用于制作字符串小写,并且用于程序数据而不是文本。你想要\text_lowercase:n。唯一的问题是\\不是引擎强大的,并且的实现 期望“文本”是字符标记、扩展为字符标记的东西或引擎强大的命令。我们可以通过在本地使引擎强大来\text_lowercase:n解决这个问题:\\

\documentclass{article}

\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand \LowerCase { m }
  {
    \group_begin:
      \cs_set_protected:Npx \\ { \exp_not:o \\ }
      \text_lowercase:n {#1}
    \group_end:
  }
\ExplSyntaxOff


\begin{document}
  \LowerCase{This is my\\Text}
\end{document}

如果你\\在全球范围内实现稳健,那么一切都将保持可扩展性

\documentclass{article}

\usepackage{etoolbox}
\robustify\\
\usepackage{xparse}

\ExplSyntaxOn
\DeclareExpandableDocumentCommand \LowerCase { m }
  { \text_lowercase:n {#1} }
\ExplSyntaxOff

\begin{document}
  \LowerCase{This is my\\Text}
\end{document}

请注意,在任何一种情况下,都不需要存储#1在标记列表变量中。

答案2

这不是一个可扩展的版本(而且我不确定这是否是真正要求的)

基本思想是在出现的地方分割标记\\,将各部分存储在\seq变量中,更改列表中符号的大小写并将各部分粘合在一起,然后\\再次填充。

\documentclass{article}

\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\lowertl}{m}{
  \seq_set_split:Nnn \l_tmpa_seq {\\} {#1} 
  \seq_map_inline:Nn \l_tmpa_seq {
    \seq_put_right:Nx \l_tmpb_seq {\str_lowercase:n {##1}}
  }
  \seq_clear:N \l_tmpa_seq
  \seq_map_inline:Nn \l_tmpb_seq {
    \int_incr:N \l_tmpa_int
    \int_compare:nNnTF { \l_tmpa_int } < {\seq_count:N \l_tmpb_seq }
    {\seq_put_right:Nn \l_tmpa_seq { ##1 \\ } }
    {\seq_put_right:Nn \l_tmpa_seq { ##1} }% Don't add the \\
  }
  \seq_use:Nn \l_tmpa_seq {}
}
\ExplSyntaxOff


\begin{document}
\noindent\lowertl{This is my\\ Text @\\ FOO OTHER STUFF #}
\end{document}

在此处输入图片描述

相关内容