对于我的论文,我使用回忆录类和\include
命令来包含所有章节。不幸的是,我在某些章节中使用了相同的图表标签。因此,标签完全不对。
我找到了解决我的问题的方法:
按照 Werner 的最初建议和他的最后命令(2016 年 5 月 30 日 14:19),我设法修复了图表和表格标签。但现在公式标签已关闭(即,equation
每当我引用公式时都会显示 ??)。
这是我的代码的一部分:
\documentclass[11pt,twoside,openright]{memoir}
\AtBeginDocument{% ...if you're using hyperref
\let\oldlabel\label% Copy original version of \label
\let\oldref\ref% Copy original version of \ref
}
\newcommand{\addlabelprefix}[1]{%
\renewcommand{\label}[1]{\oldlabel{#1-##1}}% Update \label
\renewcommand{\ref}[1]{\oldref{#1-##1}}% Update \ref
}
\newcommand{\removelabelprefix}{%
\renewcommand{\label}{\oldlabel}% Restore \label
\renewcommand{\ref}{\oldref}% Restore \ref
}
\addlabelprefix{a}
\include{chapter1}
欢迎提供任何有关如何解决此问题的建议!
答案1
我使用了沃纳的回答同上,但采用不同的方法:
- 每次开始一个 \chapter 时,辅助计数器就会增加,并且
\@currentprefix
定义为chapter::\number\value{auxchapter}
- 这在和的
\@currentprefix
更新版本中用作(隐藏在 中)。\label
\ref
\@currentprefix::#1
\generatemultilabel
那么,输入和来自的引用\include{foochapter}
也将起作用。
此外,我还定义了一个宏,以便使用相关章节编号和常用标签进行跨章节引用。
当前方法对book
和 均有效memoir
。
如果使用,则会失败cleveref
,因为\label
在中引入了可选参数cleveref
。
\documentclass[11pt,twoside,openright]{memoir}
\usepackage{xpatch}
\usepackage{hyperref}
\begin{filecontents}{externalchapter.tex}
\chapter{Yet another nice chapter}\label{foochapter}
See chapter~\ref{foochapter}.
\begin{figure}
\caption{Foo figure}\label{foofigure}
\end{figure}
\begin{table}
\caption{Foo table}\label{footable}
\end{table}
\begin{equation}
E=mc^{2} \label{einstein}
\end{equation}
See \ref{einstein} or \ref{footable} or \ref{foofigure}
\end{filecontents}
\newcounter{auxchapter}
\makeatletter
\newcommand{\generatemultilabel}[1]{%
\@currentprefix::#1%
}
\AtBeginDocument{%
\let\latex@@label\label
\let\latex@@ref\ref
\renewcommand{\label}[1]{%
\latex@@label{\generatemultilabel{#1}}%
}
\renewcommand{\ref}[1]{%
\latex@@ref{\generatemultilabel{#1}}%
}
\xpretocmd{\chapter}{%
\stepcounter{auxchapter}%
\edef\@currentprefix{chapter::\number\value{auxchapter}}
}{\typeout{Success}}{\typeout{Failure}}
\newcommand{\crosschapterref}[2]{%
\begingroup
\edef\@currentprefix{chapter::#1}%
\ref{#2}%
\endgroup
}
}
\makeatother
\begin{document}
% Hypothetical first paper
\chapter{A chapter}\label{foochapter}
See chapter~\ref{foochapter}.
\begin{figure}
\caption{Foo figure}\label{foofigure}
\end{figure}
\begin{table}
\caption{Foo table}\label{footable}
\end{table}
\begin{equation}
E=mc^{2} \label{einstein}
\end{equation}
See \ref{einstein} or \ref{footable} or \ref{foofigure}
% Hypothetical second paper
\chapter{Another chapter}\label{foochapter}
See chapter~\ref{foochapter}.
\begin{figure}
\caption{Foo figure}\label{foofigure}
\end{figure}
\begin{table}
\caption{Foo table}\label{footable}
\end{table}
\begin{equation}
E=mc^{2} \label{einstein}
\end{equation}
See \ref{einstein} or \ref{footable} or \ref{foofigure}
\include{externalchapter}
But in \crosschapterref{1}{einstein} we saw
\end{document}