使用 memoize 时启用对 Biblatex 的自动支持

使用 memoize 时启用对 Biblatex 的自动支持

请注意,该问题涉及memoize版本 1.1.2(2024-01-21)以及更高版本。

memoize\cite版本 1.1.2 提供使用 Biblatex 时自动处理和记忆代码的内置支持\cites。我正尝试使用它来支持更广泛的 Biblatex 引用宏。

到目前为止,我已经使用内置citecites样式运行了许多这样的宏。例如,他的支持\autocite

  auto=\autocite{cite},

cite field我通过定义使用自定义的样式完成了更多部分工作outer handler

    auto/cite field/.style={run if memoizing, args=oomom, outer handler=\mmz@auto@citefield},

例如,

  auto csname={citefield}{cite field},
  auto csname={citelist}{cite field},
  auto csname={citename}{cite field},

outer handler

\NewDocumentCommand \mmz@auto@citefield { O{} O{} m O{} m}
{% purloined from memoize.sty & mangled
  \xtoksapp\mmzCCMemo{%
    \noexpand\nocite{#3}%
  }%
  \AdviceOriginal[#1][#2]{#3}[#4]{#5}%  
}

但是,上下文敏感功能无法正常工作,因此我需要

    auto csname={abx@missing}{abort},

如果引用命令的输出发生变化,则不会自动生成任何内容。

最好的定义方法是什么\mmz@auto@citefield

梅威瑟:

\documentclass{article}

\usepackage{memoize}
\usepackage{biblatex}
\bibliography{biblatex-examples}
\usepackage{tikz}
\makeatletter
\mmzset{%
  prefix=memos/,
  begindocument/before/.append style={%
    auto=\autocite{cite},
    auto csname={abx@missing}{abort},
    auto/cite field/.style={run if memoizing, args=oomom, outer handler=\mmz@auto@citefield},
    auto csname={citefield}{cite field},
    auto csname={citelist}{cite field},
    auto csname={citename}{cite field},
  },
}
\NewDocumentCommand \mmz@auto@citefield { O{} O{} m O{} m}
{% purloined from memoize.sty & mangled
  \xtoksapp\mmzCCMemo{%
    \noexpand\nocite{#3}%
  }%
  \AdviceOriginal[#1][#2]{#3}[#4]{#5}%  
}
\makeatother

\begin{document}
\begin{tikzpicture}
    \node [draw] {\autocite{westfahl:space}};
\end{tikzpicture}
\begin{tikzpicture}
    \node [draw] {\citefield{westfahl:space}{booktitle}};
\end{tikzpicture}
\begin{tikzpicture}
    \node [draw] {\citename{westfahl:space}{author}};
\end{tikzpicture}
\begin{tikzpicture}
    \node [draw] {\citelist{westfahl:space}{location}};
\end{tikzpicture}
\printbibliography
\end{document}

答案1

该问题是由于一个错误引起的,已通过更新至 1.2 版本进行修复。

相关内容