自动为来自另一个文档的引用添加前缀?

自动为来自另一个文档的引用添加前缀?

我使用xr来引用论文补充材料中的方程式。我希望论文中引用的补充材料中的方程式自动以“S”为前缀,以便Eq.~\ref{eqn:first}在文本中显示为Eq. S1。理想情况下,补充文件中也应如此。我该怎么做?

答案1

这是一个结合xrprettyref包的解决方案。缺点是它迫使您使用\prettyref而不是\ref,但无论如何,您可能会受益于包提供的那种自动化prettyref:)

\documentclass{article}

\usepackage{xr}
\externaldocument[S]{myotherfile}

\usepackage{prettyref}
\newrefformat{Seq}{Eq.~S\ref{#1}}

\begin{document}
You can find more about \prettyref{Seq:myequation} in my other paper.
\end{document}

内容myotherfile.tex

\documentclass{article}
\begin{document}
\begin{equation}
    a=b \label{eq:myequation}
\end{equation}
\end{document}

主文件的输出:

在此处输入图片描述

答案2

这是旧帖子,但我今天试图完成此任务,但这些解决方案都无法解决我的问题。

这个帖子里有一些不错的答案,但没有一个是完美的。尤其是当你明确规定要在方程式前面加上“S”时在补充文件中(不仅仅在参考文献中)。

最可靠的方法是先将“S”添加到前面,然后再想办法交叉引用它。为此,请将其添加到补充文档(“supplemental.tex”)的序言中:

% Define chapter number
\newcommand{\snum}{S1}

% Prepend supplemental chapter to equation list
\renewcommand{\theequation}{\snum.\arabic{equation}}

现在像往常一样将方程式添加到文档中 - S1 将添加到所有方程式编号中。(我使用宏指定 S1 来演示这将适用于枚举列表等生成的前缀。)

添加一个方程式并从同一文档中引用它将包含 S1 及其所有引用。

\documentclass{article}

\usepackage{amsmath,amssymb}
\usepackage{xr}

% Define chapter number
\newcommand{\snum}{S1}

% Prepend supplemental chapter to equation list
\renewcommand{\theequation}{\snum.\arabic{equation}}

\begin{document}

% Equation to be referenced
\begin{eqnarray}
\label{eq:myequation}
    a=b
\end{eqnarray}

% Reference the equation as you normally would
Hello, the equation is \ref{eq:myequation}

\end{document}

编译将输出以下内容:

在此处输入图片描述

现在,要在另一个文档中引用此等式,只需在序言中使用标准 xr 方法:

\usepackage{xr}
\externaldocument{supplemental}

照常引用方程式:

\documentclass{article}

\usepackage{amsmath,amssymb}

\usepackage{xr}    
\externaldocument{supplemental}

\begin{document}

I'm cross-referencing to Equation \ref{eq:myequation}!

\end{document}

这将输出:

强调文字

我认为这个解决方案是理想的,因为文档包含引用的方程式是呈现(交叉)引用的权威。您可以将方程式从正文移动到补充文件,而不必担心重新格式化任何引用(只要标签名称得以保留)。

我想类似的方法可以适用于任何引用对象,如果你找出等同于

\renewcommand{\theequation}{\schap.\arabic{equation}}

用于图形、表格等

呼喊这家伙在 08 年弄清楚了方程式前面添加技巧。

答案3

\newcount\suppl
\suppl0
\def\Ref#1{\ifnum\suppl<1 \ref{#1} \else S\ref{#1}\fi}

并且在补充材料的开头你应该写上\suppl1。当然,你应该写Eq.~\Ref{eqn:first}而不是Eq.~\ref{eqn:first}

答案4

您的需求似乎与该包的用途类似cleveref。我个人认为这些参考资料这里那里非常简单并且适合测试和感受。

例如:

\documentclass[11pt]{article}
\usepackage{graphicx}
\usepackage{amsmath}
\usepackage{cleveref}
\crefname{equation}{Eq. S}{equations}

\begin{document}
\begin{align}
y&=a_1x+b_1\label{eqn:1}
\end{align}
\noindent
Standard equation reference (\textbackslash ref): \ref{eqn:1}\\
Cleveref equation reference (\textbackslash cref): \cref{eqn:1}
\begin{figure}[ht]\centering\rule{0.5\linewidth}{0.1\linewidth}\caption{First figure}\label{fig:1}\end{figure}
\begin{equation}
\begin{array}{l}
\displaystyle \int 1 = x + C\\
\displaystyle \int x = \frac{x^2}{2} + C \\
\displaystyle \int x^2 = \frac{x^3}{3} + C
\end{array} 
\label{eq:xdef}
\end{equation}
\noindent
Standard figure reference (\textbackslash ref): \ref{fig:1}\\
Cleveref figure reference (\textbackslash cref): \cref{fig:1}\\
And here is the reference using cleveref: \cref{eq:xdef}
\end{document}

此示例编译后的输出如下: cleveref 包的 \cref 图示

  • 引用指令有两种形式\cref\Cref分别用于添加小写和大写。
  • 我在序言部分自Equation定义了前缀。Eq. S

相关内容