El nuevo comando cite se traga la puntuación
Definí un nuevo comando cite para mostrar en shorttitle
lugar de author
- year
combinación. El problema es que se traga el signo de puntuación que le sigue.
Intenté usarlo \DeclareCitePunctuationPosition
, pero fue en vano.
¿Cómo puedo arreglar esto?
\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}

Respuestas
biblatex
tiene un sistema muy sofisticado para evitar doble puntuación indeseable o choques de puntuación
En particular biblatex
, suprimirá cualquier puntuación después de un período de finalización de una oración (punto). Entonces '.;' se convierte en solo '.'. El 'problema' es que no querría suprimir una coma o un punto y coma después de un punto que significa una abreviatura, entonces 'sv;' está perfectamente bien y no es necesario reducirlo a 'sv'. Desde el '.' tiene esencialmente dos funciones, tendrá que ayudar biblatex
y decirle lo que quiere decir cuando escribe .
. De forma predeterminada, se biblatex
asume que a .
es un punto. Si desea ingresar un punto de abreviatura, puede decir \adddot
o simplemente .\isdot
.
Por lo tanto, lo siguiente muestra 'sv;' muy bien.
\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 todos .
los mensajes de correo electrónico que terminan en sus postnotes son puntos de abreviatura, puede automatizar esto modificando el postnote
formato del campo (la definición original se puede encontrar en 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}}%
Entonces puedes evitar tener que escribir \isdot
cada vez que utilices s.v.
en una nota posterior. Pero, por supuesto, eso significa que un .
período que se supone que es un período de finalización de oración al final de la nota posterior no se reconocerá como tal.
Si lo utiliza con s.v.
mucha frecuencia, es posible que desee definir un comando útil que evite la necesidad 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}