代码之家  ›  专栏  ›  技术社区  ›  Tim unnamed eng

乳胶中的特殊名称

  •  5
  • Tim unnamed eng  · 技术社区  · 15 年前

    在我的英文论文乳胶文件中,如何提到以下非英语单词:fran_ois,cole f_d_rale?

    谢谢和问候!

    2 回复  |  直到 15 年前
        1
  •  13
  •   Thomas Pornin    15 年前

    传统的方法是使用强调添加宏:

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

    (你也可以写 Fran\c{}cois Fran\c cois ;的 \c 宏不使用任何参数;大括号或空格只是一种让LaTex看到正确宏名称的技巧。)

    否则,请尝试以下操作:

    \usepackage[utf8]{inputenc}
    

    直接输入重音符号,使用UTF-8编码。

    字体和连字符或多或少有一些微妙的问题。

        2
  •  6
  •   Steve    15 年前

    如果您不使用utf8的inputenc路径,但发现自己编写了很多这些名称,我建议您为它们定义宏。最简单的说,你可以说

    \newcommand\Francois{Fran\c cois}
    但是你需要确保这样使用它: \Francois{} 这样以后的任何空间都不会被狼吞虎咽。

    另一方面,以下技术也很好地工作(尽管我不能相信它的发明——我最初是在PhilipTaylor 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) 它不会再假装是一个内置的乳胶错误了。