自动将LaTeX中新句子中第一个单词的首字母大写

Automatically capitalize first letter of first word in a new sentence in LaTeX

我知道乳胶的一个吹嘘点是它没有这种微软件行为。尽管如此,它有时还是有用的。

在您键入(非反斜杠)句点后,LaTex已经添加了一个额外的空格,因此它也可以使以下字母自动大写。

有没有一种明显的方法来编写这样的宏,或者有一个乳胶包已经这样做了?


下面的代码解决了这个问题。

1
2
3
4
5
6
7
8
9
10
11
\let\period.
\catcode`\.\active
\def\uppercasesingleletter#1{\uppercase{#1}}
\def.{\period\afterassignment\periodx\let
ext= }
\def \periodx{\ifcat\space
ext
ext\expandafter\uppercasesingleletter \else\expandafter
ext\fi
}

First. second.third.  relax.relax. up

\let\period.保存期

\catcode\.\active使所有句点都成为活动符号(如macro)。

\def\uppercasesingleletter#1{\uppercase{#1}}定义宏\uppercasesingleletter以使以下字母自动大写。

\def.{\period\afterassignment\periodx\let
ext= }
写入保存的期间并检查下一个符号。

如果下一个字母是空格,则插入\uppercasesingleletter


很久以前,有人在comp.tex t.tex上讨论过这个想法,总的结论是你做不好。在我的书中,令人满意的是,不需要让角色活跃起来,但我看不出这是如何起作用的。

就我个人而言,我想让空间活动,然后让它查看space factor,如果因子为3000,则将其设为大写。

有点像

1
2
3
4
5
6
7
8
9
10
11
12
13
\catcode\ \active % latex already has a saved space character -- \space
\def {\ifhmode% \spacefactor is invalid
% (or something) in vertical mode
\ifnum\spacefactor<3000\else% note: with space active,
% even cs-ended lines need %-termination
\expandafter\gobbleandupper\fi}%
\def\gobbleandupper#1{\def\tempa{#1}\def\tempb{ }%
\ifx\tempa\tempb% can''t indent the code, either :-(
% here, we have another space
\expandafter\gobbleandupper% try again
\else\space% insert a"real" space to soak up the
% space factor
\expandafter\MakeUppercase\fi}%

这并不能真正做到这一点——有足够的零头编织一个费尔伊斯尔跳投。例如,假设我们不能依赖乳胶中的每一个字母,如何将段落的第一个字母大写?

不。。。不管它有多痛(这就是为什么我要避免不必要的关键操作),我们都需要"正确地"输入乳胶:-(


我决定用以下方法解决:

因为我总是在确定结果之前三次编译乳胶代码(为了正确地进行分页和引用),所以我决定在这个过程中构建语句的大写。

因此,我现在有一个shell脚本,它首先调用我的大写脚本(用crm114编写),然后调用pdflatex三次,然后调用okular。这样,所有的事情都是由一个命令产生的。