提取句子中每个单词的首字母

提取句子中每个单词的首字母

我不知道是否已经存在这样的问题,但 20 分钟后我还没有找到。

还有类似的,比如如何定义一个命令,将输入参数中每个单词的首字母加粗?,不过和我的不一样。

我正在寻找一个命令\shortenthis{…},它可以提取命令中每个单词的首字母。\shortenthis{Leonard Euler}将给我们LE。如果是,\shortenthis{Pierre de Fermat}它应该给出PdF

这个想法是为了缩短名字。

我猜这对 LaTeX3 来说很“简单”(虽然我是新手,但我查看了文档和本网站中的示例,但做不到),但任何解决方案都会被接受。

答案1

我发布的链接中几乎复制了 cgnieder 的解决方案。

\documentclass{scrartcl}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand\shortenthis{ m }
    {
        \shorten_this:n { #1 }
    }

\seq_new:N \l_shorten_seq
\cs_new_protected:Npn \shorten_this:n #1
    {
        \seq_set_split:Nnn \l_shorten_seq { ~ } { #1 }
        \seq_map_inline:Nn \l_shorten_seq
            {
                \tl_head:n { ##1 }
            }
    }

\ExplSyntaxOff
\begin{document}
\shortenthis{Pierre de Fermat}
\shortenthis{Leonard Euler}
\end{document}

答案2

在这个答案中,宏\getargsC将参数的每个单词提取到宏\argi\argii等中。然后我设置了一个循环来用一个简单的\def

\documentclass{article}
\usepackage{readarray}
\usepackage{ifthen}
\newcounter{index}\setcounter{index}{0}
\def\firstletters#1{%
  \getargsC{#1}%
  \whiledo{\theindex<\narg}{%
    \stepcounter{index}%
    \edef\nextword{\csname arg\romannumeral\theindex\endcsname}%
    \expandafter\getfirst\nextword\relax%
  }%
}
\def\getfirst#1#2\relax{#1}
\begin{document}
\firstletters{This is a test of the Emergency Broadcast System.}
\end{document}

在此处输入图片描述

相关内容