将所有“A”替换为 \textsc{a}

将所有“A”替换为 \textsc{a}

我可以使用 catcode 将文档中的所有大写字母替换为 吗\textsc{\myletter}

编辑:我想通过一个函数来实现这一点,例如:

\thisismystring{BLABLABLA},转换为 BL{\textsc{a}}BL{\textsc{a}}BL{\textsc{a}}。

答案1

与我的评论相反,该xstring\StrSubstitute失败了

\usepackage{xstring}
\newcommand*{\replaceA}[1]{%
    \StrSubstitute{#1}{A}{\textsc{a}}%
}

以下解决方案使用 TeX 宏。

代码

\documentclass{article}
\makeatletter
\newcommand*{\replace}[3]{%
    \def\qrr@replace##1#2##2\@qrr@replace{##1\if\relax\detokenize{##2}\relax\else#3\qrr@replace##2\@qrr@replace\fi}%
    \qrr@replace#1#2\@qrr@replace}
\newcommand*{\replaceA}[1]{\replace{#1}{A}{\textsc{a}}}
\makeatother
\begin{document}
\replaceA{alAbAmA}
\replaceA{BLABLABLA}
\replaceA{not one capital a}

\replace{ALABAMA}{ABA}{\textsc{aba}}
\end{document}

输出

在此处输入图片描述

答案2

xstring简单:

\documentclass{article}
\usepackage{xstring}

\newcommand{\replaceA}[1]{%
  \begingroup\expandarg
  \StrSubstitute{#1}{A}{\textsc{a}}%
  \endgroup
}

\newcommand{\mystring}{BLABLA}

\begin{document}

\replaceA{BLABLA}

\replaceA{\mystring}

\end{document}

在此处输入图片描述


l3regex使用LaTeX3 模块的实现

\documentclass{article}
\usepackage{xparse,l3regex}

\ExplSyntaxOn
\NewDocumentCommand{\replaceA}{smo}
 {
  \IfNoValueTF{#3}
   {
    \IfBooleanTF{#1}
     { \repla_main:NV \l_tmpa_tl #2 }
     { \repla_main:Nn \l_tmpa_tl { #2 } }
    \tl_use:N \l_tmpa_tl
   }
   {
    \IfBooleanTF{#1}
     { \repla_main:NV #3 #2 }
     { \repla_main:Nn #3 { #2 } }
   }
 }
\cs_new_protected:Npn \repla_main:Nn #1 #2
 {
  \tl_set:Nn #1 { #2 }
  \regex_replace_all:nnN { A } { \c{textsc}\cB\{a\cE\} } #1
 }
\cs_generate_variant:Nn \repla_main:Nn { NV }
\ExplSyntaxOff

\newcommand{\mystring}{BLABLA}

\begin{document}

\replaceA{BLABLA}

\replaceA*{\mystring}

\replaceA{BLABLA}[\newstring]

\show\newstring

\replaceA*{\mystring}[\newstring]

\show\newstring

\end{document}

如果没有指定可选参数,则立即使用替换后获得的字符串,否则将其存储在指定的控制序列中。

*-variant 允许将宏作为参数传递。

相关内容