我刚刚买了《The LaTeX Companion》第三版,正在测试书中给出的示例。第 78 页的示例介绍了 \labelformat 和 \Ref 的使用。
\documentclass[10pt,a4paper]{article}
\usepackage[nospace]{varioref}
%\usepackage{babel}
\labelformat{section}{section~#1}
\labelformat{equation}{equation~(#1)}
\begin{document}
\section{An example}\label{sec}
\Ref{sec} shows the use of the \verb=\labelformat= declaration with a reference to \ref{eq}.
\begin{equation} a = b \label{eq} \end{equation}
\end{document}
如果你添加
\usepackage{babel}
无论你想用什么语言,你都可以得到
! Incomplete \iffalse; all text was ignored after line 11.
如果将 \Ref 替换为 \ref,一切仍可正常工作,但显然会丢失首字母的大写。
有没有什么办法可以解决这种不兼容问题?
我尝试过 [english]babel 和 [french]babel,但都没有选择。我尝试过 pdfLaTeX、LaTeX、XeLaTeX、LuaLaTeX……同样的问题……
谢谢
答案1
您应该向 报告此问题,babel
但一个快速的解决方法是恢复内部命令
\documentclass[10pt,a4paper]{article}
\usepackage[nospace]{varioref}
\makeatletter
\let\@kernel@ref@saved\@kernel@ref
\usepackage{babel}
\let\@kernel@ref\@kernel@ref@saved
\makeatother
\labelformat{section}{section~#1}
\labelformat{equation}{equation~(#1)}
\begin{document}
\section{An example}\label{sec}
\Ref{sec} shows the use of the \verb=\labelformat= declaration with a reference to \ref{eq}.
\begin{equation} a = b \label{eq} \end{equation}
\end{document}
babel
重新定义一些\label
/\ref
内部函数,以便活动简写字符可以工作,但这会撤销该补丁,因为补丁似乎对某些细节感到困惑 。因此,一些由 babel 激活的\Ref
字符在进行此更改后可能无法在标签中使用。"