babelbib “禁用”英语替换,但不禁用德语替换

babelbib “禁用”英语替换,但不禁用德语替换

我遇到了一个非常奇怪的问题:当更改语言babel并结合使用时babelbib,某些替换会完全停止工作。我花了几个小时才找到这个原因。请考虑以下最小示例:

\documentclass{article}

\usepackage[american]{babel}

\makeatletter

\title{Test}

\begin{document}

\section*{{\@title}}
This is the {\@title} document.

\end{document}

这会产生一份很好的文档:

这份文件很好

如果我babelbib像这样添加包

\documentclass{article}

\usepackage[american]{babel}
\usepackage{babelbib}

\makeatletter

\title{Test}

\begin{document}

\section*{{\@title}}
This is the {\@title} document.

\end{document}

替代\@title停止工作:

本文件不正确

babel有趣的是,当语言设置为德语时,不会出现此问题:

\documentclass{article}

\usepackage[ngerman]{babel}
\usepackage{babelbib}

\makeatletter

\title{Test}

\begin{document}

\section*{{\@title}}
This is the {\@title} document.

\end{document}

这将产生一份完美的文档:

这个文档也很好

类似地,使用ngermanbabel但删除babelbib,不会出现此问题:

\documentclass{article}

\usepackage[ngerman]{babel}
\usepackage{babelbib}

\makeatletter

\title{Test}

\begin{document}

\section*{{\@title}}
This is the {\@title} document.

\end{document}

这个文档也很好

我现在的问题是:这里发生了什么,我该如何解决?我有使用babel和的德语文档,babelbib需要将其翻译成英语。更改语言babel并替换某些文本时,替换会停止工作,如下例所示。有没有办法使用babelbib英语作为babel语言而不会出现此问题?

将语言保留babel为德语不是一个选择,因为我需要特定于语言的参考列表、目录等。我在 Windows 7 上使用最新的 MiKTeX(32 位),并且刚刚更新了所有软件包,以防万一。

答案1

babel.def这是因为

\AtEndOfPackage{%
  \AtBeginDocument{%
    \@ifpackageloaded{hhline}%
      {\expandafter\ifx\csname normal@char\string:\endcsname\relax
       \else
         \makeatletter
         \def\@currname{hhline}\input{hhline.sty}\makeatother
       \fi}%
      {}}}

当在开始文档挂钩处执行时,您的\makeatletter之前\begin{document}操作就被中和了。\makeatother

无论如何,您的方法是错误的,因为不建议设置强制文件\makeatletter

在文档中提供标题的解决方案要简单得多。添加

\makeatletter
\def\title#1{%
  \gdef\@title{#1}%
  \global\let\thetitle\@title
}
\makeatother

\thetitle并在文档中使用。

\documentclass{article}

\usepackage[american]{babel}
\usepackage{babelbib}

\makeatletter
\def\title#1{%
  \gdef\@title{#1}%
  \global\let\thetitle\@title
}
\makeatother


\title{Test}

\begin{document}

\section*{\thetitle}
This is the {\thetitle} document.

\end{document}

相关内容