Специальные имена в Латексе

В моем английском латексном файле тезиса, как упомянуть следующее не английские слова: François, École Fédérale?

Спасибо и всего наилучшего!

5
задан Tim 22 March 2010 в 19:42
поделиться

2 ответа

Традиционным способом является использование макроса добавления акцента:

Fran\c{c}ois
\'Ecole F\'ed\'erale

(Вы также можете написать Fran \ c {} cois или Fran \ c cois ; макрос \ c не использует параметров; фигурные скобки или пробел - это всего лишь уловка, позволяющая LaTeX увидеть правильное имя макроса.)

В противном случае попробуйте следующее:

\usepackage[utf8]{inputenc}

и введите акценты напрямую в кодировке UTF-8.

Есть множество более или менее тонких проблем со шрифтами и расстановкой переносов.

13
ответ дан 18 December 2019 в 08:27
поделиться

Если вы не пойдете по пути UTF8 inputenc и при этом будете писать много таких имен, я бы предложил определить для них макросы. В самом простом случае вы можете сказать

\newcommand\Francois{Fran\c cois}
но тогда вам нужно быть уверенным, что вы используете его в таком виде: \Francois{}, чтобы пробелы после него не были заглочены.

С другой стороны, следующая техника тоже работает довольно хорошо (хотя я не могу приписать себе заслуги в ее изобретении - я увидел ее в коротком докладе Филипа Тейлора на BachoTeX 2009):

\makeatletter
\let\latex@less<
\catcode`<13
\def<{\ifmmode\latex@less\else\expandafter\find@name\fi}
\def\find@name#1>{\@nameuse{name.#1}}
\def\DefineName#1#2{\@namedef{name.#1}{#2}}
\makeatother

Теперь вы можете определять специальные имена, используя, например.

\DefineName{Francois}{Fran\c cois}
\DefineName{Ecole Federale}{\'Ecole F\'ed\'erale}

и позже вы можете использовать их в тексте с

I ran into <Francois> at the <Ecole Federale> the other day.

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


EDIT: в ответ на вопрос о том, что неправильно написанные имена не приводят к ошибкам, вы можете изменить определение \find@name на.
\def\find@name#1>{\ifcsname name.#1\endcsname
  \@nameuse{name.#1}%
\else
  \@latex@warning{Undefined name #1}%
\fi}

Обратите внимание, что \@latex@warning{...} можно изменить на \@latex@error{...}\@eha и он будет жаловаться более настойчиво. Или если вы хотите притвориться (или на самом деле быть) пакетом, вы можете использовать \Package(Warning|Error){<имя пакета>} вместо \@latex@(warning|error), и он больше не будет притворяться встроенной ошибкой LaTeX.

6
ответ дан 18 December 2019 в 08:27
поделиться
Другие вопросы по тегам:

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