我想删除序数和月份名称,termcal
但到目前为止还没有成功。根据软件包文档,原始代码是:
\newcommand{\calprintdate}{%
\ifnewmonth\framebox{\monthname\ \ordinaldate}%
\else \ordinaldate\fi
}
这样就会得到像“10 月 1 日”或“8 月 26 日”这样的日期。我的目标是分别将它们更改为“10/1”和“8/26”。由于我是 LaTeX 新手,所以我的尝试有点尴尬:
\renewcommand{\calprintdate}{%
\ifnewmonth\framebox{\c@month\ \c@date}%
\else \ordinaldate\fi
}
这会输出“@month @date”之类的乱码,这让我很困惑,因为文档确实指出这\c@month
是月份计数器(Jan = 1)。我也没有更改\ordinaldate
该\else
行,我不知道这是什么\fi
意思。
这是一个没有的最小工作示例\renewcommand
:
\documentclass[12pt]{article}
\usepackage{termcal}
\begin{document}
\begin{calendar}{8/31/2014}{5}
\setlength{\calboxdepth}{.3in}
% Description of the Week.
\calday[Sun]{\noclassday} % Sunday
\skipday\skipday % Monday, Tuesday
\calday[Wed]{\noclassday} % Wednesday
\skipday\skipday % Thursday, Friday
\calday[Sat]{\noclassday}
\caltext{8/31/2014}{Exam 1}
\caltext{9/7/2014}{Exam 2}
\end{calendar}
\end{document}
我也不明白为什么要打印“9 月 3 日”,如果根据\calprintdate
,只应打印新月份的日期。
答案1
事实证明这很容易:在内部术语表使用计数器month
,date
(用于月份中的日期)和year
。因此,要执行所需的操作,您只需要执行以下操作:
\renewcommand{\calprintdate}{%
\ifnewmonth\framebox{\arabic{month}/\arabic{date}}%
\else\arabic{date}%
\fi}
现在你的日历变成:
我认为这就是你想要的。如果你想始终打印月份数字,那么请使用:
\renewcommand{\calprintdate}{%
\ifnewmonth\framebox{\arabic{month}/\arabic{date}}%
\else\arabic{month}/\arabic{date}%
\fi}
最后,如果你不想在每个月的第一个日期周围出现方框,你可以将其简化为
\renewcommand{\calprintdate}{\arabic{month}/\arabic{date}}
[编辑在旁边:“@month @date 乱码”的解释:
在 LaTeX 中,你可以使用以下方法创建计数器
\newcounter{countername}
在内部,这被存储为 TeX 计数器\c@countername
(此处countername
可以是任意的)。在幕后代码中,使用\c@countername
形式有时很有用,但对于普通人来说,这很少是必要的。如果您确实要使用,\c@countername
那么您应该用 @ 字符包围您的代码,\makeatletter...\makeatother
因为 @ 字符是“受保护的”,因此不能在普通命令中使用 - 这就是为什么@month
在您尝试这样做时会打印 etc。(有关 @ 的更多信息,请在 TeX 中搜索“类别代码”。)最后,如上所述,要打印计数器,您可以使用\arabic{countername}
将其打印为普通数字(1
,2
,3
,...
),\alph{countername}
按顺序打印a
,b
,c
, `...,等等。]