将标记寄存器中的字符串切换为小写并通过包 soul 进行处理

将标记寄存器中的字符串切换为小写并通过包 soul 进行处理

我想将一个字符串存储在 token 寄存器中,将其转换为全小写,并通过\caps包提供的宏处理生成的字符串soul。也就是说,将字符串字符转换为小写字母,并使用随后的字母间距对后者进行排版。

我的问题涉及将原始字符串转换为全小写。我尝试使用 TeX 原语 \lowercase、LaTeX 命令 \MakeLowercase 以及包提供的相应命令textcase。使用每种替代方案,我最终都会收到不同的错误消息。

接下来是 MWE 和我的其中一个尝试。

\documentclass[12pt]{memoir}

\usepackage{soul}%,textcase}

\newtoks{\toktitle}
\newcommand{\doctitle}[1]{\toktitle={#1}}
% Workaround to have \caps doing its thing on a macro properly, 
% as described in the corresponding documentation.  
\def\soultitle{\MakeLowercase{\the\toktitle}}
\newcommand{\thetitle}{\caps\soultitle}
% One of my alternatives  
%\def\soultitle{\the\toktitle}
%\newcommand{\thetitle}{\caps\MakeLowercase{\soultitle}}    

\doctitle{This is the title}

\begin{document}
\pagestyle{empty}
\thetitle
\end{document}

有人能就这个问题提供指导吗?一如既往,提前致谢。

\soulregister解答:我只需要使用软件包文档中所述的命令soul。上面的 MWE 将如下所示:

\documentclass[12pt]{memoir}

\usepackage{soul}

\soulregister{\MakeLowercase}{1}

\newtoks{\toktitle}
\newcommand{\doctitle}[1]{\toktitle={#1}}
% Workaround to have \caps doing its thing on a macro properly, 
% as described in the corresponding documentation.  
\def\soultitle{\the\toktitle}
\newcommand{\thetitle}{\caps{\MakeLowercase{\soultitle}}}

\doctitle{This is the title}

\begin{document}
\pagestyle{empty}
\thetitle
\end{document}

抱歉。但愿这对某些人有用。

答案1

您需要一些\expandafter来调整扩展的顺序。

\documentclass[12pt]{memoir}

\usepackage{soul}%,textcase}

\newtoks{\toktitle}
\newcommand{\doctitle}[1]{\toktitle={#1}}
% Workaround to have \caps doing its thing on a macro properly, 
% as described in the corresponding documentation.  

\newcommand{\thetitle}{\expandafter\lowercase\expandafter
                       {\expandafter\caps\expandafter{\the\toktitle}}}


\doctitle{This is the title}

\begin{document}
\pagestyle{empty}
\thetitle
\end{document}

相关内容