Neuer Cite-Befehl verschluckt Interpunktion
Ich definiert einen neuen Befehl zitieren zeigen shorttitlestatt author- yearKombination. Das Problem ist, dass es das darauf folgende Interpunktionszeichen verschluckt.
Ich habe es versucht \DeclareCitePunctuationPosition, aber ohne Erfolg.
Wie kann ich das beheben?
\documentclass{article}
\usepackage{biblatex-chicago}
\DeclareCiteCommand{\citeabbr}
{\usebibmacro{cite:init}%
\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\printtext[bibhyperref]{\textit{\printfield{shorttitle}}}}
{\multicitedelim}
{\usebibmacro{postnote}}
\DeclareCitePunctuationPosition{\citeabbr}{r} % doesn't work
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{Howlett1975,
title = {Dictionary of Medieval Latin from British Sources},
shorttitle = {DMLBS},
editor = {Howlett, D.R.},
date = {1975/2013},
publisher = {Oxford University Press},
location = {Oxford},
addendum = {DMLBS},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\usepackage{hyperref}
\begin{document}
\citeabbr[s.v.]{Howlett1975}; this cite command has swallowed my semicolon.
\end{document}
Antworten
biblatex hat ein sehr ausgeklügeltes System, um unerwünschte doppelte Interpunktion oder Interpunktionskollisionen zu vermeiden.
Insbesondere biblatexwird jede Interpunktion nach einer Satzendperiode (Punkt) unterdrückt. Damit '.;' wird nur '.'. Das 'Problem' ist, dass Sie ein Komma oder Semikolon nach einem Punkt, der eine Abkürzung bedeutet, nicht unterdrücken möchten, also 'sv;' ist vollkommen in Ordnung und muss nicht auf 'sv' reduziert werden. Seit der '.' hat im Wesentlichen zwei Funktionen, müssen Sie mithelfen biblatexund sagen, was Sie beim Tippen meinen .. Standardmäßig wird biblatexangenommen, dass a .ein Punkt ist. Wenn Sie einen Abkürzungspunkt eingeben möchten, können Sie sagen \adddotoder einfach .\isdot.
Daher zeigt das Folgende 'sv;' Alles gut.
\documentclass{article}
\usepackage{biblatex-chicago}
\DeclareCiteCommand{\citeabbr}
{\usebibmacro{cite:init}%
\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\printtext[bibhyperref]{\printfield[emph]{shorttitle}}}
{\multicitedelim}
{\usebibmacro{postnote}}
\begin{filecontents}{\jobname.bib}
@book{Howlett1975,
title = {Dictionary of Medieval Latin from British Sources},
shorttitle = {DMLBS},
editor = {Howlett, D.R.},
date = {1975/2013},
publisher = {Oxford University Press},
location = {Oxford},
addendum = {DMLBS},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\usepackage{hyperref}
\begin{document}
\citeabbr[s.v.\isdot]{Howlett1975}; this cite command has swallowed my semicolon.
\end{document}
Wenn alle .s, die Ihre Postnoten beenden, Abkürzungspunkte sind, können Sie dies automatisieren, indem Sie das postnoteFeldformat ändern (die ursprüngliche Definition finden Sie in chicago-notes.cbx).
\DeclareFieldFormat{postnote}{% Changed for page compression option
\ifboolexpr{%
togl {cms@comprange}%
and
test {\ifpages{#1}}%
}%
{\iffieldundef{pagination}%
{\mkcomprange{#1}}%
{\mkcomprange[{\mkpageprefix[pagination]}]{#1}}}%
{\iffieldundef{pagination}%
{#1}%
{\mkpageprefix[pagination]{#1}}%
\isdot}}%
Dann müssen Sie nicht \isdotjedes Mal schreiben, wenn Sie s.v.eine Postnote verwenden. Das bedeutet aber natürlich, dass ein .Punkt, der am Ende der Postnote als Satzende gelten soll, nicht als solcher anerkannt wird.
Wenn Sie s.v.sehr häufig verwenden, möchten Sie möglicherweise einen praktischen Befehl dafür definieren, der die Notwendigkeit vermeidet \isdot.
\documentclass{article}
\usepackage{biblatex-chicago}
\DeclareCiteCommand{\citeabbr}
{\usebibmacro{cite:init}%
\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\printtext[bibhyperref]{\printfield[emph]{shorttitle}}}
{\multicitedelim}
{\usebibmacro{postnote}}
\NewBibliographyString{sv}
\DefineBibliographyStrings{english}{
sv = {s\adddot v\adddot},
}
\newcommand*{\sv}{\bibstring{sv}}
\begin{filecontents}{\jobname.bib}
@book{Howlett1975,
title = {Dictionary of Medieval Latin from British Sources},
shorttitle = {DMLBS},
editor = {Howlett, D.R.},
date = {1975/2013},
publisher = {Oxford University Press},
location = {Oxford},
addendum = {DMLBS},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\usepackage{hyperref}
\begin{document}
\citeabbr[\sv]{Howlett1975}; this cite command has swallowed my semicolon.
\end{document}