如何使 pgfgantt 缩放到页面中的特定宽度?(例如 textwidth)

如何使 pgfgantt 缩放到页面中的特定宽度?(例如 textwidth)

我正在尝试使用 pgfgantt 为一个跨越数周的项目创建甘特图,因此以下代码会溢出右边距。我找不到改变网格元素或时间段大小的方法:

\begin{tikzpicture}[x=.5cm, y=1cm]
\begin{ganttchart}%
[vgrid, hgrid]{50} % 50 weeks
\gantttitle{Title}{12} \\
\ganttbar{Task 1}{1}{4} \\
\ganttbar{Task 2}{5}{6} \\
\ganttmilestone{M 1}{6} \\
\ganttbar{Task 3}{7}{11}
\ganttlink{4}{2}{5}{3}
\ganttlink[b-m]{6}{3}{6}{4}
\ganttlink[m-b]{6}{4}{7}{5}
\end{ganttchart}
\end{tikzpicture}

这是我之前的问题,不过这里有一个新的角度......

如何通过限制 pgfgantt 的大小为特定参数来使其缩放所有内容?例如,我希望它跨越页面的整个文本宽度或除边距外的整个宽度。

答案1

使用命令,\resizebox{new width}{new height}{what you want to resize}您可以更改任何乳胶框的尺寸。这意味着所有内容(文本、线条、符号等)都将调整为新尺寸。在第一个或第二个参数中,您可以使用!以保持原始纵横比。使用此命令,

\documentclass{article}
\usepackage{lipsum}
\usepackage{pgfgantt}

\begin{document}
\lipsum[1]

\noindent\resizebox{\textwidth}{!}{
\begin{tikzpicture}[x=.5cm, y=1cm]
\begin{ganttchart}%
[vgrid, hgrid]{50} % 50 weeks
\gantttitle{Title}{12} \\    
\ganttbar{Task 1}{1}{4} \\    
\ganttbar{Task 2}{5}{6} \\    
\ganttmilestone{M 1}{6} \\    
\ganttbar{Task 3}{7}{11}
%\ganttlink{4}{2}{5}{3}
%\ganttlink[b-m]{6}{3}{6}{4}
%\ganttlink[m-b]{6}{4}{7}{5}
\end{ganttchart}
\end{tikzpicture}
}

\lipsum[2]
\end{document}

你的甘特图看起来会像这样:

在此处输入图片描述

更新:解决方案pgfgantt 4.0

正如甘特图标题中缺失的数字被视为零,的上一个版本pgfgantt不完全向后兼容。现在ganttchar需要两个强制参数

\begin{ganttchar}[options]{<start tss>}{<end tss>} 

因此,前面的例子应该是:

\documentclass{article}
\usepackage{lipsum}
\usepackage{pgfgantt}

\begin{document}
\lipsum[1]

\noindent\resizebox{\textwidth}{!}{
\begin{tikzpicture}[x=.5cm, y=1cm]
\begin{ganttchart}[vgrid, hgrid]{1}{50} % 50 weeks
\gantttitle{Title}{12} \\   
\ganttbar{Task 1}{1}{4} \\    
\ganttbar{Task 2}{5}{6} \\    
\ganttmilestone{M 1}{6} \\    
\ganttbar{Task 3}{7}{11}
%\ganttlink{4}{2}{5}{3}
%\ganttlink[b-m]{6}{3}{6}{4}
%\ganttlink[m-b]{6}{4}{7}{5}
\end{ganttchart}
\end{tikzpicture}
}

\lipsum[2]
\end{document}

答案2

[fr] 你可能在图形梯子上玩得很开心,但后面也添加了变换形状,但那太冒险了,而且非常漂亮

[zh] 你可以在图形的全局比例上玩,如果有结点,它也会添加,transform shape 但这可能不是很漂亮

\documentclass[A4]{article}
\usepackage{tikz}
\usepackage{lipsum}

\begin{document}


\noindent \begin{tikzpicture}[scale=\textwidth/8cm]
\draw (0,0) rectangle (8,3);
\end{tikzpicture}

\lipsum[1]

\noindent \begin{tikzpicture}[scale=\textwidth/8cm,transform shape]
\node [rectangle,minimum width=8cm,minimum height=3cm,draw]{aaa};
\end{tikzpicture}

\end{document}

在此处输入图片描述

答案3

对于最近关注这个问题的人来说,更高版本pgfgantt公开了该expand chart参数。您可以将该参数设置为适合您的任何值。例如:

  \begin{ganttchart}[
    expand chart=\textwidth,
    hgrid,
    vgrid,
    time slot format=isodate-yearmonth,
    time slot unit=month]{2021-10}{2023-5}
    \gantttitlecalendar{year, month} \\
    \ganttbar{the task}{2022-1}{2022-2}
  \end{ganttchart}

参见2.3 The Canvas文档

答案4

一个部分解决方案似乎是使用x unity unit缩小时间段的大小。这解决了我的第一个问题。

我将等待我的第二个问题的任何可能的答案。:)

相关内容