Я хотел бы получитьbibliography style
книгу КеллиОбщая топология:
Я читал варианты, которыеLaTeX
естьздесьи, по-видимому, нет ничего похожего на книгу Келли.
Возможно ли получить то, что я хочу?
Спасибо
PD: Я этого не говорил, но предполагается, что он будет использовать стандарт bibtex
, т. е. data_base.bib
+ style_file.bst
, но я не против, если мне понадобятся дополнительные пакеты. @AlanMunn говорит, что с этой опцией сложно. Пожалуйста, не стесняйтесь предлагать другое решение. Я сосредоточен только на стиле, а не на пути.
Приложение.
Следуя совету @moewe, я собираюсь выделить то, что является основной частью, которую я хочу воссоздать. Очевидно, это формат
Автор (в sc
) Цитата (с отступом и перезаписью для каждого нового автора).
Формат надлежащего цитирования не имеет значения. Например, я хотел бы
Название (Издание), Редакционная статья, Страна (Год). Примечания
для книг и, возможно,
Название, Журнал, Том (в bf
) Страницы (год) для журналов,
но это вообще не имеет значения.
Что бы я хотел иметь полесубтитрыуметь правильно писать субтитры, потому что иногда они пишутсяпримечаниеполя.
И наконец, если я использую \cite{kuratowski:topologie2}
, я хочу автоматически получить Куратовского [2].
Спасибо.
решение1
Я сосредоточился на «интересной» части стиля: ссылка автора+номера и грубая разметка библиографии. Остальные правки должны быть выполнимы с небольшим исследованием этого сайта.
Если мы основываем наш стиль на biblatex-philosophy
«s», philosophy-modern
нам нужно только убедиться, что в ссылках указан не «год автора», а «номер автора».
На данный момент я не могу придумать простого способа сделать это (запрос на функцию уже отправлен):https://github.com/plk/biblatex/issues/718), поэтому я придумал следующее. Мы делаем вид, что используем алфавитный стиль, который использует только имена авторов в своей метке. Обычно style=alphabetic
использует только части имени автора и года (например, SR98, Knu84). Если метка неоднозначна, Biber вычисляет значение extraalpha
(например, Knu86а, Кну86б). Поскольку наши метки — это только имена, extraalpha
то получим «Nussbaum» (если нет других работ «Nussbaum») и «Knutha», «Knuthb». Это extraalpha
почти наше число: если нет extraalpha
(«Nussbaum»), мы берем 1, в противном случае extraalpha
— то, с чем мы работаем.
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=philosophy-modern, backend=biber, labelalpha, giveninits, uniquename=init, mergedate=false, volnumformat=plain]{biblatex}
\addbibresource{biblatex-examples.bib}
\DeclareLabelalphaTemplate{
\labelelement{
\field[final]{shorthand}
\field{label}
\field{labelname}
}
}
\renewbibmacro*{relateddate}{%
\setunit*{\addspace}%
\printtext[parens]{\printdate}}
\renewbibmacro*{commarelateddate}{\usebibmacro{relateddate}}
\DeclareFieldFormat{extraalpha}{\mkbibbrackets{#1}}
\renewbibmacro{date+extradate}{%
\postsepyear{%
\usebibmacro{extralabel}}}
\newbibmacro{extralabel}{%
\iffieldundef{extraalpha}
{\printtext[extraalpha]{1}}
{\printfield{extraalpha}}}
\newbibmacro{cite:extralabel}{%
\printtext[bibhyperref]{\usebibmacro{extralabel}}}
\makeatletter
\renewbibmacro*{cite:AY:noshorthand}{%
\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
{\usebibmacro{cite:label}%
\usebibmacro{cite:reinit}}
{\iffieldequals{namehash}{\cbx@lasthash}
{\setunit{\addcomma\space}%
\usebibmacro{cite:extralabel}}
{\printnames{labelname}%
\setunit{\addspace}%
\usebibmacro{cite:extralabel}%
\savefield{namehash}{\cbx@lasthash}}}}
\makeatother
\DeclareNameAlias{sortname}{given-family}
\AtBeginBibliography{\renewcommand*{\mkbibnamefamily}{\textsc}}
\DeclareFieldFormat*{title}{\mkbibemph{#1}}
\DeclareFieldFormat*{journaltitle}{#1}
\DeclareFieldFormat[article,periodical]{volume}{\mkbibbold{#1}}
\begin{document}
\cite{sigfridsson,worman,knuth:ct:a,knuth:ct:b}
\printbibliography
\end{document}
biblatex
В версии 3.12 появился новый extraname
счетчик, который мы можем использовать здесь вместо хака с extraalpha
. Просто замените extraalpha
на extraname
в коде выше и удалите \DeclareLabelalphaTemplate
опцию labelalpha
.
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=philosophy-modern, backend=biber, giveninits, uniquename=init, mergedate=false, volnumformat=plain]{biblatex}
\addbibresource{biblatex-examples.bib}
\renewbibmacro*{relateddate}{%
\setunit*{\addspace}%
\printtext[parens]{\printdate}}
\renewbibmacro*{commarelateddate}{\usebibmacro{relateddate}}
\renewbibmacro{date+extradate}{%
\postsepyear{%
\usebibmacro{extralabel}}}
\DeclareFieldFormat{extraname}{\mkbibbrackets{#1}}
\newbibmacro{extralabel}{%
\iffieldundef{extraname}
{\printtext[extraname]{1}}
{\printfield{extraname}}}
\newbibmacro{cite:extralabel}{%
\printtext[bibhyperref]{\usebibmacro{extralabel}}}
\makeatletter
\renewbibmacro*{cite:AY:noshorthand}{%
\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
{\usebibmacro{cite:label}%
\usebibmacro{cite:reinit}}
{\iffieldequals{namehash}{\cbx@lasthash}
{\setunit{\addcomma\space}%
\usebibmacro{cite:extralabel}}
{\printnames{labelname}%
\setunit{\addspace}%
\usebibmacro{cite:extralabel}%
\savefield{namehash}{\cbx@lasthash}}}}
\makeatother
\DeclareNameAlias{sortname}{given-family}
\AtBeginBibliography{\renewcommand*{\mkbibnamefamily}{\textsc}}
\DeclareFieldFormat*{title}{\mkbibemph{#1}}
\DeclareFieldFormat*{journaltitle}{#1}
\DeclareFieldFormat[article,periodical]{volume}{\mkbibbold{#1}}
\begin{document}
\cite{sigfridsson,worman,knuth:ct:a,knuth:ct:b}
\printbibliography
\end{document}
Результат тот же.