BibLaTeX: Comment puis-je supprimer la virgule après «école» dans l'entrée @thesis?
Je souhaite supprimer la virgule entre le champ "école" et la date (année) dans une entrée de bibliographie @thesis:

Voici mon exemple de code minimal:
\documentclass{minimal}
\usepackage{ngerman}
\usepackage[backend = biber, style = numeric]{biblatex}
%%%%%%%% https://tex.stackexchange.com/a/492917
\newtoggle{bbx:datemissing}
\renewbibmacro*{date}{\toggletrue{bbx:datemissing}%}
\renewbibmacro{volume+number+eid}{%
\printfield{volume}%
\setunit{\addcomma\space}%
\printfield{eid}}
\renewbibmacro*{issue+date}{%
\toggletrue{bbx:datemissing}%
\iffieldundef{issue}{}{
\printtext[parens]{%
\printfield{issue}}}%
\newunit}
\newbibmacro*{date:print}{%
\togglefalse{bbx:datemissing}%
\printdate}
\renewbibmacro*{chapter+pages}{%
\printfield{chapter}%
\setunit{\bibpagespunct}%
\printfield{pages}%
\newunit
\usebibmacro{date:print}%
\newunit}
\renewbibmacro*{note+pages}{%
\printfield{note}%
\setunit{\bibpagespunct}%
\printfield{pages}%
\newunit
\usebibmacro{date:print}%
\newunit}
%%%%%%%%
%%% This is what I came up with
\renewbibmacro{institution+location+date}{%
\printlist{location}%
\iflistundef{institution}{%
\setunit*{\space}%
}{%
\setunit*{\addcolon\space}%
}%
\printlist{institution}%
\setunit*{\space}%
\usebibmacro{date}%
\newunit%
}
\usepackage{filecontents}
\begin{filecontents*}{lit.bib}
@thesis {mythesis,
author = {Me, I.},
school = {University},
title = {Sometitle},
type = {Phd thesis},
year = {123}
}
\end{filecontents*}
\addbibresource{lit.bib}
\begin{document}
\printbibliography
\end{document}
\nocite{*}
J'ai déjà essayé \renewbibmacro{institution+location+date}{...}
, mais cela n'a pas fonctionné. Je suis assez nouveau sur BibLaTeX.
Ma pensée était que le numeric
style utilise les types d'entrée à partir de standard
, d'où j'ai copié la macro et supprimé toutes les virgules. Cependant, cela n'a manifestement pas fonctionné. Comment supprimer cette virgule?
Réponses
Vous pouvez ajouter \nopunct
juste avant le \newunit
de votre institution+location+date
macro redéfinie . J'ai changé la classe de document de votre exemple en article
. Malgré son nom, la minimal
classe de document ne doit pas être utilisée pour les MWE car elle est en fait trop minimale. J'ai également supprimé le filecontents
paquet, qui fait maintenant partie du noyau LaTeX.
\documentclass{article}
\usepackage{ngerman}
\usepackage[backend = biber, style = numeric]{biblatex}
\newtoggle{bbx:datemissing}
\renewbibmacro*{date}{\toggletrue{bbx:datemissing}}
\renewbibmacro{volume+number+eid}{%
\printfield{volume}%
\setunit{\addcomma\space}%
\printfield{eid}}
\renewbibmacro*{issue+date}{%
\toggletrue{bbx:datemissing}%
\iffieldundef{issue}{}{
\printtext[parens]{%
\printfield{issue}}}%
\newunit}
\newbibmacro*{date:print}{%
\togglefalse{bbx:datemissing}%
\printdate}
\renewbibmacro*{chapter+pages}{%
\printfield{chapter}%
\setunit{\bibpagespunct}%
\printfield{pages}%
\newunit
\usebibmacro{date:print}%
\newunit}
\renewbibmacro*{note+pages}{%
\printfield{note}%
\setunit{\bibpagespunct}%
\printfield{pages}%
\newunit
\usebibmacro{date:print}%
\newunit}
%%% This is what I came up with
\renewbibmacro{institution+location+date}{%
\printlist{location}%
\iflistundef{institution}{%
\setunit*{\space}%
}{%
\setunit*{\space}%
}%
\printlist{institution}%
\setunit*{\space}%
\usebibmacro{date}%
\nopunct\newunit%
}
\begin{filecontents*}[overwrite]{\jobname.bib}
@thesis {mythesis,
author = {Me, I.},
school = {University of Somewhere},
title = {Sometitle},
type = {Phd thesis},
year = {1980}
}
\end{filecontents*}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}

La réponse à Changer l'ordre des pages et de l'année dans Biblatex , dont vous utilisez le code, utilise des instruments assez émoussés pour déplacer l' date
impression après pages
. Cela peut ne pas être exactement ce que vous voulez ou ce dont vous avez besoin dans toutes les situations.
Voici une configuration légèrement plus complexe qui ne déplace la date que s'il y en a pages
(ou a chapter
), ce qui peut entraîner une sortie qui fonctionne légèrement mieux pour vous dans certaines situations.
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage[backend=biber, style=numeric]{biblatex}
\newtoggle{bbx:datesuppressed}
\renewbibmacro*{date}{%
\ifboolexpr{
test {\iffieldundef{pages}}
and test {\iffieldundef{chapter}}}
{\printdate}
{\toggletrue{bbx:datesuppressed}}}
\renewbibmacro{volume+number+eid}{%
\printfield{volume}%
\setunit{\addcomma\space}%
\printfield{eid}}
\renewbibmacro*{issue+date}{%
\toggletrue{bbx:datesuppressed}%
\iffieldundef{issue}
{}
{\printtext[parens]{%
\printfield{issue}}}%
\newunit}
\newbibmacro*{date:print}{%
\iftoggle{bbx:datesuppressed}
{\togglefalse{bbx:datesuppressed}%
\printdate}
{}}
\renewbibmacro*{chapter+pages}{%
\printfield{chapter}%
\setunit{\bibpagespunct}%
\printfield{pages}%
\newunit
\usebibmacro{date:print}%
\newunit}
\renewbibmacro*{note+pages}{%
\printfield{note}%
\setunit{\bibpagespunct}%
\printfield{pages}%
\newunit
\usebibmacro{date:print}%
\newunit}
\renewbibmacro{institution+location+date}{%
\printlist{location}%
\iflistundef{institution}
{\setunit*{\space}}
{\setunit*{\addcolon\space}}%
\printlist{institution}%
\setunit*{\space}%
\usebibmacro{date}%
\newunit
}
\begin{filecontents*}{\jobname.bib}
@phdthesis{mythesis,
author = {Me, I.},
school = {University},
title = {Sometitle},
year = {123},
}
\end{filecontents*}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}
\begin{document}
\nocite{mythesis,sigfridsson,westfahl:space}
\printbibliography
\end{document}

Comme Alan l'a expliqué dans les commentaires sous sa réponse, biblatex
la gestion de la ponctuation est asynchrone: la ponctuation est stockée dans un tampon et n'est imprimée qu'une fois qu'elle est nécessaire (c'est-à-dire lorsque la \print...
commande suivante imprime réellement quelque chose). Puisque dans le code de la question, le \usebibmacro{date}
in institution+location+date
n'imprime pas réellement la date, l' \setunit
avant il ne contrôle finalement pas la ponctuation avant la date. La date n'est imprimée que par date:print
in chapter+pages
, auquel point d'autres \setunit
commandes auront ajouté une ponctuation différente dans la mémoire tampon.
\nopunct
définit un marqueur permanent pour ne pas imprimer de ponctuation tant que le nouveau contenu / texte n'est pas imprimé par une \print...
commande. Dans ce cas, cela aide à supprimer la période indésirable. Puisqu'il \nopunct
peut être utilisé à l'intérieur et à l'extérieur du traqueur de ponctuation, c'est un outil pratique pour modifier la ponctuation, mais j'essaie généralement de l'éviter et de préférer les solutions qui ne l'utilisent pas, car il peut avoir des effets qui vont au-delà de ce que l'on souhaite.