我正在为秋季准备课程文件,使用课程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}
输出结果很奇怪。我本来想发布一张图片,但出于某种原因,我现在无法做到这一点(关注那出戏这里如果你好奇的话),所以我必须描述一下。
- 日历中的第一个日期是正确的(9 月 4 日);后续日期是 10 月 -25 日、11 月 -55 日、12 月 -84 日、1 月 -114 日等等。(是的,日期是负数。)
- 9 月 4 日的单元格还包含表达式“2017 年秋季 > 30”。第二个单元格(10 月 -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}