datetime2로 날짜를 저장하고 termcal과 함께 사용하십시오.

datetime2로 날짜를 저장하고 termcal과 함께 사용하십시오.

저는 "termcal" 패키지를 사용하여 수업 계획서를 만들고 있는데 첫 번째 수업의 시작 날짜를 저장하여 강의 계획서의 다양한 요소에 사용할 수 있도록 하고 싶습니다. 현재 \DTMsavedate"datetime2" 패키지의 함수를 사용하여 날짜를 저장하려고 합니다 .

\DTMusedate{startDate}예를 들어 단락 내에서 사용하면 날짜가 잘 표시됩니다 . 하지만 에 대한 날짜 옵션에 전달하려고 하면 \begin{calender}"\setdate@이 완료되기 전에 단락이 종료되었습니다"라는 오류 메시지가 나타납니다. 이 작업을 수행할 수 있는 방법이 있나요? 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}

도움을 주시면 정말 감사하겠습니다. 감사합니다!

답변1

먼저 TeX.SX에 오신 것을 환영합니다. MWE를 요청하고 수행하는 방법을 아는 새로운 사용자를 만나니 반갑습니다.

패키지 termcal는 형식의 날짜만 허용합니다 <month>/<day>/<year>. 그리고 날짜 인수는 \begin{calendar}구문 분석 전에 확장되지 않습니다. 즉, 매크로를 사용할 수 없습니다. 후자는 변경될 수 있지만 `\DTMusedate'에서는 작동하지 않습니다.

패키지 사용을 고집하지 않는다면 datetime2패키지 없이 해결할 수 있는 방법이 있습니다.

날짜를 저장하기 위해 \startDate올바른 형식의 날짜만 포함하는 간단한 명령이 정의됩니다. 그리고 매크로가 인수로 작동하도록 \begin{calendar} \setdate재정의되어 구문 분석되기 전에 인수를 확장합니다.

\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}

답변2

Mike의 답변에 따라 실제로 사용해야 하는 경우 인수로 전달되기 전에 완전히 확장되었는지 datetime2확인할 수 있습니다 .\DTMusedate

\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}

여기에 약간의 수정이 있습니다.마이크의 제안:

\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}

calendar이렇게 하면 문서의 나머지 부분에 다른 날짜 스타일이 있더라도 날짜가 항상 환경에 필요한 스타일로 유지됩니다 . (스타일 변경은 환경에 따라 자동으로 범위가 지정됩니다 mycalendar.)

관련 정보