\textsuperscript 和 \titlecap 的不同顺序有不同的效果

\textsuperscript 和 \titlecap 的不同顺序有不同的效果

在我的代码中这工作正常:

\textsuperscript{\titlecap{some text}} 

但这不能编译:

\titlecap{\textsuperscript{some text}}

为什么标签的顺序在这里很重要?

答案1

\titlecap必须逐个字符地检查其内容。它包括一些格式化命令的特殊配置,特别是基本 LaTeX 字体选择命令(连同其自己的\textnc命令,该命令指定不应被更改的文本)\titlecap

如果你texdoc titlecaps在计算机上输入命令行,你将会调出关于该包的文档titlecaps,其中介绍了该包的局限性以及它是如何工作的(完整的代码清单为那些愿意调查详细情况并了解如何添加\textsuperscript允许的格式化命令的人提供了文档(考虑到包的结构,这无疑是一项不简单的任务)。

答案2

由于 Don 刚刚在我的软件包(titlecaps)上击败了我,我必须深入挖掘我的技巧并找到一种tokcycle可以同时适用于这两种语法形式的方法。

按照目前的设置,当在输入流中遇到以下任何内容时,都会触发下一个 catcode-11 标记的未来大写:

  1. 最初进入常规

  2. catcode-10 空间令牌

  3. 连字符-

  4. 进入团体后{...}

显然,可以添加其他测试。以下是 MWE:

\documentclass{article}
\usepackage{tokcycle}
\newcommand\TitleCase[1]{%
  \def\capnext{T}% <- INITIAL ENTRY
  \tokcycle
    {\nextcap{##1}}
    {\def\capnext{T}\processtoks{##1}}% <- GROUP ENTRY
    {\addcytoks{##1}}
    {\addcytoks{##1}\def\capnext{T}}% <-CAT-10 SPACE
    {#1}%
  \the\cytoks
}
\newcommand\nextcap[1]{%
       \edef\tmp{#1}%
       \tctestifx{-#1}{\def\capnext{T}}{}% <- TEST FOR HYPHEN
       \tctestifcon{\if T\capnext}%
         {\tctestifcon{\ifcat\tmp A}% <- TEST FOR NEXT CAT-11
           {\addcytoks{\uppercase{#1}}\def\capnext{F}}%
           {\addcytoks{#1}}}%
         {\addcytoks{#1}}%
}
\begin{document}
This\textsuperscript{\TitleCase{some text}}. 

versus\TitleCase{\textsuperscript{some text}}.

\TitleCase{%
|here, {\bfseries\today{}, is [my]}
  really-big-test  
  (\textit{capitalizing} words). abc\textsuperscript{def}|

 here, {\bfseries\today{}, is [my]} 
  really-big-test 
  (\textit{capitalizing} words). abc\textsuperscript{def}}
\end{document}

在此处输入图片描述

通过在排版之前而不是排版过程中执行条件测试,编辑了字距调整功能,从而实现了更好的字距调整。因此,在排版时,对于最后一个块(用 看到\detokenize\expandafter{\the\cytoks}),这实际上是排版的内容:

在此处输入图片描述

相关内容