Особые имена в латексе - PullRequest
       6

Особые имена в латексе

5 голосов
/ 22 марта 2010

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

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

Ответы [ 2 ]

13 голосов
/ 22 марта 2010

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

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

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

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

\usepackage[utf8]{inputenc}

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

Существует множество более или менее тонких проблем со шрифтами и переносами.

6 голосов
/ 23 марта 2010

Если вы не пойдете по пути 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) такими, какие вы хотите - они не обязательно должны быть связаны с правильно акцентированными именами.


РЕДАКТИРОВАТЬ: в ответ на проблему, что имена с ошибками не приводят к ошибкам, вы можете изменить определение с \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){<package name>} вместо \@latex@(warning|error), и он больше не будет представлять собой встроенную ошибку LaTeX.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...