用于添加到 \ref 数字的宏 - 被 babel 包破坏

用于添加到 \ref 数字的宏 - 被 babel 包破坏

我需要将一个整数添加到参考编号中。为了便于理解,假设我有一个练习列表,其中第一个练习有\label{exr:thisone}(假设是编号 6),然后我想说“在练习 6、7 和 8 中...”。

为此,有一个宏可以\refplus让我编写

in exercises \ref{exr:thisone}, \refplus{exr:thisone}{1} and \refplus{exr:thisone}{2}...

嗯,我确实有这样一个宏,如下所示。而且它有效!...除非我使用 babel 包。在下面的示例文档中,只要注释掉,一切都会按预期工作\usepackage[spanish]{babel}。但如果我激活它,宏就会中断。

据我所知,问题在于(使用 babel)in\ref{#1}没有\setcounter{counterforrefplus}{\ref{#1}}返回值,因此 LaTeX 响应“缺少数字,视为零”。

有什么想法吗?具体来说,为什么 babel 会破坏宏,以及如何使宏与 babel 兼容?

\documentclass{article}
%\usepackage[spanish]{babel}
\newcounter{counterforrefplus}
\newcommand{\refplus}[2]{%
  \setcounter{counterforrefplus}{\ref{#1}}% copy \ref{#1} to counter
  \addtocounter{counterforrefplus}{#2}%     add #2 to counter
  \thecounterforrefplus}%                   display counter

\begin{document}
\section{First}\label{one}
Value of one = \ref{one}    \\
Value of one plus 3 = \refplus{one}{3}
\end{document}

答案1

您不能依赖\ref可扩展到数字。事实上,如果引用尚未建立,则会出错。

有了babel,该\ref命令就被故意弄得不可扩展。

可以修复它refcount

\documentclass{article}
\usepackage[spanish]{babel}
\usepackage{refcount}
\newcounter{counterforrefplus}
\newcommand{\refplus}[2]{%
  \setcounter{counterforrefplus}{\getrefnumber{#1}}% copy \ref{#1} to counter
  \addtocounter{counterforrefplus}{#2}%     add #2 to counter
  \thecounterforrefplus}%                   display counter

\begin{document}
\section{First}\label{one}
Value of one = \ref{one}    \\
Value of one plus 3 = \refplus{one}{3}
\end{document}

然而这不是解决方案。假设你在 6 和 7 之间添加一个练习。那么你的命令

\refplus{exr:thisone}{1} and \refplus{exr:thisone}{2}

将会偏离一个,您需要手动修复它们。

改用cleveref

\documentclass{article}
\usepackage[spanish]{babel}
\usepackage[spanish]{cleveref}

\newtheorem{exercise}{Ejercicio}
\crefname{exercise}{ejercicio}{ejercicios}

\begin{document}

\begin{exercise}\label{easy}
Easy.
\end{exercise}

\begin{exercise}\label{less-easy}
Less easy.
\end{exercise}

\begin{exercise}\label{though}
Tough.
\end{exercise}

\begin{exercise}\label{hey}
This is stated as an exercise, but is actually an open problem.
\end{exercise}

See \cref{easy,less-easy,hey}.

\end{document}

在此处输入图片描述

相关内容