![使用 \input 作为甘特图选项](https://linux22.com/image/479026/%E4%BD%BF%E7%94%A8%20%5Cinput%20%E4%BD%9C%E4%B8%BA%E7%94%98%E7%89%B9%E5%9B%BE%E9%80%89%E9%A1%B9.png)
我在使用 \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}
一些代码来消除错误消息。如果你能给我提供一个能产生良好输出的版本,我很乐意用上述方法重现这个问题并附上答案。