biblatex 与 hyperref 与 \appendix 与 memoir

biblatex 与 hyperref 与 \appendix 与 memoir

这里有一个有趣的例子。在下面的例子中,如果book使用了该类,则\cite第二个包含的文档中的指向为该页面生成的参考书目。

但是当memoir加载时它指向前一个文件。

是什么赋予了?

更新:

这似乎是\appendix

这是命令memoir的定义\appendix

\renewcommand{\appendix}{\par
  \setcounter{chapter}{0}%
  \setcounter{section}{0}%
  \gdef\@chapapp{\appendixname}%
  \gdef\thechapter{\@Alph\c@chapter}%
 \anappendixtrue
}

与之相比,唯一的区别book是最后一行

以下是更新的 MWE

% \documentclass[a4paper]{book} % works
\documentclass[a4paper]{memoir} % the citation on page 3 points to
                                % page 1
\begin{filecontents}[overwrite]{\jobname-refs.bib}
@article{test,
  author = "Test Testson",
  title = "Test",
  journal = "Some journal",
  year = 2020,
}
\end{filecontents}
\begin{filecontents}[overwrite]{\jobname-a.tex}
\chapter{Test}
\cite{test}
\printbibliography[heading = subbibliography]
\end{filecontents}
\begin{filecontents}[overwrite]{\jobname-b.tex}
\chapter{Test}
\cite{test}
\printbibliography[heading = subbibliography]
\end{filecontents}

\makeatletter
 % memoir definition of \appendix note the last line, remove and everything works
\renewcommand{\appendix}{\par
  \setcounter{chapter}{0}%
  \setcounter{section}{0}%
  \gdef\@chapapp{\appendixname}%
  \gdef\thechapter{\@Alph\c@chapter}%
  \anappendixtrue
}
\makeatother



\usepackage[
    backend = biber,
    refsection = chapter, % Chapter-wise bibliography
    citestyle = numeric,
    bibstyle = authoryear,
]{biblatex}

\usepackage[colorlinks]{hyperref}

\addbibresource{\jobname-refs.bib}

\begin{document}

\include{\jobname-a}

\appendix


\include{\jobname-b}

\end{document}

这是 pdf 中的一张图片

在此处输入图片描述


从 Ulrikes 的分析来看,这似乎是加载后添加的正确解决方案biblatex(并报告给biblatex

\makeatletter
\def\blx@refpatch@chapter@memoir#1{%
  \apptocmd\memchapinfo{#1}
    {}{\blx@err@patch{\string\memchapinfo}}%
  \apptocmd\memchapstarinfo{#1}
  {}{\blx@err@patch{\string\memchapstarinfo}}%
  \apptocmd\memappchapinfo{#1}
    {}{\blx@err@patch{\string\memchapinfo}}%
  \apptocmd\memappchapstarinfo{#1}
  {}{\blx@err@patch{\string\memchapstarinfo}}%
}
\makeatother

答案1

\newrefsectionbiblatex 挂接到 memoir 代码中,在refsection=chapter使用时添加命令。它将 is 添加到\memchapinfo。跟踪代码时可以看到它:

\memchapinfo #1#2#3#4->\newrefsection 
#1<-\thechapter 
#2<-\f@rtoc 
#3<-\f@rhdr 
#4<-Test

但是 with\anappendixtrue \memchapinfo没有使用,\memappchapinfo而且因此 the\newrefsection缺失了。

您可以要求 biblatex 维护者修补此命令。或者,您可以\newrefsection在启动附录时手动执行。

相关内容