同上时更改预注的位置(\DeclareCiteCommand 中的 if 语句)

同上时更改预注的位置(\DeclareCiteCommand 中的 if 语句)

我遵循的引用指南要求prenote在适用“ibid”的情况下,将“ibid”文字放在“Ibid”文字之后。

例如:

s 1 Really Awesome Statute.
s 3 Ibid demonstrates awesome stuff << wrong
Ibid s 3 demonstrates awesome stuff << correct

我正尝试通过改变命令来实现这一点footcite

该命令最初定义为:

\DeclareCiteCommand{\footcite}[\mkbibfootnote]
  {\bibsentence
   \usebibmacro{prenote}}
  {\usebibmacro{citeindex}%
   \usebibmacro{cite}}
  {\multicitedelim}
  {\usebibmacro{cite:postnote}}

我正在尝试使用:

\DeclareCiteCommand{\footcite}[\mkbibfootnote]
  {
      \bibsentence
      \ifthenelse{\shoulddoibid}{%
      }{%    
          \usebibmacro{prenote}
      }
  }
  {
      \usebibmacro{citeindex}%
      \usebibmacro{cite}
  }
  {
      \multicitedelim
  }
  {
      \ifthenelse{\shoulddoibid}{%
        \usebibmacro{prenote}
      }{%
      }
      \usebibmacro{cite:postnote}
  }

\newcommand{\shoulddoibid}{\ifciteibid\AND\NOT\iffirstonpage}

然而,这似乎完全打破了footcite

  • 我得到很多∆=∆符号(例如Ibid ∆=∆, 293
  • Ibid出现在错误的位置
  • prenote并且即使没有定义也会cite:postnote被替换∆=∆

我猜测我的问题出在 的定义上shoulddoibid,或者出在DeclareCiteCommand(可能是后者)。

有人有什么想法吗?

答案1

问题是它\shoulddoibid不起作用。

我查看了 biblatex 手册,结果发现这iffirsonpage是依赖于上下文的。

我认为解析器是在的上下文中对其进行评估\newcommand,使其成为文字,而不是按照预期每次对其进行评估。

我添加了最后的命令以便有人发现它有用。

\DeclareCiteCommand{\footcite}[\mkbibfootnote]
  {%
      \togglefalse{hasibid}%
      \ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}{%
          \toggletrue{hasibid}%
      }{%    
          \bibsentence%
          \usebibmacro{prenote}%
      }%
  }%
  {%
      \usebibmacro{citeindex}%
      \usebibmacro{cite}%
  }%
  {%
      \multicitedelim%
  }%
  {%
      \iftoggle{hasibid}{%
        \usebibmacro{prenote}%
      }{%
      }%
      \usebibmacro{cite:postnote}%
  }

相关内容