
Я добавил пользовательские bibstrings и использовал язык ngerman
. Если я оставлю определение ngerman
перед bibstrings пустым, он выведет желаемый формат даты. ДД.ММ.ГГГГ
Однако если я использую LanguageMapping ngerman
или german
, он будет отображаться как ДД/ММ/ГГГГ — почему так и как правильно отобразить правильный формат?
LBX-файл:
\ProvidesFile{custombibstrings.lbx}[2019 SoSe]
\DeclareBibliographyStrings{%
inherit = {ngerman},
andothers = {{et al\adddot}{et al\adddot}},
byeditor = {{herausgegeben von}{hg\adddotspace von}},
bytranslator = {{übersetzt von} {{\"u}bers\adddotspace von}},
editor = {{Herausgeber}{Hg\adddot}},
editors = {{Herausgeber}{Hg\adddot}},
urlseen = {{letzter Abruf}{letzter Abruf}},
paragraph = {{Paragraph}{\S}},
subparagraph = {{Absatz}{Abs\adddot}},
article = {{Artikel}{Art\adddot}},
bydirector = {{unter der Regie von}{unter der Regie von}},
byproducer = {{produziert von}{produziert von}},
volume = {{Vol\adddot}{Vol\adddot}},
seriesseason = {{Staffel}{Staffel}},
episode = {{Episode}{Episode}},
duration = {{Spieldauer}{Spieldauer}},
fsk = {{FSK}{FSK}},
}
МВЭ
% arara: lualatex: { shell: true, synctex: true }
% arara: biber
% arara: lualatex: { shell: true, synctex: true }
\RequirePackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@online{Amano.2011,
author = {Amano, Fumiko},
title = {Testimonial Videos of Survivors},
url = {https://www.global-peace.go.jp/OTHER/ot_german_pic_syousai.php?gbID=920&dt=161012173049},
date = {2011-11-18},
urldate = {2019-08-23},
maintitle = {National Peace Memorial Halls for the Atomic Bomb Victims in Hiroshima and Nagasaki},
organization = {{Net-Gtas Global Network}},
keywords = {primary}
}
\end{filecontents*}
\documentclass[
12pt,
a4paper,
headings=standardclasses,
listof=totoc,
numbers=noenddot
]{scrartcl}
\usepackage{showframe}
\usepackage[left=2.50cm, right=2.50cm, top=2.50cm, bottom=2.00cm, footskip=1cm]{geometry}
\usepackage[onehalfspacing]{setspace}
\usepackage[main=ngerman, english]{babel}
\usepackage[babel, german=quotes]{csquotes}
\usepackage[ngerman]{isodate}
\usepackage[ngerman]{datetime}
\usepackage[match,MogaHMinEx90]{luatexja-preset}
\setmainjfont{MogaHMinEx90}
\usepackage{luatexja-ruby}
\ltjsetparameter{jacharrange={-3}} % punctuation is Latin
\usepackage[
backend=biber,
style=ext-authoryear,
sorting=nyvt,
datamodel=customstyles,
maxnames=25,
innamebeforetitle=true,
usetranslator=true,
alldates=terse,
labeldate=year,
dashed=false,
isbn=false
]{biblatex}
\addbibresource{\jobname.bib}
\usepackage[hidelinks, pdfencoding=auto]{hyperref}
\begin{filecontents}{customstyles.dbx}
\DeclareDatamodelEntrytypes{video}
\DeclareDatamodelFields[type=field,datatype=literal]{
duration,
format,
type,
}
\DeclareDatamodelFields[type=list,datatype=name]{
director,
producer,
}
\DeclareDatamodelFields[type=field, datatype=verbatim]{
fsk,
seriesseason,
episode,
}
\DeclareDatamodelEntryfields[video]{
duration,
director,
episode,
format,
fsk,
producer,
seriesseason,
type,
}
\end{filecontents}
% regarded in custombibstrings
\NewBibliographyString{bydirector,duration,episode,format,fsk,paragraph,subparagraph,article,byproducer,seriesseason}
\DeclareLanguageMapping{german}{custombibstrings}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite=false]{
\pertype{article}
\step[fieldsource=entrysubtype, match=\regexp{\Anewspaper\Z}, final]
\step[fieldsource=journal, final]
\step[fieldset=author, origfieldval, final]
\step[fieldsource=author, match=\regexp{\A(.*)\Z}, replace=\regexp{\{$1\}}]
\step[fieldset=author+an, fieldvalue={1=journalauthor}]
\step[fieldset=options, fieldvalue={journalauthor}]
}
}
}
% smallcaps
\newtoggle{bbx@journalauthor}
\DeclareEntryOption[boolean]{journalauthor}[true]{%
\settoggle{bbx@journalauthor}{#1}}
\renewcommand{\mkbibnamefamily}[1]{%
\ifitemannotation{journalauthor}
{\mkbibemph{#1}}
{\textsc{#1}}}
\newtoggle{bbx@director}
\DeclareEntryOption[boolean]{director}[true]{%
\settoggle{bbx@director}{#1}}
\renewcommand{\mkbibnamefamily}[1]{%
\ifitemannotation{director}
{\mkbibemph{#1}}
{\textsc{#1}}}
\newtoggle{bbx@producer}
\DeclareEntryOption[boolean]{producer}[true]{%
\settoggle{bbx@producer}{#1}}
\renewcommand{\mkbibnamefamily}[1]{%
\ifitemannotation{producer}
{\mkbibemph{#1}}
{\textsc{#1}}}
\DeclareDelimFormat[bib]{nametitledelim}{\addcolon\space}
% editor in parentheses
\DeclareDelimFormat{editortypedelim}{\addspace}
\DeclareFieldFormat{editortype}{\mkbibparens{#1}}
\DeclareDelimAlias{translatortypedelim}{editortypedelim}
\DeclareFieldAlias{translatortype}{editortype}
\DeclareFieldFormat
[article,inbook,incollection,inproceedings,patent,online]
{title}{#1\isdot}
\DeclareFieldFormat
[thesis,unpublished]
{title}{\mkbibemph{#1}\isdot} % thesis title italic
% no period after addon titles
\renewcommand*{\titleaddonpunct}{\addspace}
\DeclareFieldFormat{titleaddon}{\mkbibbrackets{#1}}
\DeclareFieldAlias{booktitleaddon}{titleaddon}
\DeclareFieldAlias{maintitleaddon}{titleaddon}
\DeclareFieldAlias{journaltitleaddon}{titleaddon}
\DeclareFieldAlias{lawtitleaddon}{titleaddon}
\DeclareFieldAlias{subtitleaddon}{titleaddon}
\newbibmacro{online:editor+maintitle}{% organization in front of maintitle
\printlist{organization}%
\clearlist{organization}%
\setunit*{\addcolon\space}%
\printnames{editor}%
\setunit*{\addcolon\space}%
\usebibmacro{maintitle}}
\usepackage{xpatch}
\xpatchbibdriver{online}
{\usebibmacro{byeditor+others}}
{\usebibmacro{online:editor+maintitle}}
{}{}
\xpatchbibmacro{editorstrg}{\bibstring}{\bibcpstring}{}{}
\xpatchbibmacro{editorstrg}{\bibstring}{\bibcpstring}{}{}
\renewbibmacro*{in:}{%
\iftoggle{bbx@journalauthor}
{}
{\printtext{%
\bibstring{in}\intitlepunct}}}
\DeclareNameAlias{ineditor}{sortname}
\renewcommand*{\volnumdelim}{\addcomma\space}
% set online sources as per IOA
\renewbibmacro*{addendum+pubstate}{%
\setunit{\space}%
\printfield{addendum}%
\newunit\newblock
\printfield{pubstate}}
\DeclareListFormat[online,law]{organization}{% organization in caps
\textsc{%
\usebibmacro{list:delim}{#1}%
#1\isdot
\usebibmacro{list:andothers}}}
\urlstyle{same}%
\DeclareFieldFormat{url}{\url{#1}}
\DeclareFieldFormat{urldate}{\mkbibparens{\bibstring{urlseen}\addcolon\space#1}}
%----------------------------------------------------------------------------
% CITING
%----------------------------------------------------------------------------
\makeatletter
\renewbibmacro*{cite:labeldate+extradate}{%
\iffieldundef{labelyear}
{}
{\printtext[extblx@inner\blx@delimcontext delims]{%
\printtext[bibhyperref]{%
\iftoggle{bbx@journalauthor}
{\printfield{issue}%
\setunit{\addcomma\space}%
\printtext[\blx@delimcontext labeldate]{%
\printdateextra}}
{\printtext[\blx@delimcontext labeldate]{%
\printlabeldateextra}}}}}}
\makeatother
\renewcommand\postnotedelim{\addcolon\addspace}
\DeclareFieldFormat{postnote}{\mknormrange{#1}}
\DeclareFieldFormat{multipostnote}{\mknormrange{#1}}
%----------------------------------------------------------------------------
% MAIN
%----------------------------------------------------------------------------
\begin{document}
\nocite{*}
\printbibliography[heading=bibintoc,title={Literaturverzeichnis}]
\end{document}
решение1
Файлы .lbx
всегда должны содержать определения как минимум двух вещей.
- Библиографияструны(с
\DeclareBibliographyStrings
) - и библиографиядополнения(в основном обработка дат, формат порядковых числительных и т. д. с помощью
\DeclareBibliographyExtras
).
В .lbx
файле в настоящее время отсутствует определение для библиографических дополнений. Мой biblatex
даже жалуется на это в.log
Package biblatex Warning: Using fallback definition for \mkbibdateshort. (biblatex) The command should be defined in the .lbx file. (biblatex) If you see this message, the .lbx file could not be (biblatex) loaded, is faulty or does not contain a definition (biblatex) for \mkbibdateshort. Package biblatex Warning: Using fallback definition for \mkbibdateshort. (biblatex) The command should be defined in the .lbx file. (biblatex) If you see this message, the .lbx file could not be (biblatex) loaded, is faulty or does not contain a definition (biblatex) for \mkbibdateshort.
Поскольку вы по сути пишете новый .lbx
файл, вам нужно будет унаследовать библиографические дополнения из другого языка или определить все необходимые команды с нуля. В вашем случае наследование от ngerman
с \InheritBibliographyExtras{ngerman}
кажется лучшим вариантом. Вы по-прежнему можете перезаписать определения с помощью \DeclareBibliographyExtras
.
Аналогичная ситуация и со строками библиографии, но там наследование обеспечивается специальной парой ключ-значение inherit = {ngerman},
в \DeclareBibliographyStrings
.
Я настоятельно рекомендую вам сделать себе одолжение и добавить название языка к общему имени файла, custombibstrings.lbx
чтобы сделать его читабельным custombibstrings-ngerman.lbx
(конечно, если вы сможете придумать более описательное имя, custombibstrings
это также может быть полезно...)
\ProvidesFile{custombibstrings-ngerman.lbx}[2019 SoSe]
\InheritBibliographyExtras{ngerman}
\DeclareBibliographyStrings{%
inherit = {ngerman},
andothers = {{et al\adddot}{et al\adddot}},
byeditor = {{herausgegeben von}{hg\adddotspace von}},
bytranslator = {{übersetzt von} {übers\adddotspace von}},
editor = {{Herausgeber}{Hg\adddot}},
editors = {{Herausgeber}{Hg\adddot}},
urlseen = {{letzter Abruf}{letzter Abruf}},
paragraph = {{Paragraph}{\S}},
subparagraph = {{Absatz}{Abs\adddot}},
article = {{Artikel}{Art\adddot}},
bydirector = {{unter der Regie von}{unter der Regie von}},
byproducer = {{produziert von}{produziert von}},
volume = {{Vol\adddot}{Vol\adddot}},
seriesseason = {{Staffel}{Staffel}},
episode = {{Episode}{Episode}},
duration = {{Spieldauer}{Spieldauer}},
fsk = {{FSK}{FSK}},
}
Естественно, вам тогда понадобится
\DeclareLanguageMapping{ngerman}{custombibstrings-ngerman}
С этим файлом и этой одной измененной строкой MWE выдает
редактироватьИзменился {\"u}bers\adddotspace von
на übers\adddotspace von
.