使用 xstring 拆分字符串并对分离的字符串使用命令

使用 xstring 拆分字符串并对分离的字符串使用命令

我想将一个字符串拆分成两部分,第一个字母在第一部分,其余字母在第二部分。然后我想将整个字符串转换为大写,并将第二部分写入 \scriptsize。现在,这些命令可以单独运行,但如果我开始将它们混合成一个命令,它就不再起作用了。

\documentclass{article}
\usepackage{amsmath,xstring}

\newcommand{\first}[1]{\StrLeft{#1}{1}}
\newcommand{\last}[1]{\StrGobbleLeft{#1}{1}}
\newcommand{\UP}[1]{\MakeUppercase{#1}}
\newcommand{\script}[1]{\scriptsize{#1}}
\newcommand{\getsc}[1]{\MakeUppercase{\first{#1}\script{\last{#1}}}}

\begin{document}
    {\scriptsize Text}, \first{Theorem}, \last{Definition}, \UP{small case text}, {\script{SOME text}},
    %\getsc{Theorem}
\end{document}

这有效并给出输出在此处输入图片描述

但以下并没有结束编译

\documentclass{article}
\usepackage{amsmath,xstring}

\newcommand{\first}[1]{\StrLeft{#1}{1}}
\newcommand{\last}[1]{\StrGobbleLeft{#1}{1}}
\newcommand{\UP}[1]{\MakeUppercase{#1}}
\newcommand{\script}[1]{\scriptsize{#1}}
\newcommand{\getsc}[1]{\MakeUppercase{\first{#1}\script{\last{#1}}}}

\begin{document}
    {\scriptsize Text}, \first{Theorem}, \last{Definition}, \UP{small case text}, {\script{SOME text}},
    \getsc{Theorem}
\end{document}

我得到以下输出编译。在此处输入图片描述

答案1

换句话说,您想要伪造\textsc,可能是因为您的字体不支持小型大写字母。

\documentclass{article}

\ExplSyntaxOn

\NewDocumentCommand{\fakesc}{m}
 {
  \text_uppercase:n { \tl_head:n { #1 } }
  {\scriptsize\text_uppercase:n { \tl_tail:n { #1 } }}
 }

\ExplSyntaxOff


\begin{document}

\fakesc{Theorem}

\fakesc{theorem}

\end{document}

在此处输入图片描述

您的方法不起作用,因为\StrLeft{#1}{1}这是一组用于生成(和打印)第一个令牌的指令。

如果你想要使用xstring(我不推荐)

\documentclass{article}
\usepackage{xstring}

\newcommand{\getsc}[1]{%
  \StrLeft{#1}{1}[\headtoken]%
  \StrGobbleLeft{#1}{1}[\tailtokens]%
  \MakeUppercase{\headtoken\scriptsize\tailtokens}%
}

\begin{document}

\getsc{Theorem}

\getsc{theorem}

\end{document}

答案2

有很多方法可以做到这一点,但在这种情况下我不会使用 xstring 包。

使用分隔宏,您可以非常轻松地拾取字符串的头和尾。

\documentclass{article}
\begin{document}

\def\head#1{{\Huge #1}\ignorespaces}
\def\tail#1{{\scriptsize#1}}

\def\myfancymacro#1{%
        \def\temp##1##2;{%
             \head{##1}
             \tail{##2}
         }
   \expandafter\MakeUppercase{\temp#1;}
}

\myfancymacro{theorem}
\end{document}

还有许多其他方法。Xparse 和 l3 模块都有很多命令可以实现这一点。

相关内容