在数学计算中使用参考标签

在数学计算中使用参考标签

编辑这个答案指出一个好的解决方案。


我想在数学计算中使用参考标签,并且我认为如果我使用该calc包,它会相当简单。

\documentclass{article}

\usepackage{calc}

\usepackage{lineno}

\begin{document}

\linenumbers
First line

Second line\label{ls}

As found in \arabic{\ref{ls}-1}

\end{document}

我们发现,这并不起作用。

(我的实际计算会比这更复杂。这是一个简化版本。)

答案1

您可以使用以下组合refcountexpl3

在此处输入图片描述

\documentclass{article}

\usepackage{lineno,refcount}
\usepackage{expl3}

\ExplSyntaxOn
  \cs_new_eq:NN \calc \fp_eval:n
\ExplSyntaxOff

\begin{document}

\linenumbers
First line

Second line\linelabel{ls}

As found in \calc{\getrefnumber{ls}-1}

\end{document}

\getrefnumber0扩展其参数(如果引用尚未确定,则默认为),使其在计算中很有用。

虽然上面的例子使用lineno(因此,针对某些参考标记的特定包\linelabel,上述用法也应该适用于标准系统。\label\ref

答案2

在简单的情况下,您可以做类似的事情。显然,我不知道您的更复杂用法需要什么。这只是使用 LaTeX 计数器。

我已经将引用改为使用枚举,因为\ref{ls}没有返回数字,所以显然无法使用。

\documentclass{article}
\begin{document}
  \begin{enumerate}
    \item First line
    \item Second line\label{ls}
  \end{enumerate}
  \newcounter{mycounter}
  \setcounter{mycounter}{\ref{ls}}
  \addtocounter{mycounter}{-1}
  As found in \arabic{mycounter}
\end{document}

计算结果

答案3

还有另一种解决方案:

编辑:该代码的第一个版本包含一个愚蠢的错误,当引用生成的数字包含多位数字时,该错误导致代码无法工作;我现在已更正了这个问题。

\documentclass{article}

\makeatletter

\@ifdefinable\striphbox{\def\striphbox#1\hbox#2% #1 is the number, #2 is {}
  {{#1}}
}
\newcommand*\calcref[2]{%
  \ifcsname r@#1\endcsname
    \begingroup
      \edef\cs{\ref{#1}}%
      \def\next##1{\numexpr #2\relax}%
      \number\expandafter\expandafter\expandafter\next\expandafter\striphbox\cs
    \endgroup
  \fi
}

\makeatother

\begin{document}
  \begin{enumerate}
    \item First line
    \setcounter{enumi}{10}
    \item Second line\label{ls}
  \end{enumerate}
  As found in~\calcref{ls}{#1-1} and in~\calcref{ls}{7*#1+5}\ldots
\end{document}

在第一个参数中\calcref传递符号标签,在第二个参数中传递数字表达式,其中#1标记应包含引用数字的位置。

相关内容