
Я готовлю документы курса на осень, используя tufte-handout
класс, и я хочу включить календарь, используя termcal
. Поэтому я делаю это:
\documentclass{tufte-handout}
\usepackage{fontspec}
\usepackage{termcal}
\defaultfontfeatures{Mapping=tex-text}
\renewcommand{\allcapsspacing}[1]{{\addfontfeature{LetterSpace=20.0}#1}}
\renewcommand{\smallcapsspacing}[1]{{\addfontfeature{LetterSpace=5.0}#1}}
\renewcommand{\textsc}[1]{\smallcapsspacing{\textsmallcaps{#1}}}
\renewcommand{\smallcaps}[1]{\smallcapsspacing{\scshape\MakeTextLowercase{#1}}}
\renewcommand{\calprintclass}{}
\title{Course overview}
\author{English 220}
\date{Fall 2017}
\begin{document}
\maketitle
\begin{fullwidth}
\setlength{\calwidth}{6in}
\begin{calendar}{9/4/17}{10}
\calday[Monday]{\classday} % Monday
\calday[Tuesday]{\classday} % Wednesday
\calday[Wednesday]{\classday}
\calday[Thursday]{\classday} % Thursday (unnumbered)
\calday[Friday]{\classday} % Friday
\skipday\skipday % weekend (no class)
% Holidays
\options{9/21/17}{\noclassday}
\caltext{9/21/17}{No Class\\Rosh Hashanah}
% Key dates
\caltext{9/5/17}{Introductions}
\caltext{9/18/17}{Bring to class \emph{TOTC} \& \emph{The Passion}}
% Exams
\caltext{9/15/17}{Review test on 9th grade grammar \& vocab}
\caltext{9/29/17}{Quiz on vocab list 7}
\caltext{10/20/17}{Quiz on vocab lists 7--8}
\caltext{10/27/17}{Quiz on adj. \& adv. clauses}
\end{calendar}
\end{fullwidth}
\end{document}
Вывод странный. Я бы выложил изображение, но по какой-то причине сейчас не могу этого сделать (следите за этой драмойздесьесли вам интересно), поэтому мне придется это описать.
- Первая дата в календаре правильная (4 сентября); последующие даты: октябрь -25, ноябрь -55, дек. -84, янв. -114 и т. д. (Да, даты являются отрицательными числами.)
- Ячейка за 4 сентября также содержит выражение «Осень 2017>30». Вторая ячейка (октябрь -25) содержит «Осень 2017>31» и т. д.
Похоже, что termcal
возникла проблема с линией.
\date{Fall 2017}
Разные наблюдения:
- Если я изменю эту строку на
\date{}
, я получу кучу сообщений об ошибках и не увижу строку даты в титульном блоке, но календарь отобразится правильно. - Если я полностью удалю строку даты, в титульном блоке будет отображаться сегодняшняя дата (что мне не нужно), но календарь будет отображаться правильно.
- Если я изменю класс документа на
article
, проблема полностью исчезнет.
Есть ли способ использовать date
команду так, как я обычно делаю, и при этом она будет termcal
работать правильно? Или этот пакет просто несовместим с этим классом документа?
решение1
Обвинить termcal
или tufte-common.def
-- оба определяют и используют \thedate
;-)
tufte-common.def
устанавливает \thedate
с помощью аргумента, \date
что является плохой идеей, поскольку \the...
макросы обычно следует использовать только для вывода счетчика.
termcal
определяет новый счетчик с именем date
, что подразумевает автоматическое определение \thedate
, однако, это делается с помощью \gdef\thedate{...}
, перезаписывая старое определение на tufte-common.def
.
На самом деле, tufte-common.def
делает здесь что-то плохо продуманное.
Решением, вместо того чтобы менять, казалось бы, правильное поведение , termcal
является захват оригинальной \date
команды, разработанной LaTeX
до того, как \documentclass
вступил в действие , скажем, с помощью \let\latexdate\date
и произнесение \latexdate{Fall 2017}
вместо \date{Fall 2017}
, что портит систему.
\let\latexdate\date
\documentclass{tufte-handout}
\usepackage{fontspec}
\usepackage{termcal}
\defaultfontfeatures{Mapping=tex-text}
\renewcommand{\allcapsspacing}[1]{{\addfontfeature{LetterSpace=20.0}#1}}
\renewcommand{\smallcapsspacing}[1]{{\addfontfeature{LetterSpace=5.0}#1}}
\renewcommand{\textsc}[1]{\smallcapsspacing{\textsmallcaps{#1}}}
\renewcommand{\smallcaps}[1]{\smallcapsspacing{\scshape\MakeTextLowercase{#1}}}
\renewcommand{\calprintclass}{}
\title{Course overview}
\author{English 220}
\latexdate{Fall 2017}
\begin{document}
\maketitle
\begin{fullwidth}
\setlength{\calwidth}{6in}
\begin{calendar}{9/4/17}{10}
\calday[Monday]{\classday} % Monday
\calday[Tuesday]{\classday} % Wednesday
\calday[Wednesday]{\classday}
\calday[Thursday]{\classday} % Thursday (unnumbered)
\calday[Friday]{\classday} % Friday
\skipday\skipday % weekend (no class)
% Holidays
\options{9/21/17}{\noclassday}
\caltext{9/21/17}{No Class\\Rosh Hashanah}
% Key dates
\caltext{9/5/17}{Introductions}
\caltext{9/18/17}{Bring to class \emph{TOTC} \& \emph{The Passion}}
% Exams
\caltext{9/15/17}{Review test on 9th grade grammar \& vocab}
\caltext{9/29/17}{Quiz on vocab list 7}
\caltext{10/20/17}{Quiz on vocab lists 7--8}
\caltext{10/27/17}{Quiz on adj. \& adv. clauses}
\end{calendar}
\end{fullwidth}
\end{document}
Лучшая версия с переопределением в \date
зависимости от того, загружен termcal или нет
\documentclass{tufte-handout}
\usepackage{fontspec}
\usepackage{termcal}
\makeatletter
\providecommand\tuftedate{}
\@ifpackageloaded{termcal}{%
\renewcommand{\date}[1]{%
\gdef\@date{#1}%
\begingroup%
% TODO store contents of \thanks command
\renewcommand{\thanks}[1]{}% swallow \thanks contents
\protected@xdef\tuftedate{#1}%
\endgroup%
}{%
% Do nothing else, there's no need to redefine \date
}
}
\makeatother
\defaultfontfeatures{Mapping=tex-text}
\renewcommand{\allcapsspacing}[1]{{\addfontfeature{LetterSpace=20.0}#1}}
\renewcommand{\smallcapsspacing}[1]{{\addfontfeature{LetterSpace=5.0}#1}}
\renewcommand{\textsc}[1]{\smallcapsspacing{\textsmallcaps{#1}}}
\renewcommand{\smallcaps}[1]{\smallcapsspacing{\scshape\MakeTextLowercase{#1}}}
\renewcommand{\calprintclass}{}
\title{Course overview}
\author{English 220}
\date{Fall 2017}
\begin{document}
\maketitle
\begin{fullwidth}
\setlength{\calwidth}{6in}
\begin{calendar}{9/4/17}{10}
\calday[Monday]{\classday} % Monday
\calday[Tuesday]{\classday} % Wednesday
\calday[Wednesday]{\classday}
\calday[Thursday]{\classday} % Thursday (unnumbered)
\calday[Friday]{\classday} % Friday
\skipday\skipday % weekend (no class)
% Holidays
\options{9/21/17}{\noclassday}
\caltext{9/21/17}{No Class\\Rosh Hashanah}
% Key dates
\caltext{9/5/17}{Introductions}
\caltext{9/18/17}{Bring to class \emph{TOTC} \& \emph{The Passion}}
% Exams
\caltext{9/15/17}{Review test on 9th grade grammar \& vocab}
\caltext{9/29/17}{Quiz on vocab list 7}
\caltext{10/20/17}{Quiz on vocab lists 7--8}
\caltext{10/27/17}{Quiz on adj. \& adv. clauses}
\end{calendar}
\end{fullwidth}
\end{document}