pgfgantt“标题列表选项”与 beamer 不兼容

pgfgantt“标题列表选项”与 beamer 不兼容

使用该包创建甘特图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的定义一样,在仅扩展的上下文中似乎并不安全,后者是执行evaluatefor的上下文。\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

相关内容