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

mem*_*ius 10 latex letter capitalize uppercase

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

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

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

Ale*_*tov 5

以下代码解决了该问题。

\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
Run Code Online (Sandbox Code Playgroud)

\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其插入。

  • 我想你在 catcode 之前缺少了一个 `\let\period=.`。只有当您对句点的使用方式表现良好时,这种标记修改才会起作用:`{\em first.} second` 效果不佳。+1 巧妙,不过。 (2认同)

mem*_*ius 3

我决定通过以下方式解决它:

由于我总是在确定结果之前将 LaTeX 代码编译三次(以正确分页和引用),因此我决定将句子的大写构建到该过程中。

因此,我现在有一个 shell 脚本,它首先调用我的大写脚本(用 CRM114 编写),然后调用 pdflatex 3 次,然后调用 okular。这样,所有的事情都会作为单个命令的结果发生。