使用该包创建甘特图pgfgantt
,以星期几作为标题,可以title list options
按照包手册中演示的方式完成。但它似乎与以下内容不符beamer
:
\documentclass{beamer}
%\documentclass{article}
\usepackage{pgfgantt}
\usepackage{pgfcalendar}
\begin{document}
\begin{frame}
\begin{ganttchart}[x unit = 3em]{7}
\gantttitlelist[title list options={var=\y, evaluate=\y as \x using "\pgfcalendarweekdayshortname{\y}"}]{0,...,6}{1}\\
\end{ganttchart}
\end{frame}
\end{document}
错误信息:
! Use of \\gantttitlelist doesn't match its definition.
\kernel@ifnextchar ...rved@d =#1\def \reserved@a {
#2}\def \reserved@b {#3}\f...
l.11 \end{frame}
? x
有没有什么解决方法?
答案1
article
使用带有包的类时会出现同样的问题translator
,后者由 加载beamer
。
该宏\pgfcalendarweekdayshortname
将其输出包装在中\translate
,其与translator
的定义一样,在仅扩展的上下文中似乎并不安全,后者是执行evaluate
for的上下文。\foreach
有多种解决方法。以下是其中几种:
\noexpand
最简单的方法,正如 percusse 所建议的,是在之前添加\pgfcalendarweekdayshortname
。或者(我原来的答案),可以重置
\translate
为像 一样的行为\@firstofone
,这就是在未加载包时(模)pgfcalendar
设置的。translator
\long
MWE 上下文中的解决方法代码:
\documentclass{beamer} %\documentclass{article} %\usepackage{translator} \usepackage{pgfgantt} \usepackage{pgfcalendar} % by putting \resettranslate in a macro, we avoid issues with directly placing a \renewcommand or \makeatletter in beamer's frame environment \makeatletter \newcommand{\resettranslate}{\let\translate\@firstofone} \makeatother \begin{document} \begin{frame} \begin{ganttchart}[x unit = 3em]{7} \resettranslate \gantttitlelist[title list options={var=\y, evaluate=\y as \x using "\pgfcalendarweekdayshortname{\y}"}]{0,...,6}{1}\\ \end{ganttchart} \end{frame} \end{document}
为了清楚起见,我将补丁保留在环境中。这意味着除非准备更改整个文档(例如,在定义后立即执行),否则
ganttchart
每个环境都需要补丁。ganttchart
\translate
\resettranslate