Создать собственную команду цитирования в biblatex

Создать собственную команду цитирования в biblatex

У меня следующая проблема: мне нужна очень простая "система двойного цитирования". Для обычной литературы я без проблем использую стиль автор-год в biblatex. Я сделал следующие небольшие изменения:

\renewcommand*{\mkbibnamelast}[1]{\textsc{#1}}
\renewcommand{\postnotedelim}{\addcolon\space}
\DeclareFieldFormat{postnote}{#1}

Проблема в том, что теперь я хочу цитировать старые книги (раннего современного периода) по-другому (не по автору-году), что-то вроде этого:

 Shortauthor, *shorttitle*, p. 124

Я думаю, что решением будет написать собственную команду цитирования, что-то вроде этой, которая, кажется, работает хорошо:

\DeclareBibliographyDriver{myshort}{%
 \usebibmacro{begentry}%
  \ifboolexpr{ test{\ifnameundef{shortauthor}} 
            or test {\iffieldundef{shorttitle}}}
   {\usedriver{}{\thefield{entrytype}}}
   {\printnames{shortauthor}%
    \setunit{\addcomma\space}%
    \printfield{shorttitle}\isdot}%
    \usebibmacro{finentry}%
  }

  \DeclareCiteCommand{\mycite}[\mkbibfootnote]
   {\usebibmacro{prenote}}
   {\usedriver{}{myshort}}
   {\multicitedelim}
    {\usebibmacro{postnote}}

НО(и это мой фактический вопрос): есть ли способ:

  • отключить заглавные буквы автора?
  • написать заголовок курсивом?
  • вернуть «п.» для страниц?

То есть, это способ каким-то образом отключить для этой конкретной команды общие параметры, которые я задал с помощью renewcommands и т. д.

решение1

Полезный прием для таких ситуаций — создать переключатель, который включается при вводе команды и выключается при выходе из нее:

\newtoggle{mycite}

\renewcommand*{\mkbibnamelast}[1]{\iftoggle{mycite}{#1}{\textsc{#1}}}
\renewcommand{\postnotedelim}{\iftoggle{mycite}{\addcomma\addspace}{\addcolon\space}}
\DeclareFieldFormat{postnote}{#1}

и затем, когда вы определяете новую команду cite:

\DeclareCiteCommand{\mycite}[\mkbibfootnote]
   {\toggletrue{mycite}\usebibmacro{prenote}}
   {\usebibmacro{mycite}}
   {\multicitedelim}
   {\usebibmacro{postnote}\togglefalse{mycite}}

Кстати, вы не можете использовать \usedriver{}{\thefield{entrytype}в определении \DeclareBibliographyDriver: это войдет в бесконечный цикл, и TeX сообщит об ошибке. Что вы можете сделать, так это определить новый макрос bib. Например, используя ваше определение в качестве отправной точки (и скорректировав его, чтобы выделить (короткое) название курсивом):

\newbibmacro{mycite}{
   \ifboolexpr
     {test {\ifnameundef{shortauthor}} or
      test {\iffieldundef{shorttitle}}}
     {\usedriver{}{\thefield{entrytype}}} 
     {\printnames{shortauthor}%
     \setunit{\addcomma\space}%
     \mkbibemph{\printfield{shorttitle}}}
}

Связанный контент