Tho*_*nin 13
传统的方法是使用重音添加宏:
Fran\c{c}ois
\'Ecole F\'ed\'erale
Run Code Online (Sandbox Code Playgroud)
(你也可以写Fran\c{}cois或Fran\c cois; \c宏不使用参数;大括号或空格只是让LaTeX看到正确的宏名称的技巧.)
否则,试试这个:
\usepackage[utf8]{inputenc}
Run Code Online (Sandbox Code Playgroud)
并使用UTF-8编码直接键入重音符号.
字体和连字符存在许多或多或少的微妙问题.
如果您没有使用UTF8 inputenc路由,但发现自己编写了很多这些名称,我建议为它们定义宏.最简单的,你可以说
\newcommand\Francois{Fran\c cois}但是你需要确保使用它:\Francois{}所以之后的任何空格都不会被吞噬.
另一方面,以下技术也很有效(虽然我不能因为发明它而得到肯定 - 我最初在Philip Pach的2009年BachoTeX简短讲话中看到它):
\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错误.