我想将一个字符串存储在 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}