减少 pgfgantt 中条形之间的垂直空间

减少 pgfgantt 中条形之间的垂直空间

是否可以减少 pgfgantt 中条之间的默认垂直空间?手册指定了“最后一行高度”,但似乎没有“行高”选项。

\documentclass[a4paper,11pt]{article}
\usepackage{pgfgantt}
\begin{document}
\section{}


\begin{tikzpicture}[x=3cm, y=0.75cm]  
\begin{ganttchart}[bar={fill=red!50}]{5}
\gantttitle{2012--2017}{5} \\
\gantttitlelist{1,...,5}{1} \\
\ganttbar{PhD1}{1}{3.5} \\
\ganttbar{PhD2}{2.5}{5} \\
\end{ganttchart}
\end{tikzpicture}
\end{document}

答案1

我刚刚将 pgfgantt v2.0 提交给 CTAN。除了其他几个新功能外,此版本还引入了三个键x unity unit titley unit chart。这些键应允许您在标题和图表的其余部分使用不同的行高。

答案2

我能做的最好的就是将 y 比例调整为y=0.50cm,并添加bar top shift=-0.1, bar height=0.6以使水平条达到原始高度。这也需要调整标题设置,所以我想一定有更好的方法,但希望这能有所帮助:

\documentclass[a4paper,11pt]{article}
\usepackage{pgfgantt}
\begin{document}
\section{}

\begin{tikzpicture}[y=0.75cm]  
\begin{ganttchart}[bar={fill=red!50},vgrid, hgrid]{5}
\gantttitle{2012--2017}{5} \\
\gantttitlelist{1,...,5}{1} \\
\ganttbar{PhD1}{1}{3.5} \\
\ganttbar{PhD2}{2.5}{5} \\
\end{ganttchart}
\end{tikzpicture}
%
\begin{tikzpicture}[y=0.50cm]  
\begin{ganttchart}[bar={fill=red!50},vgrid, hgrid,
    title height=.75, title top shift=0,
    title label anchor={below=-1.5ex},
    bar top shift=-0.1, bar height=0.6]{5}
\gantttitle{2012--2017}{5} \\
\gantttitlelist{1,...,5}{1} \\
\ganttbar{PhD1}{1}{3.5} \\
\ganttbar{PhD2}{2.5}{5} \\
\end{ganttchart}
\end{tikzpicture}
\end{document}

在此处输入图片描述

删除x=3cm只是为了能够显示前后情况。

答案3

在 2013/06/01 版的 v4.0 中,你可以使用类似以下命令:

\begin{ganttchart}[y unit chart=2cm]{0}{10}
\ganttbar{magic}{3}{8}\\
\ganttbar{magic2}{2}{8}\\
\end{ganttchart}

参见第 7 页官方文档

答案4

嗯,看起来似乎没有任何方法可以直接在包中执行此操作。不过,实现它相对容易。它确实需要修改包,老实说,我还没有测试过它对链接、分组、进度等的影响。尽管如果有问题,它们可以以类似的方式修复。首先,我们需要添加一个选项键来影响行距。在 sty 文件的开头,您将看到很多 keydef,我们在这里添加我们的。让我们将键称为行距。

\@gtt@keydef{linespacing}

然后我们将其添加到ganttset以确保其默认设置为 1。只需添加linespacing=1,到列表中即可。现在,对于实际的修改,我们转到命令ganttbar。这里我们有定义y@uppery@lower这些定义决定了条的尺寸。我们对其进行如下修改:

\def\y@upper{\@gtt@get{linespacing}*\value{gtt@currentline}%
+\value{gtt@lasttitleline}-\@gtt@get{linespacing}*\value{gtt@lasttitleline}%
-\@gtt@get{bar top shift}}%
\def\y@lower{\@gtt@get{linespacing}*\value{gtt@currentline}%
+\value{gtt@lasttitleline}-\@gtt@get{linespacing}*\value{gtt@lasttitleline}%
-\@gtt@get{bar top shift}-\@gtt@get{bar height}}%

我们所做的就是根据我们指定的因子缩放标题中没有的换行符linespacing

您应该注意,不建议以这种方式更改包,尤其是没有像我在这里所做的那样检查所有选项。但它可以为您提供一种快速获得所需内容的方法。您永远不应该修改原始包,复制一份,将其放在本地 tex 树中并进行修改,将其命名为 mypgfgantt.sty 并包含它。

现在,您可以按照如下方式创建行距较少的图片:

\documentclass[a4paper,11pt]{article}
\usepackage{mypgfgantt}
\begin{document}
 \begin{tikzpicture}
  \begin{ganttchart}[bar={fill=red!50}]{5}
   \gantttitle{2012--2017}{5} \\
   \gantttitlelist{1,...,5}{1} \\
   \ganttbar{PhD1}{1}{3.5} \\
   \ganttbar{PhD2}{2.5}{5} \\
  \end{ganttchart}
 \end{tikzpicture}
 %
 \begin{tikzpicture}
  \begin{ganttchart}[bar={fill=red!50},linespacing=0.5]{5}
   \gantttitle{2012--2017}{5} \\
   \gantttitlelist{1,...,5}{1} \\
   \ganttbar{PhD1}{1}{3.5} \\
   \ganttbar{PhD2}{2.5}{5} \\
  \end{ganttchart}
 \end{tikzpicture}
\end{document}

在此处输入图片描述

这是我第一次在这里发表帖子,希望它符合标准并且可以(某种程度上)解决你的问题。

相关内容