如何访问 biblatex 包选项/键的值

如何访问 biblatex 包选项/键的值

是否可以访问作为书目选项给出的值。例如,如果我有

\usepackage[somekey=foobar]{biblatex}

我能否像 这样的宏一样获取 的值 ( foobar) 。我尝试找出答案,然后查看那里,我找到了我现在知道的来自 的宏。我的搜索以我可以更改值但无法获取值的宏结束。somekey\KV@<family>@somekeybiblatex.sty\define@keykeyval.sty\KV@blx@opt@pre@autocite{#1}

正如您所猜测的,我想获得该autocite选项的价值。

更新

也许 Joseph 是对的,所以我想要的是:我希望能够根据选项更改宏的行为autocite。宏是\quodecite(参见biblatex:处理二次(“引用”)引文) 因为这是通过 定义的,我猜\DeclareMultiCiteCommand我不能使用\DeclareAutoCiteCommand。我本可以在其他问题中向 Audrex 询问这个问题,但我认为我可以自己解决,这引出了一个问题,即我是否可以访问键值……

更新 2

biblatex:处理二次(“引用”)引文奥黛丽建议为其他autocite选项构建一个额外的命令,但我希望有一个自动解决方案。

这是创建命令的部分代码\quotecite

\DeclareMultiCiteCommand{\quotecite}[\cbx@qcwrapper]{\cbx@quotecite}{\cbx@qcdelim}

\newrobustcmd{\cbx@qcwrapper}[1]{%
  \global\toggletrue{cbx@isquote}%
  \mkbibfootnote{#1}%
  \global\togglefalse{cbx@isquote}%
  \global\togglefalse{cbx@iflastibid}%
  \global\togglefalse{cbx@ifquoteepost}%
  \global\togglefalse{cbx@ifquoterpost}}

正如可以想象的那样——我的测试也证明了这一点——的输出格式(纯文本、脚注等)可以通过替换为来\quotecite轻松更改。所以我的想法是实现一个条件,它关注的值,为此我需要选项的值。 我想,类似下面的内容在真正的 LaTeX 中肯定会解决这个问题。\mkbibfootnote{#1}\mkbibparens{#1}autocite

\newrobustcmd{\cbx@qcwrapper}[1]{%
  \global\toggletrue{cbx@isquote}%
  if (autocite=footnote)
    \mkbibfootnote{#1}%
    else if (autocite=parens)
      \mkbibparens{#1}
      else if (autocite=plain)
        #1
        else
          #1
          warning: unkown option of autocite for \quotecite
      end if
    end if
  end if
  \global\togglefalse{cbx@isquote}%
  \global\togglefalse{cbx@iflastibid}%
  \global\togglefalse{cbx@ifquoteepost}%
  \global\togglefalse{cbx@ifquoterpost}}

答案1

\autocite命令取决于autocite选项设置和各种引用命令。后者(部分)由选项决定citestyle。在中biblatex.sty您可以看到如何处理这些选项。的值citestyle明确存储:

\define@key{blx@opt@ldt}{citestyle}{%
  \def\blx@cbxfile{#1}}

但是的值autocite不是;而是使用来自biblatexetoolbox包的一些命令来识别控制序列名称。

\DeclareBibliographyOption{autocite}{%
  \ifcsundef{blx@acite@#1}
    {\blx@error
       {Autocite command '#1' undefined}
       {The autocite command '#1' has not been defined by
        the\MessageBreak selected citation style}}
    {\letcs\autocite{blx@acite@#1}%
     \letcs\autocites{blx@macite@#1}}}

控制序列blx@acite@plainblx@macite@plainblx@acite@inline等定义如下biblatex.def

\DeclareAutoCiteCommand{plain}{\cite}{\cites}
\DeclareAutoCiteCommand{inline}{\parencite}{\parencites}
\DeclareAutoCiteCommand{footnote}[f]{\smartcite}{\smartcites}
\DeclareAutoCiteCommand{superscript}[l]{\supercite}{\supercites}

下面是一个非常简单的示例,说明如何创建依赖于autocitecitestyle选项的格式。它使用来自和的一些命令,etoolbox并假设上述通用定义构建。这些可以在以后使用时重新定义和扩展\DeclareAutoCiteCommand。因此,此处的测试不是特别全面,也不太能适应引用样式的变化。

\documentclass{article}
\usepackage[style=authoryear,autocite=footnote]{biblatex}
\bibliography{biblatex-examples}

\makeatletter
\newrobustcmd{\mkbibautoformat}[1]{%
  \cslet{cbx@autocite}{\autocite}%
  \ifcsequal{cbx@autocite}{blx@acite@inline}
    {\ifboolexpr{ test {\ifdefstring{\blx@bbxfile}{numeric}}
                  or test {\ifdefstring{\blx@bbxfile}{alphabetic}} }
       {\mkbibbrackets{#1}}
       {\mkbibparens{#1}}}
    {\ifcsequal{cbx@autocite}{blx@acite@footnote}
       {\iffootnote
          {\ifboolexpr{ test {\ifdefstring{\blx@bbxfile}{numeric}}
                        or test {\ifdefstring{\blx@bbxfile}{alphabetic}} }
             {\mkbibbrackets{#1}}
             {\mkbibparens{#1}}}
          {\mkbibfootnote{#1}}}
       {\ifcsequal{cbx@autocite}{blx@acite@superscript}
          {\mkbibsuperscript{#1}}
          {#1}}}}
\makeatother

\DeclareCiteCommand{\autociteyear}[\mkbibautoformat]
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{prenote}}
  {\printfield{year}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\begin{document}
\null\vfill
\footnote{\autociteyear{companion}\autocite{companion}}
\end{document}

在此处输入图片描述

相关内容