BibLaTex 知道同上我还发现疯狂的引用就像loccit
文本中那样。所以现在我想把它们结合起来。
这是如何强制使用数字样式的 ibit 类事物– 我仍然认为这是 biblatex 中缺少的一个功能。现在我想强制它不仅ibid
按照定义正确使用,而且l.c.
。也就是说,我想要两个都,正如正确的引用指南所建议的那样。
为了说明,再举这个例子:
他们说,“LaTeX 很强大”[96,第 3 页],但在同一页上却说“WordTEX 可能更好”[96,第 3 页]。然后在下一页,他们谈到了“火车倒着开”[96,第 4 页]。
有了这个解决方案,我想要:
他们说,“LaTeX 很强大”[96,第 3 页],但在同一页上却说“WordTEX 可能更好”[同上]。在下一页,他们谈到“火车倒着开”[lc,第 4 页]。
l.c.
只是其中一种——非常简短——的可能性,我见过如何缩写或称呼它。“Loc. cit.”是另一种,在德语中称为“aa O.”(“am angegebenen Ort”)。根据其定义,ibid
只有在所有内容完全相同的情况下才可以使用,“在引用的地方”仅适用于页面可能不同但来源仍然相同的情况下。
我已经发现它是在 biblatex 中定义的,并且旧的解决方案也使用了它。
因此我尝试调整它,但是我的解决方案失败了,现在根本不再打印后记(引文的可选部分):
% ATTENTION: BROKEN EXAMPLE!
% consider all postnotes for check-if-previous-postnote-was-the-same
\def\blx@loccit@stricttracker#1{%
\global\csundef{blx@lastnote@#1@\abx@field@entrykey}%
\blx@imc@iffieldundef{postnote}
{}
{\blx@ifcitesingle
{\global\cslet{blx@lastnote@#1@\abx@field@entrykey}\abx@field@postnote
\xifinlistcs\abx@field@entrykey{blx@trackkeys@#1}
{}
{\listcsxadd{blx@trackkeys@#1}\abx@field@entrykey}}
{}}}
\def\blx@loccit@numcheck#1{%
\blx@imc@iffieldundef{postnote}
{\@secondoftwo}
{\blx@imc@iffieldequalcs{postnote}{blx@lastnote@#1@\abx@field@entrykey}}}
% ibid for postnote, but repeat number, if you subsequently use different pages/postnotes
% https://tex.stackexchange.com/a/554363/98645
\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}}}}
{\ifthenelse{\ifciteibid\AND\NOT\ifloccit\AND\NOT\iffirstonpage}
{\usebibmacro{cite:loccit}}
{\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}
所以我的 LaTeX 编码“技能”在这里失败了。
对于 MWE,请参阅前面解决方案中的示例。
如果您能在这里添加如何使用 loccit 的话那就太好了?
答案1
将其构建到所示的解决方案中并不太难在比较 biblatex 中的可选参数/后记时获取 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
\def\blx@loccit@check#1{%
\blx@imc@iffieldundef{postnote}
{\ifcsempty{blx@lastnote@#1@\abx@field@entrykey}}
{\blx@imc@iffieldequalcs{postnote}{blx@lastnote@#1@\abx@field@entrykey}}}
\let\blx@loccit@numcheck\blx@loccit@check
\def\blx@loccit@stricttracker#1{%
\global\csundef{blx@lastnote@#1@\abx@field@entrykey}%
\blx@imc@iffieldundef{postnote}
{\global\cslet{blx@lastnote@#1@\abx@field@entrykey}\@empty}
{\blx@ifcitesingle
{\expandafter\blx@imc@ifpages
\expandafter{\abx@field@postnote}
{\global\cslet{blx@lastnote@#1@\abx@field@entrykey}\abx@field@postnote
\xifinlistcs\abx@field@entrykey{blx@trackkeys@#1}
{}
{\listcsxadd{blx@trackkeys@#1}\abx@field@entrykey}}
{}}
{}}}
\newtoggle{cbx:loccit}
\renewbibmacro*{cite:comp}{%
\global\togglefalse{cbx:loccit}%
\addtocounter{cbx@tempcntb}{1}%
\iffieldundef{shorthand}
{\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
{\ifloccit
{\usebibmacro{cite:ibid}}
{\usebibmacro{cite:loccit}}}
{\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}}
\newbibmacro*{cite:loccit}{%
\printtext[bibhyperref]{\bibstring[\mkibid]{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}
\autocite{worman}
\autocite{sigfridsson}
\autocite{sigfridsson}
\printbibliography
\end{document}