Pacote ou macro para calcular no próximo dia útil?

Pacote ou macro para calcular no próximo dia útil?

Existe um pacote ou macro em um pacote existente que calculará o próximo dia útil ounº dia útil (considerando uma lista de feriados) a partir de hoje ou em uma data arbitrária? (Se não houver, acho que finalmente terei algo para codificar e postar no CTAN)

Responder1

Não conheço um pacote que faça tudo, mas opgfcalendarpacote é muito poderoso. O seguinte MWE trata do próximo dia útil (assumindo que não haja uma semana inteira de feriados)

\documentclass{article}
\usepackage{pgfkeys}
\usepackage{pgfcalendar}
\usepackage{etoolbox}
\newif\ifholiday
\def\holidays{2016-09-12, 2016-09-16, 2016-09-20, 2016-09-21, 2016-09-23, 2016-09-26}
\newcount\nextjulianday
\newcount\julianholiday
\newcommand{\isholiday}[2]{%
    \holidayfalse%
    \def\do##1{%
        \pgfcalendardatetojulian{##1}{\julianholiday}%
        \ifnumequal{\the\julianholiday}{\the\nextjulianday}{\holidaytrue}{}%
    }%
    \docsvlist{#1}%
}
\newcommand{\nextbusinessday}[1]{\begingroup%
    \pgfcalendardatetojulian{#1}{\nextjulianday}%
    \advance\nextjulianday 1\relax%
    \loop
        \expandafter\isholiday\expandafter{\holidays}{\the\nextjulianday}%
        \ifholiday%
            \advance\nextjulianday 1\relax%
            \repeat%
    \pgfcalendarjuliantodate{\the\nextjulianday}{\theyear}{\themonth}{\theday}%
    \pgfcalendarifdate{\theyear-\themonth-\theday}{Saturday}{%
        \advance\nextjulianday 1\relax%
        \pgfcalendarjuliantodate{\the\nextjulianday}{\theyear}{\themonth}{\theday}%
    }{}%
    \pgfcalendarifdate{\theyear-\themonth-\theday}{Sunday}{%
        \advance\nextjulianday 1\relax%
        \pgfcalendarjuliantodate{\the\nextjulianday}{\theyear}{\themonth}{\theday}%
    }{}%
    \loop
        \expandafter\isholiday\expandafter{\holidays}{\the\nextjulianday}%
        \ifholiday%
            \advance\nextjulianday 1\relax%
            \repeat%
    \pgfcalendarjuliantodate{\the\nextjulianday}{\theyear}{\themonth}{\theday}%
    \theyear-\themonth-\theday
\endgroup}
\begin{document}
Holidays:

\def\do#1{#1\par}
\expandafter\docsvlist\expandafter{\holidays}

\def\do#1{2016-09-#1 -- \nextbusinessday{2016-09-#1}\par}
\docsvlist{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30}
\end{document}

Deveria ser possível expandir a abordagem para lidar com o enésimo dia útil.

informação relacionada