我遇到了一个非常奇怪的问题:当更改语言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}
这将产生一份完美的文档:
类似地,使用ngerman
,babel
但删除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}