У меня следующая проблема: мне нужна очень простая "система двойного цитирования". Для обычной литературы я без проблем использую стиль автор-год в 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}}}
}