第一个问题:包的环境amsmath

第一个问题:包的环境amsmath

我使用zref,但在对齐环境中数字显示不正确(尽管它们是用于方程的)。

例子:

\documentclass{report}
\usepackage{amsmath}
\usepackage{zref}
\usepackage{zref-user}

\begin{document}
    \chapter{a}
    \begin{align}
        a \zlabel{eq:a} \\
        b \zlabel{eq:b}
    \end{align}
    test: \zref{eq:a}, \zref{eq:a}
    \begin{equation}
        c \zlabel{eq:c}
    \end{equation}
    test2: \zref{eq:c}
\end{document}

在此处输入图片描述

我需要该zref包,因为我想引用其他子文件。

另外:图形引用似乎根本不起作用。

我究竟做错了什么?

答案1

第一个问题:包的环境amsmath

环境amsmath处理内容两次。第一次运行测量宽度,第二次运行设置方程。此外,它们支持\notag和朋友。支持是\label相当硬连线到环境中的。其他标记为\zlabel不受支持。

一个(粗略的)解决方法:

  1. \label在包的环境中使用amsmath
  2. 通过导入\labels 。\zlabelszref-xr
  3. \zref然后可以通过第二步中指定的带或不带前缀的方式访问导入的标签。

带前缀的示例:

\documentclass{report}
\usepackage{amsmath}
\usepackage{zref}
\usepackage{zref-user}
\usepackage{zref-xr}

\zexternaldocument*[self:]{\jobname}

\begin{document}
    \chapter{a}
    \begin{align}
        a \label{eq:a} \\
        b \label{eq:b}
    \end{align}
    test: \zref{self:eq:a}, \zref{self:eq:b}
    \begin{equation}
        c \zlabel{eq:c}
    \end{equation}
    test2: \zref{eq:c}
\end{document}

结果

第二个问题:图片引用

s 或 s\caption中的 s的引用按预期工作:figuretable

\documentclass{report}
\usepackage{zref}
\usepackage{zref-user}

\begin{document}
\chapter{a}
\begin{figure}[h]% "h" as exception to get a smaller image for TeX.SX.
  \caption{Figure caption}
  \zlabel{fig:caption}
\end{figure}
Test: \zref{fig:caption}
\end{document}

结果

答案2

这是在和 的任何其他数学环境中设置\zlabels 的另一种方法。这个想法是让store像往常一样,但在实际设置标签时让它同时设置常规和。这可以通过重新定义来实现,这是负责 中实际标签设置的宏。这里唯一要注意的是使用内部来完成任务,因为当设置为时,它会使其自身处于无操作状态,这正是环境中的情况。最后,如果你碰巧在使用,你应该确保你的重新定义不会被它的 调用覆盖。有了它,你alignamsmathamsmath\label\label\zlabel\ltx@labelamsmath\zref@label\zlabel\label\@gobblemultlinehyperrefnameref使用环境中的常规\label,但两个标签都得到定义(具有相同的名称,没有问题,因为标签系统是独立的)。

\documentclass{book}
\usepackage{amsmath}
\usepackage[user]{zref}
\usepackage{hyperref}

\makeatletter
\AddToHook { begindocument }
  {
    \@ifdefinable\myold@ltx@label{\let\myold@ltx@label\ltx@label}
    \newcommand*{\mybothlabels}[1]{%
      \myold@ltx@label{#1}%
      \zref@wrapper@babel\zref@label{#1}%
    }
    \renewcommand*{\ltx@label}[1]{\mybothlabels{#1}}
  }
\makeatother

\begin{document}
\chapter{Chapter}
\begin{align}
  a \label{eq:a} \\
  b \label{eq:b}
\end{align}
test: \zref{eq:a}, \ref{eq:a}, \zref{eq:b}, \ref{eq:b}
\begin{equation}
  c \label{eq:c}
\end{equation}
test2: \zref{eq:c}, \ref{eq:c}
\end{document}

在此处输入图片描述

相关内容