![在比较 biblatex 中的可选参数/后记时获取 ibid 的数字引用](https://linux22.com/image/417895/%E5%9C%A8%E6%AF%94%E8%BE%83%20biblatex%20%E4%B8%AD%E7%9A%84%E5%8F%AF%E9%80%89%E5%8F%82%E6%95%B0%2F%E5%90%8E%E8%AE%B0%E6%97%B6%E8%8E%B7%E5%8F%96%20ibid%20%E7%9A%84%E6%95%B0%E5%AD%97%E5%BC%95%E7%94%A8.png)
后续行动这个问题。
问题和答案解释了如何ibit
在 biblatex 中添加数字样式。
但该解决方案确实可能比引用两次数字更长,因为它引用了这样的句子:
他们说,“LaTeX 很强大”[96,第 3 页],但在同一页上却说“WordTEX 可能更好”[96,第 3 页]。然后在下一页,他们谈到了“火车倒着开”[96,第 4 页]。
应用“ibit patch”后显示如下:
他们说,“LaTeX 很强大”[96,第 3 页],但在同一页上却说“WordTEX 可能更好”[同上,第 3 页]。然后在下一页,他们谈到“火车倒着开”[同上,第 4 页]。
但是,显然这仍然会使文本变长。但是,我希望它也能比较那里的后记……(3
即\cite[3]{wildenhain2018}
)
基本上这个问题要求相同,但他们使用不同的引用样式。因此,ibidpage
在那里使用并可能进行了修改——而我需要使用ibidtracker=constrict
第一个问题中解释的。
简单来说结合这些解决方案不起作用。
最后我想要的结果如下:
他们说,“LaTeX 很强大”[96,第 3 页],但在同一页上却说“WordTEX 可能更好”[同上]。然后在下一页,他们谈到“火车倒着开”[同上,第 4 页]。
如果可能的话,也许也解释我怎么能仅有的打印ibid
如果找到这样一个“完全匹配”的条目,因此基本上永远不会增加引用的大小。在本例中,这将导致:
他们说,“LaTeX 很强大”[96,第 3 页],但在同一页上却说“WordTEX 可能更好”[同上]。然后在下一页,他们谈到“火车倒着开”[96.,第 4 页]。
如何实现这一点?
请注意,它还应该能够比较后记中的任意数据。(因为 biblatex 不会自动在那里添加非数字参数,所以有时必须使用\cite[p. 3~ff.]{wildenhain2018}
或类似的东西)
答案1
正如在回答中提到的从 biblatex 获取 ibid 的数字引用,那里的代码没有实现该ibidpage
功能,但可以将从ibidpage
的代码移植authortitle-ibid.cbx
到这个解决方案中。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[british]{babel}
\usepackage{csquotes}
\usepackage[style=numeric-comp, backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\makeatletter
\DeclareBibliographyOption[boolean]{ibidpage}[true]{%
\ifstrequal{#1}{true}
{\ExecuteBibliographyOptions{loccittracker=constrict}}
{\ExecuteBibliographyOptions{loccittracker=false}}}
\newtoggle{cbx:loccit}
\renewbibmacro*{cite:comp}{%
\global\togglefalse{cbx:loccit}%
\addtocounter{cbx@tempcntb}{1}%
\iffieldundef{shorthand}
{\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
{\usebibmacro{cite:ibid}}
{\ifbool{bbx:subentry}
{\iffieldundef{entrysetcount}
{\usebibmacro{cite:comp:comp}}
{\usebibmacro{cite:comp:inset}}}
{\usebibmacro{cite:comp:comp}}}}
{\usebibmacro{cite:comp:shand}}}
\providecommand*{\mkibid}[1]{#1}
\newbibmacro*{cite:ibid}{%
\printtext[bibhyperref]{\bibstring[\mkibid]{ibidem}}%
\ifloccit
{\global\toggletrue{cbx:loccit}}
{}}
\letbibmacro*{orig:postnote}{postnote}
\renewbibmacro*{postnote}{%
\iftoggle{cbx:loccit}
{}
{\usebibmacro{orig:postnote}}}
\makeatother
\ExecuteBibliographyOptions{ibidtracker=constrict, ibidpage=true}
\begin{document}
\autocite[3]{sigfridsson}
\autocite[3]{sigfridsson}
\autocite[4]{sigfridsson}
\printbibliography
\end{document}
主要成分是新cbx:loccit
标记和\ifloccit
测试。基本上\ifloccit
是\ifopcit
+ \if<same page as last cite>
,其中\ifopcit
测试当前引用是否是同一作者上次引用的同一作品。一起\ifciteibid
并\ifloccit
提供所需的“ibid.”+页面跟踪。
仅当最后一页完全相同时,才可以显示“ibid。”这是通过将测试\ifloccit
直接集成到\ifciteibid
检查是否打印“ibid。”的测试中来实现的。
请注意,严格来说,这当然没有考虑实际的引用长度。它纯粹根据先前的引用和后注参数选择打印(或不打印)“ibid”。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[british]{babel}
\usepackage{csquotes}
\usepackage[style=numeric-comp, backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\makeatletter
\newtoggle{cbx:loccit}
\renewbibmacro*{cite:comp}{%
\global\togglefalse{cbx:loccit}%
\addtocounter{cbx@tempcntb}{1}%
\iffieldundef{shorthand}
{\ifthenelse{\ifciteibid\AND\ifloccit\AND\NOT\iffirstonpage}
{\usebibmacro{cite:ibid}}
{\ifbool{bbx:subentry}
{\iffieldundef{entrysetcount}
{\usebibmacro{cite:comp:comp}}
{\usebibmacro{cite:comp:inset}}}
{\usebibmacro{cite:comp:comp}}}}
{\usebibmacro{cite:comp:shand}}}
\providecommand*{\mkibid}[1]{#1}
\newbibmacro*{cite:ibid}{%
\printtext[bibhyperref]{\bibstring[\mkibid]{ibidem}}%
\global\toggletrue{cbx:loccit}}
\letbibmacro*{orig:postnote}{postnote}
\renewbibmacro*{postnote}{%
\iftoggle{cbx:loccit}
{}
{\usebibmacro{orig:postnote}}}
\makeatother
\ExecuteBibliographyOptions{ibidtracker=constrict, loccittracker=constrict}
\begin{document}
\autocite[3]{sigfridsson}
\autocite[3]{sigfridsson}
\autocite[4]{sigfridsson}
\printbibliography
\end{document}
这两种解决方案都使用标准定义的loccit
测试,只比较 postnote 参数中的页面范围。但这些解决方案可以与使 Biblatex (Bibtex) 识别相等的后续后记如果您坚持认为非页面范围的输入也需要进行比较。