我使用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
不受支持。
一个(粗略的)解决方法:
\label
在包的环境中使用amsmath
。- 通过导入
\label
s 。\zlabels
zref-xr
\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的引用按预期工作:figure
table
\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
这是在和 的任何其他数学环境中设置\zlabel
s 的另一种方法。这个想法是让store像往常一样,但在实际设置标签时让它同时设置常规和。这可以通过重新定义来实现,这是负责 中实际标签设置的宏。这里唯一要注意的是使用内部来完成任务,因为当设置为时,它会使其自身处于无操作状态,这正是环境中的情况。最后,如果你碰巧在使用,你应该确保你的重新定义不会被它的 调用覆盖。有了它,你align
amsmath
amsmath
\label
\label
\zlabel
\ltx@label
amsmath
\zref@label
\zlabel
\label
\@gobble
multline
hyperref
nameref
使用环境中的常规\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}