如何像 meme 中那样将奇数位置的每个字母大写?

如何像 meme 中那样将奇数位置的每个字母大写?

例如,SoMeThInGlIkEtHiS

如何才能实现这一点?我正在写一篇模因论文,这很重要……

答案1

包装内容稍微简短一些xstring

\documentclass{article}
\usepackage{xstring}
\newif\ifupper\uppertrue
\newcommand{\mixedcase}[1]{%
\StrSplit{#1}{1}{\currentchr}{\tailchr}%
\ifupper\MakeUppercase{\currentchr}\upperfalse\else\MakeLowercase{\currentchr}\uppertrue\fi%
\IfStrEq{\tailchr}{}{\uppertrue}{\mixedcase{\tailchr}}%
}
\begin{document}
\mixedcase{something like this}
\end{document}

输出相同安德鲁斯的回答

解释:在第一个字符处拆分字符串,根据切换按钮(\ifupper)将该字符变为大写或小写,切换切换按钮,检查字符串中是否还有剩余字符(拆分的第二部分不为空),如果是,则递归调用该命令,如果没有,则重置切换按钮进行下一次操作并停止。

答案2

LaTeX3 版本,改编自 egreg 的答案这里

\documentclass{article}
\usepackage{xparse}
\usepackage{expl3}

\ExplSyntaxOn
\NewDocumentCommand{\markletters}{m}
 {
  \int_zero:N \l_tmpa_int
  \tl_set:Nn \l_tmpa_tl { #1 }
  % replace spaces with something different
  \tl_replace_all:Nnn \l_tmpa_tl { ~ } { \c_space_tl }
  \tl_map_inline:Nn \l_tmpa_tl
   {
    \tl_if_blank:eTF { ##1 }
     { ~ } % don't advance the counter and issue a space
     {
      \int_if_odd:nTF { \l_tmpa_int } { \tex_lowercase:D } { \tex_uppercase:D } { ##1 }
      \int_incr:N \l_tmpa_int
     }
   }
 }
\prg_generate_conditional_variant:Nnn \tl_if_blank:n { e } { T,F,TF,p }
\ExplSyntaxOff

\begin{document}

\markletters{something like this}

\end{document}

在此处输入图片描述

答案3

以下是使用正则表达式的略有不同的 LaTeX3 实现。空格字符被视为字母,因此两行

\CaPiTaLiSe{Something like this}
\CaPiTaLiSe{Somethinglikethis}

产生略有不同的大小写:

在此处输入图片描述

以下是代码:

\documentclass{article}

\usepackage{xparse}
\ExplSyntaxOn
\seq_new:N \l_evan_letters_seq
\cs_new_protected_nopar:Nn \evan_make_upper:n {
  \str_uppercase:n {#1}
  \cs_set_eq:NN \evan_capitalise:n \evan_make_lower:n
}
\cs_new_protected_nopar:Nn \evan_make_lower:n {
  \str_lowercase:n {#1}
  \cs_set_eq:NN \evan_capitalise:n \evan_make_upper:n
}
\NewDocumentCommand\CaPiTaLiSe{m}{
  \regex_split:nnN {} {#1} \l_evan_letters_seq
  \cs_set_eq:NN \evan_capitalise:n \evan_make_upper:n
  \seq_map_inline:Nn \l_evan_letters_seq {\evan_capitalise:n {##1} }
}
\ExplSyntaxOff
\begin{document}

  \CaPiTaLiSe{Something like this}

  \CaPiTaLiSe{Somethinglikethis}

\end{document}

\evan_capitalise:n我有一个在选择大写和小写之间切换的虚拟宏,而不是增加计数器。

相关内容