¿Cómo probar si los comandos similares a \printdate no imprimen texto 'vacío'?

¿Cómo probar si los comandos similares a \printdate no imprimen texto 'vacío'?

Esta es una pregunta de seguimiento para¿Cómo verificar si la entrada `country = {}` está vacía en una biblioteca BibLaTeX personalizada?

Tengo una biblioteca BibLaTeX personalizada con la entrada BiBLaTeX Contribution, que uso para gestionar todas mis contribuciones orales y de carteles en conferencias, talleres, etc. Gracias a la ayuda que recibí en el sitio mencionado anteriormente, tengo un buen sistema de trabajo.

Sin embargo, hay algunos problemas estéticos: tengo una entrada llamada periodque incluye el período de tiempo de, por ejemplo, una conferencia. Aparecerá detrás del título del evento entre paréntesis (ver ejemplo a continuación). En un .dbxarchivo, declaro el campo de entrada periodcomo un tipo de datos de fecha y, por lo tanto, puedo llamar al comando \printperiod. Hasta ahora, todo bien.

En algunas entradas de BibLaTeX, este campo periodestá vacío, por lo que period = {}.

¿Cómo puedo saber mediante una condición 'si', 'entonces', 'si no', si \printperiodestá imprimiendo texto, para decir si period = {}?

Lo probé \iffieldundef{period}y \ifciteindexotras cosas pero no consigo que funcione.

Hasta ahora, aquí está primero el MWE:

\begin{filecontents}{contribution.dbx}
\DeclareDatamodelEntrytypes{contribution}
\DeclareDatamodelFields[type=field,datatype=literal]{
  type,
  invited,
  title,
  event,
  eventshort,
  eventtype,
  league,
  url,
  place,
  city,
  country,
  year,
  note,
  timestamp
}
\DeclareDatamodelFields[type=field, datatype=datepart]{
  year,
  month,
  day,
  periodyear,
  periodmonth,
  periodday
}
\DeclareDatamodelFields[type=field, datatype=date, skipout]{
  date,
  period,
}
\DeclareDatamodelFields[type=list,datatype=name]{
  author,
  presenter,
}
\DeclareDatamodelEntryfields[contribution]{
  type,
  invited,
  author,
  presenter,
  title,
  event,
  eventshort,
  eventtype,
  league,
  url,
  place,
  city,
  country,
  date,
  period,
  year,
  note,
  timestamp}
\end{filecontents}


\begin{filecontents}{\jobname.bib}
@Contribution{Oral_2016_1,
  Type      = {Oral},
  Invited   = {invited},
  Author    = {Author1, A. and Author2, B. and Author3, C. and Author4, D.},
  Presenter = {Author2, B.},
  Title     = {{Cool stuff about the nano-world}},
  Event     = {{22$^{\rm nd}$ International Conference on Nanotechnology}},
  Eventshort= {{NANO-7}},
  Eventtype = {Conference},
  League    = {International},
  URL       = {},
  Place     = {Alto University},
  City      = {Helsinki},
  Country   = {Finland},
  Date      = {2016-05-31},
  Period    = {2016-05-22/2016-06-02},
  Year      = {2016},
  Note      = {},
  Timestamp = {}
}
@Contribution{Oral_2016_2,
  Type      = {Oral},
  Invited   = {},
  Author    = {Author1, A. and Author2, B. and Author3, C. and Author4, D.},
  Presenter = {Author1, B.},
  Title     = {{Cool stuff about the nano-world}},
  Event     = {{22$^{\rm nd}$ International Workshop on NanoPhenomena}},
  Eventshort= {{IWNP-8}},
  Eventtype = {Workshop},
  League    = {International},
  URL       = {},
  Place     = {University of Nano},
  City      = {Tokyo},
  Country   = {Japan},
  Date      = {2016-03-04},
  Period    = {},
  Year      = {2016},
  Note      = {},
  Timestamp = {}
}
\end{filecontents}


\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[datamodel=contribution,
            style=chem-acs,
            dateabbrev=false,
            natbib=true,
            backend=biber]
           {biblatex}
\addbibresource{\jobname.bib}



% My own command, which puts into format and prints the complete contribution.
\DeclareCiteCommand{\citeallstuff}
  {\defcounter{maxnames}{99}%
   \defcounter{minnames}{99}%
   \defcounter{uniquename}{2}%
   \boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{prenote}}
  {%
   \ifciteindex{\indexnames*{labelname}}{}\printnames{labelname}, %
   \iffieldundef{title}{}{\textit{\printtext{\printfield{title}}}\space}%
   \iffieldundef{event}{}{\printtext{\printfield{event}}}%
   \space(\printperiod)\addcomma\space% <============ What must I do there? 
   \iffieldundef{city}{}{\printtext{\printfield{city}}}%
   \iffieldundef{country}{\addcomma\space}{ \printtext{(\printfield{country}})\addcomma\space}%
   \printdate% <============ The same here? 
   \iffieldundef{note}{}{\addcomma\space\printtext{\printfield{note}}}%
   \iffieldundef{invited}{}{\addcomma\space{\textbf{\printtext{\printfield{invited}}}}}
   }   
  {\multicitedelim}
  {\usebibmacro{postnote}}




\begin{document}

\noindent\citeallstuff{Oral_2016_1}\\\\\\
\citeallstuff{Oral_2016_2}

\printbibliography
\end{document}

La salida del MWE

Como se puede ver, la segunda cita tiene un () detrás del título del evento, porque el campo 'punto' está vacío period = {}. En este caso no deberían aparecer los dos corchetes sino una coma y un espacio.

Gracias por un poco de ayuda.

PD: Pequeña pregunta adicional: ¿Cómo puedo cambiar, por ejemplo, May 31a May 31$^{\rm st}$?

Respuesta1

Aquí hay una combinación de dos cuestiones.

El número 1 es que no debes escribir formato simple en bibmacros ni citar comandos, debes usar \DeclareFieldFormaty amigos.

entonces escribe

\DeclareFieldFormat{perioddate}{\mkbibparens{#1}}

y luego más tarde

\printperioddate

y la fecha del período estará entre paréntesis. Con este método no es necesario comprobar si el campo está vacío. Si está vacío no obtienes nada, si contiene algo lo recuperas en el formato correcto. Si realmente debe verificar si una fecha está definida, el método estándar es verificar la parte del año.

\iffieldundef{periodyear}
  {<no date>}
  {<date>}

biblatexSolo imprimirá una fecha si tiene un año y si la fecha tiene un año, biblateximprime al menos eso.

Sin embargo , todo esto no funciona con biblatex3.7/Biber 2.8, si ingresa campos vacíos 'explícitamente' como

perioddate = {}

En ese caso, obtendrá una devolución periodyear = {}, lo que confunde a todos, porque en lo que biblatexrespecta a eso cuenta como un año definido.

Este es un error conocido que se resolverá con Biber 2.8, consultehttps://github.com/plk/biblatex/issues/528.

Mientras tanto, todo lo que puedes hacer es abandonar el extraño hábito de escribir perioddate = {}campos vacíos en lugar de dejarlos completamente fuera de la entrada. Si por alguna razón no quieres hacer eso, deja que Biber lo haga por ti con

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[fieldsource=perioddate, match=\regexp{^$}, final]
      \step[fieldset=perioddate, null]
      }
    }
}

información relacionada