使用 \input 作为甘特图选项

使用 \input 作为甘特图选项

我在使用 \input 输入甘特图选项时遇到问题。

甘特图的命令是:

\begin{ganttchart}[options]{start tss}{end tss}
· · ·
\end{ganttchart}

在[选项]的位置,我尝试输入一个具有我的标准甘特图选项的文件,这样我只需要在两个版本的甘特图(两个不同的受众获得不同的里程碑)的一个地方更改这些选项。

因此,我的编译文件有以下代码:

\documentclass[varwidth]{standalone}

\usepackage{pgfgantt}

\newcommand{\sdate}{2020-01-01}
\newcommand{\edate}{2020-08-31}
\newcommand{\ct}{blue}  % Color Theme
\newcommand{\tc}{\Large\bfseries\color{white}} % Title Text Format
\newcommand{\dn}[1]{*#1{draw=none}} % Shorthand for draw=none
\newcommand{\ws}{dashed}  % Style for weekly vertical lines
\newcommand{\ms}{line width=1pt}    % Style for Monthly vertical lines
\newcommand{\td}{2020-01-10}
\newcommand{\gnl}{\ganttnewline[thick, red]}

\begin{document}
\begin{ganttchart}  
    \input{timeline.tex}
    \ganttbar{\tiny{Model Development}}{2020-01-01}{2020-03-15}\\
    \ganttbar{\tiny{Model Verification}}{2020-02-20}{2020-03-31}\\
    \end{ganttchart}
\end{document}

timeline.tex 如下所示:

% Gantt Settings
[
    canvas/.append style={very thick},
    expand chart=\textwidth,
    time slot format=isodate,
    today/.expanded = \td,
    today offset=.5,
    today rule/.style={draw=\ct, thick},
    today label font = \tiny,
    today label node /.append style = {anchor = north west},
    today label = Today,
    title/.append style={fill=\ct!50},
    y unit title=0.5cm,
    title height=0.8,
    title label font = \tc,
    bar/.append style={fill=\ct!10},
    bar height = 0.3,
    inline,
    milestone inline label node/.append style={left=5mm},
    milestone height = 0.5,
    milestone/.append style={xscale = 5, fill=\ct}
]
{\sdate}{\edate}

\gantttitle{Project Timeline}{244} \\ % title 1
\gantttitlecalendar*{\sdate}{\edate}{month=shortname} \\

当所有内容都在一个文件中时,所有选项都有效,所以我怀疑问题出在 timeline.tex 的内容上。我收到的错误类似于“缺少数字”。我尝试将括号放在编译文档中,并只将选项放在 \input 中,但这也不起作用。

有人能解释一下吗?我以为 \input 只是从其他文件中复制并粘贴了内容……

最后两个代码块应该是 MWE(或不起作用的示例)。

答案1

\input无法按照您想要的方式工作。有一个catchfile包原则上允许您将文件的内容存储在宏中,并且可能在这里可以工作。但是,我建议走另一条路。这是一个原则上可行的版本。将您的文件更改timeline.tex

\ganttset{mygantt/.style={canvas/.append style={very thick},
    expand chart=\textwidth,
    time slot format=isodate,
    today/.expanded = \td,
    today offset=.5,
    today rule/.style={draw=\ct, thick},
    today label font = \tiny,
    today label node /.append style = {anchor = north west},
    today label = Today,
    title/.append style={fill=\ct!50},
    y unit title=0.5cm,
    title height=0.8,
    title label font = \tc,
    bar/.append style={fill=\ct!10},
    bar height = 0.3,
    inline,
    milestone inline label node/.append style={left=5mm},
    milestone height = 0.5,
    milestone/.append style={xscale = 5, fill=\ct}
}}
\pgfkeys{myganttcommands/.code={\gantttitle{Project Timeline}{244} \\ % title 1
\gantttitlecalendar*{\sdate}{\edate}{month=shortname} \\}}

然后使用

\documentclass[varwidth]{standalone}

\usepackage{pgfgantt}

\newcommand{\sdate}{2020-01-01}
\newcommand{\edate}{2020-08-31}
\newcommand{\ct}{blue}  % Color Theme
\newcommand{\tc}{\Large\bfseries\color{white}} % Title Text Format
\newcommand{\dn}[1]{*#1{draw=none}} % Shorthand for draw=none
\newcommand{\ws}{dashed}  % Style for weekly vertical lines
\newcommand{\ms}{line width=1pt}    % Style for Monthly vertical lines
\newcommand{\td}{2020-04-15}%<-added
\begin{document}
\input{timeline.tex}
\begin{ganttchart}[mygantt]{\sdate}{\edate}  
    \pgfkeys{myganttcommands}
\end{ganttchart}
\end{document}

我怀疑你使用指定数据的代码是否能正常工作,例如,我不得不添加\newcommand{\td}{2020-04-15}一些代码来消除错误消息。如果你能给我提供一个能产生良好输出的版本,我很乐意用上述方法重现这个问题并附上答案。

相关内容