
Da ich hier keine Antworten auf meine Fragen bekommen habe:
So zeichnen Sie vertikale Linien mit dem Paket pgfgantt, ich habe beschlossen, meinen eigenen Befehl zu implementieren, den ich der pgfgantt.sty
Datei hinzugefügt habe (ich habe eine Kopie erstellt). Ich habe mir das angesehen pgfgantt.sty
und bin auf diesen Code gestoßen, der mit nur einem Problem funktioniert:
\newcommand\drawverticalline[1]{%
\begingroup%
\begin{pgfinterruptboundingbox}%
\begin{scope}
\newif\ifgtt@includetitle
\ganttset{%
include title in canvas/.is if=gtt@includetitle,%
include title in canvas
}
\gtt@tsstojulian{#1}{\gtt@today@slot}
\gtt@juliantotimeslot{\gtt@today@slot}{\gtt@today@slot}%
\ifgtt@includetitle%
\def\y@upper{0}%
\else%
\pgfmathsetmacro\y@upper{%
\gtt@lasttitleline * \ganttvalueof{y unit title}%
}%
\fi%
\pgfmathsetmacro\y@lower{%
\gtt@lasttitleline * \ganttvalueof{y unit title}%
+ (\gtt@currentline - \gtt@lasttitleline - 1)%
* \ganttvalueof{y unit chart}%
}%
\pgfmathsetmacro\x@mid{%
(\gtt@today@slot - 1 + \ganttvalueof{today offset})%
* \ganttvalueof{x unit}%
}%
\draw [/pgfgantt/today rule]
(\x@mid pt, \y@upper pt) -- (\x@mid pt, \y@lower pt)
node [/pgfgantt/today label node] {\ganttvalueof{today label}};%
\end{scope}
\end{pgfinterruptboundingbox}%
\endgroup%
}
Dies ist nur ein Beispiel, um zu zeigen, dass es funktioniert. Folgendes erhalte ich mit diesem Code:
\documentclass{article}
\usepackage[frenchb]{babel}
\usepackage{pgfgantt}
\usetikzlibrary{shadows}
\begin{document}
\begin{tikzpicture} % optional
\begin{ganttchart}[x unit=1.8mm,
y unit chart=0.87cm,
time slot format=isodate,
vgrid=*{5}{dotted},
]
{2014-04-14}{2014-07-11}
\gantttitlecalendar{month=name} \\
\ganttbar[progress=100]{title1}{2014-04-14}{2014-04-15} \\
\ganttbar[progress=100]{title2}{2014-04-15}{2014-04-17} \\
\drawverticalline{2014-05-07}
\end{ganttchart}
\end{tikzpicture}
\end{document}
Normalerweise sollte die Linie unterhalb der Titelleiste gezeichnet werden. Dieser Code definiert, wo wir mit dem Zeichnen beginnen:
\ifgtt@includetitle%
\def\y@upper{0}%
\else%
\pgfmathsetmacro\y@upper{%
\gtt@lasttitleline * \ganttvalueof{y unit title}%
}%
\fi%
Wie \ifgtt@includetitle
funktioniert es? Es ist wie folgt definiert:
\newif\ifgtt@includetitle
\ganttset{%
include title in canvas/.is if=gtt@includetitle,%
include title in canvas
}
Antwort1
\newif
(in LaTeX) wird wie folgt definiert. (Das Original in plain hat eine etwas andere Definition).
\def\newif#1{%
\count@\escapechar \escapechar\m@ne
\let#1\iffalse
\@if#1\iftrue
\@if#1\iffalse
\escapechar\count@}
\def\@if#1#2{%
\expandafter\def\csname\expandafter\@gobbletwo\string#1%
\expandafter\@gobbletwo\string#2\endcsname
{\let#1#2}}
Nimmt also \newif
einen Befehlsnamen (der nach Konvention immer mit beginnt if
) und definiert drei Befehle
\newif\iffoo
definiert
\iffoo
zu sein \iffalse
und definiert
\footrue
ein Befehl zu sein, der definiert \iffoo
zu sein \iftrue
und definiert
\foofalse
ein Befehl sein, der definiert, \iffoo
dass es ist \iffalse
.
\iftrue
und \iffalse
sind Grundelemente, die jeweils als wahr und falsch fungieren.
Wenn Sie also
\iffoo
some code here
\fi
Der Code wird ausgeführt oder nicht, je nachdem, ob Sie zuvor \footrue
die Bedeutung von \iffoo
in geändert haben \iftrue
.