Автоматически использовать первую букву первого слова в новом предложении в LaTeX - PullRequest
9 голосов
/ 12 мая 2010

Я знаю, что одним из моментов хвастовства LaTeX является то, что у него нет такого поведения Microsoft. Тем не менее, иногда это полезно.

LaTeX уже добавляет дополнительный пробел после ввода (без обратной косой черты) периода, поэтому должна быть возможность сделать его автоматически прописным и для следующей буквы.

Есть ли очевидный способ написания макроса, который делает это, или есть пакет LaTeX, который уже делает это?

Ответы [ 3 ]

4 голосов
/ 12 мая 2010

Следующий код решает проблему.

\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.

3 голосов
/ 15 мая 2010
1000 лет назад эта идея обсуждалась на comp.text.tex, и общий вывод заключался в том, что вы не можете сделать это удовлетворительно. В моей книге удовлетворительно - не делать персонажей активными, но я не понимаю, как это вообще может сработать.

лично, я бы хотел сделать пространство активным, а затем посмотреть \ spacefactor и \ MakeUppercase на следующий символ, если коэффициент равен 3000.

что-то вроде

\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 голосов
/ 26 июля 2010

Я решил решить ее следующим образом:

Так как я всегда компилирую код LaTeX три раза, прежде чем окуляю результат (чтобы разбить страницы на страницы и ссылки), я решил встроить в этот процесс капитализацию предложений.

Таким образом, теперь у меня есть сценарий оболочки, который сначала вызывает мой сценарий капитализации (написанный на CRM114), затем три раза pdflatex, а затем окуляр. Таким образом, все происходит в результате одной команды.

...