Latex 影响下一个完整单词的Tex命令

Latex 影响下一个完整单词的Tex命令,latex,tex,typography,Latex,Tex,Typography,有没有可能有一个TeX命令,它将把整个下一个单词(或下一个字母直到但不包括下一个标点符号)作为参数,而不仅仅是下一个字母或{}组 我希望在某些首字母缩略词上使用\caps命令,但不希望反复键入花括号。关于命令后的空格:请参阅packagexspace和TeX常见问题解答项目 现在解释为什么这很难:正如你自己所指出的,像这样的事情似乎只能通过改变catcodes来完成。当TeX读取字符时,CATCODE被分配给字符,TeX一次读取一行,因此您不能对同一行上的其他空格执行任何操作,IMHO。也许有办

有没有可能有一个TeX命令,它将把整个下一个单词(或下一个字母直到但不包括下一个标点符号)作为参数,而不仅仅是下一个字母或{}组


我希望在某些首字母缩略词上使用\caps命令,但不希望反复键入花括号。

关于命令后的空格:请参阅package
xspace
和TeX常见问题解答项目

现在解释为什么这很难:正如你自己所指出的,像这样的事情似乎只能通过改变catcodes来完成。当TeX读取字符时,CATCODE被分配给字符,TeX一次读取一行,因此您不能对同一行上的其他空格执行任何操作,IMHO。也许有办法解决这个问题,但我看不到


下面是危险代码

此代码只在行尾执行您想要的操作,因此,如果您想要的是更“流畅”的无括号键入,但您愿意在每个首字母缩略词后点击“return”(以后不运行任何自动缩进),则可以使用以下方法:

\def\caps{\begingroup\catcode`^^20 =11\mcaps}
\def\mcaps#1{\def\next##1 {\sc #1##1\catcode`^^20 =10\endgroup\ }\next}

一种解决方案可能是将另一个角色设置为活动角色,并使用此角色进行转义。这并没有消除对结束字符的需要,而是避免了键入
\caps
宏,从而使键入更容易

因此,在非常特殊的情况下,以下工作

\catcode`\*=\active
\def*#1*{\textsc{\MakeTextLowercase{#1}}}

Now follows an *Acronym*.
不幸的是,如果没有额外的宏定义,这就不可能使用
\section*{}

在Xetex中,似乎可以利用unicode字符来实现这一点,因此可以定义

\catcode`\•=\active
\def•#1•{\textsc{\MakeTextLowercase{#1}}}

Now follows an •Acronym•.

这将减少对其他命令的影响,但当然需要将字符“•”映射到键盘的某个位置以供使用。

例如,首先创建您的命令

 \def\capsimpl#1{{\sc #1}}% Your main macro
捕捉空格或标点符号的解决方案:

\catcode`\@=11  
\def\addtopunct#1{\expandafter\let\csname punct@\meaning#1\endcsname\let} 
\addtopunct{ }
\addtopunct{.}    \addtopunct{,}    \addtopunct{?} 
\addtopunct{!}    \addtopunct{;}    \addtopunct{:} 

\newtoks\capsarg
\def\caps{\capsarg{}\futurelet\punctlet\capsx}
\def\capsx{\expandafter\ifx\csname punct@\meaning\punctlet\endcsname\let
       \expandafter\capsend  
       \else \expandafter\continuecaps\fi}

\def\capsend{\expandafter\capsimpl\expandafter{\the\capsarg}}
\def\continuecaps#1{\capsarg=\expandafter{\the\capsarg#1}\futurelet\punctlet\capsx}

\catcode`\@=12

@Debilski——我在论文中为首字母缩写写了一些类似于你的active*代码的东西。我激活了<然后\def来打印首字母缩写词,如果是第一次遇到它,还可以打印扩展名。我还允许在线定义扩展并使用.aux文件发送扩展(如果在声明之前使用),或者如果从未声明首字母缩略词,则报告错误,这有点脱离了深层次

总的来说,这在当时似乎是个好主意——我几乎不需要在我的实际文本中使用catcode 12(因为我所有的宏都在一个单独的.sty文件中),我让它在数学模式下运行,所以我无法预见任何困难。但男孩是脆弱的。。。我不知道有多少次我不小心破坏了我的构建,因为我改变了一些看似无关的东西。所以说,要非常小心地激活那些甚至非常常用的字符


另一方面,使用XeTeX和更高的unicode字符可能更安全,而且通常有简单的方法来键入这些额外字符,例如制作一个多(或组合)键(我通常将numlock或其中一个windows键映射到该键),以便例如multi-!-!产生~)。或者,如果您在emacs中运行,您可以使用C-\短暂切换到TeX输入模式,通过键入TeX命令插入unicode(尽管这对于实际键入TeX文档来说是一件痛苦的事情,因为它会截取您的实际文档,请不要尝试定义您自己的转义字符!)

如果没有那么多首字母缩略词,您可以考虑将\CAPS命令定义为\ CAP {Word},然后为每个单独的命令,即\NeWordCudie\\NimBe}{{Cops{NimB}}},我知道,并且我通常这样做,但是如果不遵循“或”{ },则该解决方案倾向于吞吐空白。另外,这意味着我需要为这些单词单独列出一个列表。这可能是个好主意,也可能不是,取决于具体情况。这也很好,我想在某个时候我知道这个包存在。我想,可能可以使用一个内部宏来检查每个字符,根据字母的值(或catcode),字母或者被更改,或者宏从循环返回。我只是做了一点实验,但我一直在出错。是的,我想你是对的,这可能会在某个意想不到的时刻变得非常糟糕。我一直认为,有了所有这些特克斯转换器,应该有可能让这样一个转换器作为一个“简单”的特克斯包工作。在某种程度上,我仍然认为这是可能的,但它给您的实际tex书写带来了许多其他限制。-虽然Unicode似乎更合适,但如果您从中盗取了太多字符,您实际上否认了xetex的所有优势,这样,您就不能再真正编写unicode了。\def对于解析html很好……它几乎是。问题在于像
这样的东西,它是完全有效的HTML。