如何才能输出命令参数的首字母?

如何才能输出命令参数的首字母?

我有一个命令,它以字符串作为参数并对其应用某种格式。我还希望在某些情况下(当计数器达到某个值时)它只打印参数的第一个字母。我该怎么做?

我知道如何管理计数器,但不知道如何将输出更改为参数的首字母。我会使用正则表达式,但我不知道如何实现它。环顾四周,我发现l3regex,但它看起来没有文档,如果没有它,我就无法理解我在其他答案中找到的例子。

附言:我也不知道该用什么标签来回答这个问题。如果你想编辑它们,欢迎你。

答案1

提取某个字符首字母的最简单方法是使用如下命令

\def\firstletter#1#2@{#1}

将此命令与要从中提取首字母的单词一起使用,后跟字符@\firstletter hello@。调用此命令时#1,即h,将被打印,而#2,即ello,将被丢弃。此命令中的 的功能@只是标记字符串的结尾,以便#2可以提取字符串首字符和结尾之间的所有内容。您可以使用任何内容代替@此处的内容,但您应该使用不应出现在“单词” 中的内容#1#2

我不太清楚您想如何使用它,但您谈到应用某种格式并根据计数器的值打印第一个字母。以下命令符合此描述:

\newcommand\VagueCommand[1]{%
  \refstepcounter{mycounter}%
  \ifnum\value{mycounter}=5\firstletter#1@%
  \else\textbf{#1}%
  \fi%
}

因此,\VagueCommand将其内容排版为粗体,但第五次迭代打印的第一个字母除外#1。有了这个,下面的 MWE 输出:

在此处输入图片描述

以下是完整内容最小工作示例

\documentclass{article}
\newcounter{mycounter}% define a new counter
\def\firstletter#1#2@{#1} % print first token in #1#2
\newcommand\VagueCommand[1]{%
  \refstepcounter{mycounter}% increment counter
  \ifnum\value{mycounter}=5\firstletter#1@% test for mycounter=5
  \else\textbf{#1}% otherwise in bold
  \fi%
}

\begin{document}

  \VagueCommand{one}
  \VagueCommand{two}
  \VagueCommand{three}
  \VagueCommand{four}
  \VagueCommand{five}
  \VagueCommand{six}
  \VagueCommand{seven}
  \VagueCommand{eight}

\end{document}

答案2

@Andrew 的回答一般情况下是可行的,但在某些情况下会出现问题。我能做的最好的事情(感谢@Schrödinger 的猫评论)是这样的:

\documentclass{article}
\usepackage{xstring}

\newcounter{mycounter}

\newcommand{\mycommand}[1]{
    \addtocounter{mycounter}{1}
    \ifnum\value{mycounter}<3
        \textbf{#1}
    \else
        \emph{\StrChar{#1}{1}}
    \fi
}

\begin{document}
    \mycommand{foo}
    \mycommand{bar}
    \mycommand{lorem}
    \mycommand{ipsum}
\end{document}

输出:

代码输出

相关内容