utf8 inputenc 与 babel

utf8 inputenc 与 babel

我在 FreeBSD 上使用 TeXLive 2014。每个 LaTeX 文件都会产生以下警告:

LaTeX Warning: Please use \usepackage[latin2]{inputenc} with
           \usepackage[magyar]{babel}.

“Magyar” 是匈牙利语中匈牙利人的名字:)

我的文件的相关部分:

\documentclass[a4paper]{article}
\usepackage[magyar]{babel}
\usepackage[utf8]{inputenc}
\usepackage{t1enc}
\begin{document}
Árvíztűrő tükörfúrógép.
\end{document}

我可以跳过这个警告吗?还是应该做些什么来修复它?或者这可能是一个错误?

在 TeXLive 2014 之前不会出现此警告。

答案1

magyar.ldf正如 Psyconaut 指出的那样,CTAN 上现已提供更新版本,可以修复该问题。

在输入编码测试中存在一些错误。如果您选择作为编码,magyar.ldf则会收到相同的错误消息。的相关部分是: latin2magyar.ldf

\def\magyar@sugg@ie@lowb#1{\@latex@warning@no@line{Please use \string\usepackage[latin2]{inputenc} with\MessageBreak \string\usepackage[#1]{babel}}}%
  %** @param #1 \@inpenc@undefined@
  %** @param #2 input encoding name
  \def\magyar@sugg@ie@low#1#2#3\vfuzz#4{%
    \def\reserved@b{#2}%
    \def\reserved@a{latin2}%
    \ifx\reserved@a\reserved@b\else
      \def\reserved@a{utf8}%
      \ifx\reserved@a\reserved@b\else
        \def\reserved@a{utf8x}%
        \ifx\reserved@a\reserved@b\else
          \def\reserved@a{cp1250}%
          \ifx\reserved@a\reserved@b\else
            \magyar@sugg@ie@lowb{#4}%
          \fi
        \fi
      \fi
    \fi
  }

很明显,我们的目的是让latin2utf8utf8x编码cp1250不出现错误。看起来这个文件需要更新。

更新:更多分析表明,此命令期望接收的是

 \@inpenc@undefined@ {latin2}....\vfuzz{#1}

替换latin2为实际选择的编码,但实际接收的是

 \protect \@inpenc@undefined@ {latin2}....\vfuzz{#1}

因此,一个简单的解决方法是将定义的第一行更改为

 \def\magyar@sugg@ie@low\protect #1#2#3\vfuzz#4{%

因此模式匹配会吞噬\protect。在此阶段,我建议您将其复制magyar.ldf到工作目录或本地 texmf 树,然后在该副本中进行此更改。

更新pts 指出,上述方法在旧版本的 中不起作用babel。我无法测试,但他建议将定义更改为

\def\magyar@sugg@ie@low#1\@inpenc@undefined@#2#3\vfuzz#4{%

显然,它适用于所有版本。现在,它已包含在 CTAN 上的版本中magyar.ldf,因此现在建议的操作是更新到该版本。

答案2

使用suggestions=no选项magyar.ldf,它将解决您的问题:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\PassOptionsToPackage{defaults=hu-min,suggestions=no}{magyar.ldf}
\usepackage[magyar]{babel}
\begin{document}
Árvíztűrő tükörfúrógép.
\end{document}

相关内容