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

时间:2010-05-12 11:01:33

标签: latex letter uppercase capitalize

我知道LaTeX的一个吹牛点是它没有这种微软的行为。然而,它有时很有用。

LaTeX在您键入(非反向)句点后已经添加了额外的空格,因此应该可以使其自动大写以下字母。

是否有一种明显的方法来编写一个执行此操作的宏,或者是否有一个已经执行此操作的LaTeX包?

3 个答案:

答案 0 :(得分:4)

以下代码解决了这个问题。

\let\period.
\catcode`\.\active 
\def\uppercasesingleletter#1{\uppercase{#1}}
\def.{\period\afterassignment\periodx\let\next= }
\def \periodx{\ifcat\space\next \next\expandafter\uppercasesingleletter \else\expandafter\next\fi}

First. second.third.  relax.relax. up

\let\period.保存期

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

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

\def.{\period\afterassignment\periodx\let\next= }写下已保存的句点并检查下一个符号。

\def \periodx{\ifcat\space\next \next\expandafter\uppercasesingleletter \else\expandafter\next\fi}如果下一个字母是空格,则插入\uppercasesingleletter

答案 1 :(得分:3)

很久以前在comp.text.tex上讨论过这个想法,而一般的结论是你不能令人满意地做到这一点。在我的书中,令人满意的是,没有让角色活跃起来,但我看不出它是如何起作用的。

就个人而言,我想让空间处于活动状态,如果系数为3000,则让它看看\ spacefactor和\ MakeUppercase下面的字符。

类似

\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}%

这并没有真正完成这项工作 - 有足够的松散结束来编织一个公平的跳投。例如,鉴于我们不能依赖于乳胶中的\ everypar,你如何大写一个段落的第一个字母?

不......无论多大的伤害(这就是为什么我避免不必要的关键操作)我们需要“正确”输入乳胶: - (

答案 2 :(得分:2)