Il nuovo comando di citazione inghiotte la punteggiatura
Ho definito un nuovo comando cite da mostrare al shorttitle
posto di author
- year
combination. Il problema è che ingoia il segno di punteggiatura che lo segue.
Ho provato a usare \DeclareCitePunctuationPosition
, ma senza successo .
Come posso risolvere questo problema?
\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}

Risposte
biblatex
ha un sistema molto sofisticato per evitare indesiderate doppie punteggiatura o scontri di punteggiatura.
In particolare biblatex
, sopprimerà qualsiasi punteggiatura dopo un punto di fine frase (punto). Così '.;' diventa solo ".". Il "problema" è che non si desidera sopprimere una virgola o un punto e virgola dopo un punto che indica un'abbreviazione, quindi "sv;" è perfettamente a posto e non deve essere ridotto a "sv". Poiché il "." ha essenzialmente due funzioni, dovrai aiutarlo biblatex
e dirgli cosa intendi quando digiti .
. Per impostazione predefinita, si biblatex
presume che a .
sia un punto. Se vuoi inserire un'abbreviazione punto puoi dire \adddot
o semplicemente .\isdot
.
Quindi, quanto segue visualizza "sv;" va bene.
\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}

Se tutti .
i messaggi che terminano con le note post sono punti di abbreviazione, puoi automatizzarli modificando il postnote
formato del campo (la definizione originale può essere trovata 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}}%
Quindi puoi evitare di dover scrivere \isdot
ogni volta che usi s.v.
in un postnote. Ma ovviamente questo significa che un punto .
che dovrebbe essere un periodo di fine frase alla fine della nota successiva non sarà riconosciuto come tale.
Se stai usando s.v.
molto spesso potresti voler definire un comodo comando che eviti la necessità di \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}