Estoy creando un programa de estudios de clase usando el paquete "termcal" y me gustaría almacenar la fecha de inicio de la primera clase para poder usarla para diferentes elementos del programa de estudios. Actualmente estoy intentando almacenar la fecha usando la \DTMsavedate
función del paquete "datetime2".
La fecha se mostrará bien si la usa, por ejemplo, \DTMusedate{startDate}
dentro de un párrafo. Pero si intento pasarlo a la opción de fecha para \begin{calender}
, aparece el mensaje de error "El párrafo finalizó antes de que se completara \setdate@". ¿Hay alguna manera de hacer que esto funcione? El MWE:
\documentclass[12pt]{article}
\usepackage{termcal}
\usepackage[american,useregional=numeric]{datetime2}
\DTMsavedate{startDate}{2017-8-29}
\begin{document}
\begin{calendar}{\DTMusedate{startDate}}{16}
\setlength{\calboxdepth}{.3in}
\setlength{\calwidth}{0.8\textwidth}
% Description of the Week.
\calday[Tuesday]{\classday}
\skipday
\calday[Thursday]{\classday}
\skipday
\skipday
\skipday
\skipday
\end{calendar}
\end{document}
Realmente agradecería cualquier ayuda con esto, ¡gracias!
Respuesta1
Primero, bienvenido a TeX.SX. Es bueno ver un nuevo usuario que sabe cómo preguntar y hacer un MWE.
El termcal
paquete sólo acepta fechas en formato <month>/<day>/<year>
. Y el argumento de fecha de \begin{calendar}
no se expande antes del análisis, es decir, no se pueden usar macros. Esto último se puede cambiar, pero esto no funciona con `\DTMusedate'.
Si no insiste en utilizar el datetime2
paquete, aquí tiene una solución sin él.
Para guardar la fecha, \startDate
se define un comando simple, que solo contiene la fecha en el formato correcto. Y para hacer que las macros funcionen como argumento, \begin{calendar}
\setdate
se redefine de modo que expanda el argumento antes de analizarlo.
\documentclass[12pt]{article}
\usepackage{termcal}
\newcommand*{\startDate}{08/29/2017}
\makeatletter
\renewcommand{\setdate}[1]{\expandafter\setdate@#1!}
\makeatother
\begin{document}
\begin{calendar}{\startDate}{16}
\setlength{\calboxdepth}{.3in}
\setlength{\calwidth}{0.8\textwidth}
% Description of the Week.
\calday[Tuesday]{\classday}
\skipday
\calday[Thursday]{\classday}
\skipday
\skipday
\skipday
\skipday
\end{calendar}
\end{document}
Respuesta2
Siguiendo con la respuesta de Mike, si realmente necesita usarlo datetime2
, puede asegurarse de que \DTMusedate
esté completamente expandido antes de pasarlo como argumento:
\documentclass[12pt]{article}
\usepackage{termcal}
\usepackage[american,useregional=numeric]{datetime2}
\DTMsavedate{startDate}{2017-8-29}
\begin{document}
\edef\startCalendar{\noexpand\begin{calendar}{\DTMusedate{startDate}}{16}}
\startCalendar
\setlength{\calboxdepth}{.3in}
\setlength{\calwidth}{0.8\textwidth}
% Description of the Week.
\calday[Tuesday]{\classday}
\skipday
\calday[Thursday]{\classday}
\skipday
\skipday
\skipday
\skipday
\end{calendar}
\end{document}
Aquí hay una modificación menor ala sugerencia de mike:
\documentclass[12pt]{article}
\usepackage{termcal}
\usepackage{datetime2}
\DTMsavedate{startDate}{2017-8-29}
\newenvironment{mycalendar}[2]{%
\DTMsetup{monthdaysep=/,dayyearsep=/}%
\DTMsetstyle{mmddyyyy}%
\edef\startCalendar{\noexpand\begin{calendar}{#1}{#2}}%
\startCalendar
}
{\end{calendar}}
\begin{document}
\begin{mycalendar}{\DTMusedate{startDate}}{16}
\setlength{\calboxdepth}{.3in}
\setlength{\calwidth}{0.8\textwidth}
% Description of the Week.
\calday[Tuesday]{\classday}
\skipday
\calday[Thursday]{\classday}
\skipday
\skipday
\skipday
\skipday
\end{mycalendar}
\end{document}
Esto garantiza que la fecha siempre tenga el estilo requerido por el calendar
entorno, incluso si tiene un estilo de fecha diferente en el resto del documento. (El cambio de estilo lo determina automáticamente el mycalendar
entorno).