Автоматически используйте для своей выгоды первую букву первого слова в новом предложении в ЛАТЕКСЕ

Я знаю, что одна из точек хвастовства Латекса - то, что это не имеет этого Микромягковатого поведения. Тем не менее, это иногда полезно.

ЛАТЕКС уже добавляет дополнительное пространство после Вас тип a (non-backslashed) период, таким образом, должно быть возможно заставить его автоматически использовать для своей выгоды следующую букву также.

Существует ли очевидный способ записать макрос, который делает это, или существует ли ЛАТЕКСНЫЙ пакет, который уже делает это?

10
задан ErikE 10 September 2010 в 17:16
поделиться

3 ответа

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

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

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

3
ответ дан 4 December 2019 в 00:23
поделиться

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

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

5
ответ дан 4 December 2019 в 00:23
поделиться

давным-давно эта идея обсуждалась на 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 в латексе, как вы прописываете первую букву абзаца?

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

4
ответ дан 4 December 2019 в 00:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: