저는 "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
.)