La nouvelle commande citer avale la ponctuation
J'ai défini une nouvelle commande cite à afficher shorttitle
au lieu de author
- year
combinaison. Le problème est qu'il avale le signe de ponctuation qui le suit.
J'ai essayé d'utiliser \DeclareCitePunctuationPosition
, mais en vain.
Comment puis-je réparer cela?
\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}
Réponses
biblatex
dispose d'un système très sophistiqué pour éviter les doubles ponctuations indésirables ou les conflits de ponctuation.
En particulier biblatex
, supprimera toute ponctuation après une période de fin de phrase (point). Alors '.;' devient juste «.». Le "problème" est que vous ne voudriez pas supprimer une virgule ou un point-virgule après un point signifiant une abréviation, donc "sv;" est parfaitement bien et n'a pas besoin d'être réduit à «sv». Depuis le '.' a essentiellement deux fonctions, vous devrez aider biblatex
et lui dire ce que vous voulez dire lorsque vous tapez .
. Par défaut, biblatex
suppose que a .
est un point. Si vous souhaitez saisir un point d'abréviation, vous pouvez dire \adddot
ou simplement .\isdot
.
Par conséquent, les affichages suivants 'sv;' ça va.
\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}
Si tous les .
s qui terminent vos notes de publication sont des points d'abréviation, vous pouvez automatiser cela en modifiant le postnote
format du champ (la définition d'origine se trouve dans 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}}%
Ensuite, vous pouvez éviter d'avoir à écrire \isdot
chaque fois que vous utilisez s.v.
dans une note de publication. Mais bien sûr, cela signifie qu'un .
qui est censé être une période de fin de phrase à la fin de la note ne sera pas reconnu comme tel.
Si vous utilisez s.v.
très souvent, vous voudrez peut-être définir une commande pratique qui évite le besoin de \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}