diff options
Diffstat (limited to 'Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tutorial-map.tex')
-rw-r--r-- | Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tutorial-map.tex | 1301 |
1 files changed, 1301 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tutorial-map.tex b/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tutorial-map.tex new file mode 100644 index 00000000000..ec0ea535f38 --- /dev/null +++ b/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tutorial-map.tex @@ -0,0 +1,1301 @@ +% Copyright 2008 by Till Tantau +% +% This file may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU Free Documentation License. +% +% See the file doc/generic/pgf/licenses/LICENSE for more details. + + +\section{Tutorial: A Lecture Map for Johannes} + +In this tutorial we explore the tree and mind map mechanisms of +\tikzname. + +Johannes is quite excited: For the first time he will be teaching a +course all by himself during the upcoming semester! Unfortunately, the +course is not on his favorite subject, which is of course Theoretical Immunology, +but on Complexity Theory, but as a young academic Johannes is not +likely to complain too loudly. In order to help the students get a +general overview of what is going to happen during the course as a +whole, he intends to draw some kind of tree or graph containing the +basic concepts. He got this idea from his old professor who seems to +be using these ``lecture maps'' with some success. Independently of +the success of these maps, Johannes thinks they look quite neat. + + + +\subsection{Problem Statement} + +Johannes wishes to create a lecture map with the following features: +\begin{enumerate} +\item It should contain a tree or graph depicting the main concepts. +\item It should somehow visualize the different lectures that will be + taught. Note that the lectures are not necessarily the same as the + concepts since the graph may contain more concepts than will be + addressed in lectures and some concepts may be addressed during more + than one lecture. +\item The map should also contain a calendar showing when the + individual lectures will be given. +\item The aesthetical reasons, the whole map should have a visually + nice and information-rich background. +\end{enumerate} + +As always, Johannes will have to include the right libraries and +setup the environment. Since Johannes is going to use the +|mindmap| library and since he wishes to show a calendar, he will need +the |mindmap| and the |calendar| libraries. In order to put something +on a background layer, it seems like a good idea to also include the +|background| library. + + +\subsection{Introduction to Trees} + +The first choice Johannes must make is whether he will organize the +concepts are a tree, with root concepts and concept branches and leaf +concepts, or as a general graph. The tree implicitly organizes the +concepts, while a graph is more flexible. Johannes decides to +compromise: Basically, the concepts will be organized as a +tree. However, he will selectively add connections between concepts +that are related, but which appear on different levels or branches of +the tree. + +Johannes starts with a tree-like list of concepts that he feels are +important in Computational Complexity: + +\begin{itemize} +\item Computational Problems + \begin{itemize}\itemsep=0pt\parskip=0pt + \item Problem Measures + \item Problem Aspects + \item Problem Domains + \item Key Problems + \end{itemize} +\item Computational Models + \begin{itemize}\itemsep=0pt\parskip=0pt + \item Turing Machines + \item Random-Access Machines + \item Circuits + \item Binary Decision Diagrams + \item Oracle Machines + \item Programming in Logic + \end{itemize} +\item Measuring Complexity + \begin{itemize}\itemsep=0pt\parskip=0pt + \item Complexity Measures + \item Classifying Complexity + \item Comparing Complexity + \item Describing Complexity + \end{itemize} +\item Solving Problems + \begin{itemize}\itemsep=0pt\parskip=0pt + \item Exact Algorithms + \item Randomization + \item Fixed-Parameter Algorithms + \item Parallel Computation + \item Partial Solutions + \item Approximation + \end{itemize} +\end{itemize} + +Johannes will surely need to modify this list later on, but it looks +good as a first approximation. He will also need to add a number of +subtopics (like \emph{lots} of complexity classes under the topic +``classifying complexity''), but he will do this as he constructs the +map. + +Turning the list of topics into a \tikzname-tree is easy, in +principle. The basic idea is that a node can have \emph{children}, +which in turn can have children of their own, and so on. To add a +child to a node, Johannes can simply write |child {|\meta{node}|}| +right after a node. The \meta{node} should, in turn, be the code for +creating a node. To add another node, Johannes can use |child| once +more, and so on. Johannes is eager to try out this construct and +writes down the following: + +\begin{codeexample}[] +\tikz + \node {Computational Complexity} % root + child { node {Computational Problems} + child { node {Problem Measures} } + child { node {Problem Aspects} } + child { node {Problem Domains} } + child { node {Key Problems} } + } + child { node {Computational Models} + child { node {Turing Machines} } + child { node {Random-Access Machines} } + child { node {Circuits} } + child { node {Binary Decision Diagrams} } + child { node {Oracle Machines} } + child { node {Programming in Logic} } + } + child { node {Measuring Complexity} + child { node {Complexity Measures} } + child { node {Classifying Complexity} } + child { node {Comparing Complexity} } + child { node {Describing Complexity} } + } + child { node {Solving Problems} + child { node {Exact Algorithms} } + child { node {Randomization} } + child { node {Fixed-Parameter Algorithms} } + child { node {Parallel Computation} } + child { node {Partial Solutions} } + child { node {Approximation} } + }; +\end{codeexample} + +Well, that did not quite work out as expected (although, what, +exactly, did one expect?). There are two problems: +\begin{enumerate} +\item The overlap of the nodes is due to the fact that \tikzname\ is + not particularly smart when it comes to placing child nodes. Even + though it is possible to configure \tikzname\ to use rather clever + placement methods, \tikzname\ has no way of taking the actual size + of the child nodes into account. This may seem strange but the + reason is that the child nodes are rendered and placed one at a + time, so the size of the last node is not known when the first node + is being processed. In essence, you have to specify appropriate + level and sibling node spacings ``by hand.'' +\item The standard computer-science-top-down rendering of a tree is + rather ill-suited to visualizing the concepts. It would be better to + either rotate the map by ninety degrees or, even better, to use some + sort of circular arrangement. +\end{enumerate} + +Johannes redraws the tree, but this time with some more appropriate +options set, which he found more or less by trial-and-error: + +\begin{codeexample}[render instead={ +\tikz [font=\footnotesize, + grow=right, level 1/.style={sibling distance=6em}, + level 2/.style={sibling distance=1em}, level distance=5cm] + \node {Computational Complexity} % root + child { node {Computational Problems} + child { node {Problem Measures} } child { node {Problem Aspects} } + child { node {Problem Domains} } child { node {Key Problems} } + } + child { node {Computational Models} + child { node {Turing Machines} } child { node {Random-Access Machines} } + child { node {Circuits} } child { node {Binary Decision Diagrams} } + child { node {Oracle Machines} } child { node {Programming in Logic} } + } + child { node {Measuring Complexity} + child { node {Complexity Measures} } child { node {Classifying Complexity} } + child { node {Comparing Complexity} } child { node {Describing Complexity} } + } + child { node {Solving Problems} + child { node {Exact Algorithms} } child { node {Randomization} } + child { node {Fixed-Parameter Algorithms} } child { node {Parallel Computation} } + child { node {Partial Solutions} } child { node {Approximation} } + }; + }] +\tikz [font=\footnotesize, + grow=right, level 1/.style={sibling distance=6em}, + level 2/.style={sibling distance=1em}, level distance=5cm] + \node {Computational Complexity} % root + child { node {Computational Problems} + child { node {Problem Measures} } + child { node {Problem Aspects} } + ... % as before +\end{codeexample} + +Still not quite what Johannes had in mind, but he is getting +somewhere. + +For configuring the tree, two parameters are of particular importance: +The |level distance| tells \tikzname\ the distance between (the +centers of) the nodes on adjacent levels or layers of a tree. The +|sibling distance| is, as the name suggests, the distance between (the +centers of) siblings of the tree. + +You can globally set these parameters for a tree by simply setting +them somewhere before the tree starts, but you will +typically wish them to be different for different levels of the +tree. In this case, you should set styles like |level 1| or +|level 2|. For the first level of the tree, the |level 1| style is +used, for the second level the |level 2| style, and so on. You can +also set the sibling and level distances only for certain nodes by +passing these options to the |child| command as options. (Note that +the options of a |node| command are local to the node and have no +effect on the children. Also note that it is possible to specify +options that do have an effect on the children. Finally note that +specifying options for children ``at the right place'' is an arcane +art and you should peruse Section~\ref{section-tree-options} on +a rainy Sunday afternoon, if you are really interested.) + +The |grow| key is used to configure the direction in which a tree +grows. You can change growth direction ``in the middle of a tree'' +simply by changing this key for a single child or a whole level. By +including the |tree| library you also get access to additional growth +strategies such as a ``circular'' growth: + + +\begin{codeexample}[render instead={ +\tikz [text width=2.7cm, align=flush center, + grow cyclic, + level 1/.style={level distance=2.5cm,sibling angle=90}, + level 2/.style={text width=2cm, font=\footnotesize, level distance=3cm,sibling angle=30}] + \node[font=\bfseries] {Computational Complexity} % root + child { node {Computational Problems} + child { node {Problem Measures} } child { node {Problem Aspects} } + child { node {Problem Domains} } child { node {Key Problems} } + } + child { node {Computational Models} + child { node {Turing Machines} } child { node {Random-Access Machines} } + child { node {Circuits} } child { node {Binary Decision Diagrams} } + child { node {Oracle Machines} } child { node {Programming in Logic} } + } + child { node {Measuring Complexity} + child { node {Complexity Measures} } child { node {Classifying Complexity} } + child { node {Comparing Complexity} } child { node {Describing Complexity} } + } + child { node {Solving Problems} + child { node {Exact Algorithms} } child { node {Randomization} } + child { node {Fixed-Parameter Algorithms} } child { node {Parallel Computation} } + child { node {Partial Solutions} } child { node {Approximation} } + }; + }] +\tikz [text width=2.7cm, align=flush center, + grow cyclic, + level 1/.style={level distance=2.5cm,sibling angle=90}, + level 2/.style={text width=2cm, font=\footnotesize, level distance=3cm,sibling angle=30}] + \node[font=\bfseries] {Computational Complexity} % root + child { node {Computational Problems} + child { node {Problem Measures} } + child { node {Problem Aspects} } + ... % as before +\end{codeexample} + + +Johannes is pleased to learn that he can access and manipulate the +nodes of tree like any normal node. In particular, he can name them +using the |name=| option or the |(|\meta{name}|)| notation and he can +use any available shape or style for the trees nodes. He can connect +trees later on using the normal |\draw (some node) -- (another node);| +syntax. In essence, the |child| command just computes an appropriate +position for a node and adds a line from the child to the parent +node. + + +\subsection{Creating the Lecture Map} + +Johannes now has a first possible layout for his lecture map. The next +step is to make it ``look nicer.'' For this, the |mindmap| library is +helpful since it makes a number of styles available that will make a +tree look like a nice ``mind map'' or ``concept map.'' + +The first step is to include the |mindmap| library, which Johannes +already did. Next, he must add one of the following options to a scope +that will contain the lecture map: |mindmap| or |large mindmap| or +|huge mindmap|. These options all have the same effect, except that +for a |large mindmap| the predefined font size and node sizes are +somewhat larger than for a standard |mindmap| and for a |huge mindmap| +they are even larger. So, a |large mindmap| does not necessarily need +to have a lot of concepts, but it will need a lot of paper. + +The second step is to add the |concept| option to every node that +will, indeed, be a concept of the mindmap. The idea is that some nodes +of a tree will be real concepts, while other nodes might just be +``simple children.'' Typically, this is not the case, so you might +consider saying |every node/.style=concept|. + +The third step is to setup the sibling \emph{angle} (rather than a +sibling distance) to specify the angle between sibling concepts. + +\begin{codeexample}[render instead={ +\tikz [mindmap, every node/.style=concept, concept color=black!20, + grow cyclic, + level 1/.append style={level distance=4.5cm,sibling angle=90}, + level 2/.append style={level distance=3cm,sibling angle=45}] + \node [root concept] {Computational Complexity} % root + child { node {\hbox to 2cm{Computational\hss} Problems} + child { node {Problem Measures} } + child { node {Problem Aspects} } + child { node {Problem Domains} } + child { node {Key Problems} } + } + child { node {\hbox to 2cm{Computational\hss} Models} + child { node {Turing Machines} } + child { node {Random-Access Machines} } + child { node {Circuits} } + child { node {Binary Decision Diagrams} } + child { node {Oracle Machines} } + child { node {\hbox to1.5cm{Programming\hss} in Logic} } + } + child { node {Measuring Complexity} + child { node {Complexity Measures} } + child { node {Classifying Complexity} } + child { node {Comparing Complexity} } + child { node {Describing Complexity} } + } + child { node {Solving Problems} + child { node {Exact Algorithms} } + child { node {\hbox to 1.5cm{Randomization\hss}} } + child { node {Fixed-Parameter Algorithms} } + child { node {Parallel Computation} } + child { node {Partial Solutions} } + child { node {\hbox to1.5cm{Approximation\hss}} } + };}] +\tikz [mindmap, every node/.style=concept, concept color=black!20, + grow cyclic, + level 1/.append style={level distance=4.5cm,sibling angle=90}, + level 2/.append style={level distance=3cm,sibling angle=45}] + \node [root concept] {Computational Complexity} % root + child { node {Computational Problems} + child { node {Problem Measures} } + child { node {Problem Aspects} } + ... % as before +\end{codeexample} + +When Johannes typesets the above map, \TeX\ (rightfully) starts +complaining about several overfull boxes and, indeed, words like +``Randomization'' stretch out beyond the circle of the concept. This +seems a bit mysterious at first sight: Why does \TeX\ not hyphenate +the word? The reason is that \TeX\ will never hyphenate the first word +of a paragraph because it starts looking for ``hyphenatable'' letters +only after a so-called glue. In order to have \TeX\ hyphenate these +single words, Johannes must use a bit of evil trickery: He inserts a +|\hskip0pt| before the word. This has no effect except for inserting +an (invisible) glue before the word and, thereby, allowing \TeX\ to +hyphenate the first word also. Since Johannes does not want to add +|\hskip0pt| inside each node, he uses the |execute at begin node| +option to make \tikzname\ insert this text with every node. + + +\begin{codeexample}[render instead={ +\begin{tikzpicture} + [mindmap, + every node/.style={concept, execute at begin node=\hskip0pt}, + concept color=black!20, + grow cyclic, + level 1/.append style={level distance=4.5cm,sibling angle=90}, + level 2/.append style={level distance=3cm,sibling angle=45}] + \clip (-1,2) rectangle ++ (-4,5); + \node [root concept] {Computational Complexity} % root + child { node {Computational Problems} + child { node {Problem Measures} } + child { node {Problem Aspects} } + child { node {Problem Domains} } + child { node {Key Problems} } + } + child { node {Computational Models} + child { node {Turing Machines} } + child { node {Random-Access Machines} } + child { node {Circuits} } + child { node {Binary Decision Diagrams} } + child { node {Oracle Machines} } + child { node {Programming in Logic} } + } + child { node {Measuring Complexity} + child { node {Complexity Measures} } + child { node {Classifying Complexity} } + child { node {Comparing Complexity} } + child { node {Describing Complexity} } + } + child { node {Solving Problems} + child { node {Exact Algorithms} } + child { node {Randomization} } + child { node {Fixed-Parameter Algorithms} } + child { node {Parallel Computation} } + child { node {Partial Solutions} } + child { node {Approximation} } + }; +\end{tikzpicture} +}] +\begin{tikzpicture} + [mindmap, + every node/.style={concept, execute at begin node=\hskip0pt}, + concept color=black!20, + grow cyclic, + level 1/.append style={level distance=4.5cm,sibling angle=90}, + level 2/.append style={level distance=3cm,sibling angle=45}] + \clip (-1,2) rectangle ++ (-4,5); + \node [root concept] {Computational Complexity} % root + child { node {Computational Problems} + child { node {Problem Measures} } + child { node {Problem Aspects} } + ... % as before +\end{tikzpicture} +\end{codeexample} + + +In the above example a clipping was used to show only part of the +lecture map, in order to save space. The same will be done in the +following examples, we return to the complete lecture map at the end of this +tutorial. + +Johannes is now eager to colorize the map. The idea is to use +different colors for different parts of the map. He can then, during +his lectures, talk about the ``green'' or the ``red'' topics. This +will make it easier for his students to locate the topic he is talking +about on the map. Since ``computational problems'' somehow sounds +``problematic,'' Johannes chooses red for them, while he picks green +for the ``solving problems.'' The topics ``measuring complexity'' and +``computational models'' get more neutral colors; Johannes picks +orange and blue. + +To set the colors, Johannes must use the |concept color| option, +rather than just, say, |node [fill=red]|. Setting just the fill color +to |red| would, indeed, make the node red, but it would \emph{just} +make the node red and not the bar connecting the concept to its parent +and also not its children. By comparison, the special |concept color| +option will not only set the color of the node and its children, but +it will also (magically) create appropriate shadings so that the color +of a parent concept smoothly changes to the color of a child concept. + +For the root concept Johannes decides to do something special: He sets +the concept color to black, sets the line width to a large value, and +sets the fill color to white. The effect of this is that the root +concept will encircled with a thick black line and the children are +connected to the central concept via bars. + +\begin{codeexample}[render instead={ +\begin{tikzpicture} + [mindmap, + every node/.style={concept, execute at begin node=\hskip0pt}, + root concept/.append style={ + concept color=black, + fill=white, line width=1ex, + text=black}, + text=white, + grow cyclic, + level 1/.append style={level distance=4.5cm,sibling angle=90}, + level 2/.append style={level distance=3cm,sibling angle=45}] + \clip (0,-1) rectangle ++(4,5); + \node [root concept] {Computational Complexity} % root + child [concept color=red] { node {Computational Problems} + child { node {Problem Measures} } + child { node {Problem Aspects} } + child { node {Problem Domains} } + child { node {Key Problems} } + } + child [concept color=blue] { node {Computational Models} + child { node {Turing Machines} } + child { node {Random-Access Machines} } + child { node {Circuits} } + child { node {Binary Decision Diagrams} } + child { node {Oracle Machines} } + child { node {Programming in Logic} } + } + child [concept color=orange] { node {Measuring Complexity} + child { node {Complexity Measures} } + child { node {Classifying Complexity} } + child { node {Comparing Complexity} } + child { node {Describing Complexity} } + } + child [concept color=green!50!black] { node {Solving Problems} + child { node {Exact Algorithms} } + child { node {Randomization} } + child { node {Fixed-Parameter Algorithms} } + child { node {Parallel Computation} } + child { node {Partial Solutions} } + child { node {Approximation} } + }; + \end{tikzpicture}}] +\begin{tikzpicture} + [mindmap, + every node/.style={concept, execute at begin node=\hskip0pt}, + root concept/.append style={ + concept color=black, fill=white, line width=1ex, text=black}, + text=white, + grow cyclic, + level 1/.append style={level distance=4.5cm,sibling angle=90}, + level 2/.append style={level distance=3cm,sibling angle=45}] + \clip (0,-1) rectangle ++(4,5); + \node [root concept] {Computational Complexity} % root + child [concept color=red] { node {Computational Problems} + child { node {Problem Measures} } + ... % as before + } + child [concept color=blue] { node {Computational Models} + child { node {Turing Machines} } + ... % as before + } + child [concept color=orange] { node {Measuring Complexity} + child { node {Complexity Measures} } + ... % as before + } + child [concept color=green!50!black] { node {Solving Problems} + child { node {Exact Algorithms} } + ... % as before + }; +\end{tikzpicture} +\end{codeexample} + +Johannes adds three finishing touches: First, he changes the font +of the main concepts to small caps. Second, he decides that some +concepts should be ``faded,'' namely those that are important in +principle and belong on the map, but which he will not talk about in +his lecture. To achieve this, Johannes defines four styles, one for +each of the four main branches. These styles (a) setup the +correct concept color for the whole branch and (b) define the |faded| +style appropriately for this branch. Third, he adds a +|circular drop shadow|, defined in the |shadows| library, to the +concepts, just to make things look a bit more fancy. + +\begin{codeexample}[render instead={ +\begin{tikzpicture}[mindmap] + \begin{scope}[ + every node/.style={concept, circular drop shadow,execute at begin node=\hskip0pt}, + root concept/.append style={ + concept color=black, + fill=white, line width=1ex, + text=black, font=\large\scshape}, + text=white, + computational problems/.style={concept color=red,faded/.style={concept color=red!50}}, + computational models/.style={concept color=blue,faded/.style={concept color=blue!50}}, + measuring complexity/.style={concept color=orange,faded/.style={concept color=orange!50}}, + solving problems/.style={concept color=green!50!black,faded/.style={concept color=green!50!black!50}}, + grow cyclic, + level 1/.append style={level distance=4.5cm,sibling angle=90,font=\scshape}, + level 2/.append style={level distance=3cm,sibling angle=45,font=\scriptsize}] + \node [root concept] {Computational Complexity} % root + child [computational problems] { node {Computational Problems} + child { node {Problem Measures} } + child { node {Problem Aspects} } + child [faded] { node {Problem Domains} } + child { node {Key Problems} } + } + child [computational models] { node {Computational Models} + child { node {Turing Machines} } + child [faded] { node {Random-Access Machines} } + child { node {Circuits} } + child [faded] { node {Binary Decision Diagrams} } + child { node {Oracle Machines} } + child { node {Programming in Logic} } + } + child [measuring complexity] { node {Measuring Complexity} + child { node {Complexity Measures} } + child { node {Classifying Complexity} } + child { node {Comparing Complexity} } + child [faded] { node {Describing Complexity} } + } + child [solving problems] { node {Solving Problems} + child { node {Exact Algorithms} } + child { node {Randomization} } + child { node {Fixed-Parameter Algorithms} } + child { node {Parallel Computation} } + child { node {Partial Solutions} } + child { node {Approximation} } + }; + \end{scope} +\end{tikzpicture}}] +\begin{tikzpicture}[mindmap] + \begin{scope}[ + every node/.style={concept, circular drop shadow,execute at begin node=\hskip0pt}, + root concept/.append style={ + concept color=black, fill=white, line width=1ex, text=black, font=\large\scshape}, + text=white, + computational problems/.style={concept color=red,faded/.style={concept color=red!50}}, + computational models/.style={concept color=blue,faded/.style={concept color=blue!50}}, + measuring complexity/.style={concept color=orange,faded/.style={concept color=orange!50}}, + solving problems/.style={concept color=green!50!black,faded/.style={concept color=green!50!black!50}}, + grow cyclic, + level 1/.append style={level distance=4.5cm,sibling angle=90,font=\scshape}, + level 2/.append style={level distance=3cm,sibling angle=45,font=\scriptsize}] + \node [root concept] {Computational Complexity} % root + child [computational problems] { node {Computational Problems} + child { node {Problem Measures} } + child { node {Problem Aspects} } + child [faded] { node {Problem Domains} } + child { node {Key Problems} } + } + child [computational models] { node {Computational Models} + child { node {Turing Machines} } + child [faded] { node {Random-Access Machines} } + ... + \end{scope} +\end{tikzpicture} +\end{codeexample} + + +\subsection{Adding the Lecture Annotations} + +Johannes will give about a dozen lectures during the course +``computational complexity.'' For each lecture he has compiled a +(short) list of learning targets that state what knowledge and +qualifications his students should acquire during this particular +lecture (note that learning targets are not the same as the contents +of a lecture). For each lecture he intends to put a little rectangle +on the map containing these learning targets and the name of the +lecture, each time somewhere near to the topic of the lecture. Such +``little rectangles'' are called ``annotations'' by the mindmap +library. + +In order to place the annotations next to the concepts, Johannes must +assign names to the nodes of the concepts. He could rely on +\tikzname's automatic naming of the nodes in a tree, where the +children of a node named |root| are named |root-1|, |root-2|, +|root-3|, and so on. However, since Johannes is not sure about the +final order of the concepts in the tree, it seems better to explicitly +name all concepts of the tree in the following manner: + +\begin{codeexample}[code only] +\node [root concept] (Computational Complexity) {Computational Complexity} + child [computational problems] { node (Computational Problems) {Computational Problems} + child { node (Problem Measures) {Problem Measures} } + child { node (Problem Aspects) {Problem Aspects} } + child [faded] { node (Problem Domains) {Problem Domains} } + child { node (Key Problems) {Key Problems} } + } +... +\end{codeexample} + +The |annotation| style of the mind map library mainly sets up a +rectangular shape of appropriate size. Johannes configures the style +by defining |every annotation| appropriately. + +\begin{codeexample}[render instead={ +\begin{tikzpicture}[mindmap] + \clip (-5.25,-3) rectangle ++ (4,5); + \begin{scope}[ + every node/.style={concept, circular drop shadow,execute at begin node=\hskip0pt}, + root concept/.append style={ + concept color=black, + fill=white, line width=1ex, + text=black, font=\large\scshape}, + text=white, + computational problems/.style={concept color=red,faded/.style={concept color=red!50}}, + computational models/.style={concept color=blue,faded/.style={concept color=blue!50}}, + measuring complexity/.style={concept color=orange,faded/.style={concept color=orange!50}}, + solving problems/.style={concept color=green!50!black,faded/.style={concept color=green!50!black!50}}, + grow cyclic, + level 1/.append style={level distance=4.5cm,sibling angle=90,font=\scshape}, + level 2/.append style={level distance=3cm,sibling angle=45,font=\scriptsize}] + \node [root concept] (Computational Complexity) {Computational Complexity} % root + child [computational problems] { node (Computational Problems) {Computational Problems} + child { node (Problem Measures) {Problem Measures} } + child { node (Problem Aspects) {Problem Aspects} } + child [faded] { node (problem Domains) {Problem Domains} } + child { node (Key Problems) {Key Problems} } + } + child [computational models] { node (Computational Models) {Computational Models} + child { node (Turing Machines) {Turing Machines} } + child [faded] { node (Random-Access Machines) {Random-Access Machines} } + child { node (Circuits) {Circuits} } + child [faded] { node (Binary Decision Diagrams) {Binary Decision Diagrams} } + child { node (Oracle Machines) {Oracle Machines} } + child { node (Programming in Logic) {Programming in Logic} } + } + child [measuring complexity] { node (Measuring Complexity) {Measuring Complexity} + child { node (Complexity Measures) {Complexity Measures} } + child { node (Classifying Complexity) {Classifying Complexity} } + child { node (Comparing Complexity) {Comparing Complexity} } + child [faded] { node (Describing Complexity) {Describing Complexity} } + } + child [solving problems] { node (Solving Problems) {Solving Problems} + child { node (Exact Algorithms) {Exact Algorithms} } + child { node (Randomization) {Randomization} } + child { node (Fixed-Parameter Algorithms) {Fixed-Parameter Algorithms} } + child { node (Parallel Computation) {Parallel Computation} } + child { node (Partial Solutions) {Partial Solutions} } + child { node (Approximation) {Approximation} } + }; + \end{scope} + \begin{scope}[every annotation/.style={fill=black!40}] + \node [annotation, above] at (Computational Problems.north) { + Lecture 1: Computational Problems + \begin{itemize} + \item Knowledge of several key problems + \item Knowledge of problem encodings + \item Being able to formalize problems + \end{itemize} + }; + \end{scope} +\end{tikzpicture}}] +\begin{tikzpicture}[mindmap] + \clip (-5,-5) rectangle ++ (4,5); + \begin{scope}[ + every node/.style={concept, circular drop shadow, ...}] % as before + \node [root concept] (Computational Complexity) ... % as before + \end{scope} + + \begin{scope}[every annotation/.style={fill=black!40}] + \node [annotation, above] at (Computational Problems.north) { + Lecture 1: Computational Problems + \begin{itemize} + \item Knowledge of several key problems + \item Knowledge of problem encodings + \item Being able to formalize problems + \end{itemize} + }; + \end{scope} +\end{tikzpicture} +\end{codeexample} + +Well, that does not yet look quite perfect. The spacing or the +|{itemize}| is not really appropriate and the node is too +large. Johannes can configure these things ``by hand,'' but it seems +like a good idea to define a macro that will take care of these things +for him. The ``right'' way to do this is to define a |\lecture| macro +that takes a list of key-value pairs as argument and produces the +desired annotation. However, to keep things simple, Johannes' +|\lecture| macro simply takes a fixed number of arguments having the +following meaning: The first argument is the number of the lecture, +the second is the name of the lecture, the third are positioning +options like |above|, the fourth is the position where the node is +placed, the fifth is the list of items to be shown, and the sixth is a +date when the lecture will be held (this parameter is not yet needed, +we will, however, need it later on). + +\begin{codeexample}[code only] +\def\lecture#1#2#3#4#5#6{ + \node [annotation, #3, scale=0.65, text width=4cm, inner sep=2mm] at (#4) { + Lecture #1: \textcolor{orange}{\textbf{#2}} + \list{--}{\topsep=2pt\itemsep=0pt\parsep=0pt + \parskip=0pt\labelwidth=8pt\leftmargin=8pt + \itemindent=0pt\labelsep=2pt} + #5 + \endlist + }; +} +\end{codeexample} +\def\lecture#1#2#3#4#5#6{ + \node [annotation, #3, scale=0.65, text width=4cm, inner sep=2mm] at (#4) { + Lecture #1: \textcolor{orange}{\textbf{#2}} + \list{--}{\topsep=2pt\itemsep=0pt\parsep=0pt + \parskip=0pt\labelwidth=8pt\leftmargin=8pt + \itemindent=0pt\labelsep=2pt} + #5 + \endlist + }; +} + +\begin{codeexample}[render instead={ +\begin{tikzpicture}[mindmap,every annotation/.style={fill=white}] + \clip (-5.25,-3) rectangle ++ (4,5); + \begin{scope}[ + every node/.style={concept, circular drop shadow,execute at begin node=\hskip0pt}, + root concept/.append style={ + concept color=black, + fill=white, line width=1ex, + text=black, font=\large\scshape}, + text=white, + computational problems/.style={concept color=red,faded/.style={concept color=red!50}}, + computational models/.style={concept color=blue,faded/.style={concept color=blue!50}}, + measuring complexity/.style={concept color=orange,faded/.style={concept color=orange!50}}, + solving problems/.style={concept color=green!50!black,faded/.style={concept color=green!50!black!50}}, + grow cyclic, + level 1/.append style={level distance=4.5cm,sibling angle=90,font=\scshape}, + level 2/.append style={level distance=3cm,sibling angle=45,font=\scriptsize}] + \node [root concept] (Computational Complexity) {Computational Complexity} % root + child [computational problems] { node (Computational Problems) {Computational Problems} + child { node (Problem Measures) {Problem Measures} } + child { node (Problem Aspects) {Problem Aspects} } + child [faded] { node (problem Domains) {Problem Domains} } + child { node (Key Problems) {Key Problems} } + } + child [computational models] { node (Computational Models) {Computational Models} + child { node (Turing Machines) {Turing Machines} } + child [faded] { node (Random-Access Machines) {Random-Access Machines} } + child { node (Circuits) {Circuits} } + child [faded] { node (Binary Decision Diagrams) {Binary Decision Diagrams} } + child { node (Oracle Machines) {Oracle Machines} } + child { node (Programming in Logic) {Programming in Logic} } + } + child [measuring complexity] { node (Measuring Complexity) {Measuring Complexity} + child { node (Complexity Measures) {Complexity Measures} } + child { node (Classifying Complexity) {Classifying Complexity} } + child { node (Comparing Complexity) {Comparing Complexity} } + child [faded] { node (Describing Complexity) {Describing Complexity} } + } + child [solving problems] { node (Solving Problems) {Solving Problems} + child { node (Exact Algorithms) {Exact Algorithms} } + child { node (Randomization) {Randomization} } + child { node (Fixed-Parameter Algorithms) {Fixed-Parameter Algorithms} } + child { node (Parallel Computation) {Parallel Computation} } + child { node (Partial Solutions) {Partial Solutions} } + child { node (Approximation) {Approximation} } + }; + \end{scope} + \lecture{1}{Computational Problems}{above,xshift=-3mm}{Computational Problems.north}{ + \item Knowledge of several key problems + \item Knowledge of problem encodings + \item Being able to formalize problems + }{2009-04-08} +\end{tikzpicture}}] +\begin{tikzpicture}[mindmap,every annotation/.style={fill=white}] + \clip (-5,-5) rectangle ++ (4,5); + \begin{scope}[ + every node/.style={concept, circular drop shadow, ... % as before + \node [root concept] (Computational Complexity) ... % as before + \end{scope} + + \lecture{1}{Computational Problems}{above,xshift=-3mm} + {Computational Problems.north}{ + \item Knowledge of several key problems + \item Knowledge of problem encodings + \item Being able to formalize problems + }{2009-04-08} +\end{tikzpicture} +\end{codeexample} + +In the same fashion Johannes can now add the other lecture +annotations. Obviously, Johannes will have some trouble fitting +everything on a single A4-sized page, but by adjusting the spacing and +some experimentation he can quickly arrange all the annotations as needed. + + +\subsection{Adding the Background} + +Johannes has already used colors to organize his lecture map into four +regions, each having a different color. In order to emphasize these +regions even more strongly, he wishes to add a background coloring to +each of these regions. + +Adding these background colors turns out to be more tricky than +Johannes would have thought. At first sight, what he needs is some +sort of ``color wheel'' that is blue in the lower right direction and +then changes smoothly to orange in the upper right direction and then +to green in the upper left direction and so on. Unfortunately, there +is no easy way of creating a true such a color wheel shading (although +it can be done, in principle, but only at a very high cost, see +page~\pageref{shading-color-wheel} for an example). + +Johannes decides to do something a bit more basic: He creates four +large rectangles, one for each of the four quadrants around the +central concept, each colored with a light version of the +quadrant. Then, in order to ``smooth'' the change between adjacent +rectangles, he puts four shadings on top of them. + +Since these background rectangles should go ``behind'' everything +else, Johannes puts all his background stuff on the |background| +layer. + +In the following code, only the central concept is shown to save some +space: +\begin{codeexample}[] +\begin{tikzpicture}[ + mindmap, + concept color=black, + root concept/.append style={ + concept, + circular drop shadow, + fill=white, line width=1ex, + text=black, font=\large\scshape} + ] + + \clip (-1.5,-5) rectangle ++(4,10); + + \node [root concept] (Computational Complexity) {Computational Complexity}; + + \begin{pgfonlayer}{background} + \clip (-1.5,-5) rectangle ++(4,10); + + \colorlet{upperleft}{green!50!black!25} + \colorlet{upperright}{orange!25} + \colorlet{lowerleft}{red!25} + \colorlet{lowerright}{blue!25} + + % The large rectangles: + \fill [upperleft] (Computational Complexity) rectangle ++(-20,20); + \fill [upperright] (Computational Complexity) rectangle ++(20,20); + \fill [lowerleft] (Computational Complexity) rectangle ++(-20,-20); + \fill [lowerright] (Computational Complexity) rectangle ++(20,-20); + + % The shadings: + \shade [left color=upperleft,right color=upperright] + ([xshift=-1cm]Computational Complexity) rectangle ++(2,20); + \shade [left color=lowerleft,right color=lowerright] + ([xshift=-1cm]Computational Complexity) rectangle ++(2,-20); + \shade [top color=upperleft,bottom color=lowerleft] + ([yshift=-1cm]Computational Complexity) rectangle ++(-20,2); + \shade [top color=upperright,bottom color=lowerright] + ([yshift=-1cm]Computational Complexity) rectangle ++(20,2); + \end{pgfonlayer} +\end{tikzpicture} +\end{codeexample} + + + +\subsection{Adding the Calendar} + +Johannes intends to plan his lecture rather carefully. In particular, +he already knows when each of his lectures will be held during the +course. Naturally, this does not mean that Johannes will slavishly +follow the plan and he might need longer for some subjects than he +anticipated, but nevertheless he has a detailed plan of when which +subject will be addressed. + +Johannes intends to share this plan with his students by adding a +calendar to the lecture map. In addition to serving as a reference +on which particular day a certain topic will be addressed, the +calendar is also useful so show the overall chronological order of the +course. + +In order to add a calendar to a \tikzname\ graphic, the |calendar| +library is most useful. The library provides the |\calendar| command, +which takes a large number of options and which can be configured in +many ways to produce just about any kind of calendar imaginable. For +Johannes' purposes, a simple |day list downward| will be a nice option +since it produces a list of days that go ``downward''. + +\begin{codeexample}[leave comments] +\tiny +\begin{tikzpicture} + \calendar [day list downward, + name=cal, + dates=2009-04-01 to 2009-04-14] + if (weekend) + [black!25]; +\end{tikzpicture} +\end{codeexample} + +Using the |name| option, we gave a name to the calendar, which will +allow us to reference the nodes that make up the individual days of +the calendar later on. For instance, the rectangular node containing the +|1| that represents April 1st, 2009, can be referenced as +|(cal-2009-04-01)|. The |dates| option is used to specify an +interval for which the calendar should be drawn. Johannes will need +several months in his calendar, but the above example only shows two +weeks to save some space. + +Note the |if (weekend)| construct. The |\calendar| command is followed +by options and then by |if|-statements. These |if|-statements are +checked for each day of the calendar and when a date passes this test, +the options or the code following the |if|-statement is executed. In +the above example, we make weekend days (Saturdays and Sundays, to be +precise) lighter than normal days. (Use your favorite calendar to +check that, indeed, April 5th, 2009, is a Sunday.) + +As mentioned above, Johannes can reference the nodes that are used to +typeset days. Recall that his |\lecture| macro already got passed a +date, which we did not use, yet. We can now use it to place the +lecture's title next to the date when the lecture will be held: + + +\begin{codeexample}[code only] +\def\lecture#1#2#3#4#5#6{ + % As before: + \node [annotation, #3, scale=0.65, text width=4cm, inner sep=2mm] at (#4) { + Lecture #1: \textcolor{orange}{\textbf{#2}} + \list{--}{\topsep=2pt\itemsep=0pt\parsep=0pt + \parskip=0pt\labelwidth=8pt\leftmargin=8pt + \itemindent=0pt\labelsep=2pt} + #5 + \endlist + }; + % New: + \node [anchor=base west] at (cal-#6.base east) {\textcolor{orange}{\textbf{#2}}}; +} +\end{codeexample} +\def\lecture#1#2#3#4#5#6{ + \node [anchor=base west] at (cal-#6.base east) {\textcolor{orange}{\textbf{#2}}}; +} + +Johannes can now use this new |\lecture| command as follows (in the +example, only the new part of the definition is used): + +\begin{codeexample}[] +\tiny +\begin{tikzpicture} + \calendar [day list downward, + name=cal, + dates=2009-04-01 to 2009-04-14] + if (weekend) + [black!25]; + + % As before: + \lecture{1}{Computational Problems}{above,xshift=-3mm} + {Computational Problems.north}{ + \item Knowledge of several key problems + \item Knowledge of problem encodings + \item Being able to formalize problems + }{2009-04-08} +\end{tikzpicture} +\end{codeexample} + + +As a final step, Johannes needs to add a few more options to the +calendar command: He uses the |month text| option to configure how the +text of a month is rendered (see Section~\ref{section-calender} for +details) and then typesets the month text at a special position at the +beginning of each month. + +\begin{codeexample}[leave comments] +\tiny +\begin{tikzpicture} + \calendar [day list downward, + month text=\%mt\ \%y0, + month yshift=3.5em, + name=cal, + dates=2009-04-01 to 2009-05-01] + if (weekend) + [black!25] + if (day of month=1) { + \node at (0pt,1.5em) [anchor=base west] {\small\tikzmonthtext}; + }; + + \lecture{1}{Computational Problems}{above,xshift=-3mm} + {Computational Problems.north}{ + \item Knowledge of several key problems + \item Knowledge of problem encodings + \item Being able to formalize problems + }{2009-04-08} + + \lecture{2}{Computational Models}{above,xshift=-3mm} + {Computational Models.north}{ + \item Knowledge of Turing machines + \item Being able to compare the computational power of different + models + }{2009-04-15} +\end{tikzpicture} +\end{codeexample} + + + +\subsection{The Complete Code} + +Putting it all together, Johannes gets the following code: + +First comes the definition of the |\lecture| command: + +\begin{codeexample}[code only] +\def\lecture#1#2#3#4#5#6{ + % As before: + \node [annotation, #3, scale=0.65, text width=4cm, inner sep=2mm, fill=white] at (#4) { + Lecture #1: \textcolor{orange}{\textbf{#2}} + \list{--}{\topsep=2pt\itemsep=0pt\parsep=0pt + \parskip=0pt\labelwidth=8pt\leftmargin=8pt + \itemindent=0pt\labelsep=2pt} + #5 + \endlist + }; + % New: + \node [anchor=base west] at (cal-#6.base east) {\textcolor{orange}{\textbf{#2}}}; +} +\end{codeexample} + +This is followed by the main mindmap setup\dots + +\begin{codeexample}[code only] +\noindent +\begin{tikzpicture} + \begin{scope}[ + mindmap, + every node/.style={concept, circular drop shadow,execute at begin node=\hskip0pt}, + root concept/.append style={ + concept color=black, + fill=white, line width=1ex, + text=black, font=\large\scshape}, + text=white, + computational problems/.style={concept color=red,faded/.style={concept color=red!50}}, + computational models/.style={concept color=blue,faded/.style={concept color=blue!50}}, + measuring complexity/.style={concept color=orange,faded/.style={concept color=orange!50}}, + solving problems/.style={concept color=green!50!black,faded/.style={concept color=green!50!black!50}}, + grow cyclic, + level 1/.append style={level distance=4.5cm,sibling angle=90,font=\scshape}, + level 2/.append style={level distance=3cm,sibling angle=45,font=\scriptsize}] +\end{codeexample} +\dots and contents: +\begin{codeexample}[code only] + \node [root concept] (Computational Complexity) {Computational Complexity} % root + child [computational problems] { node [yshift=-1cm] (Computational Problems) {Computational Problems} + child { node (Problem Measures) {Problem Measures} } + child { node (Problem Aspects) {Problem Aspects} } + child [faded] { node (problem Domains) {Problem Domains} } + child { node (Key Problems) {Key Problems} } + } + child [computational models] { node [yshift=-1cm] (Computational Models) {Computational Models} + child { node (Turing Machines) {Turing Machines} } + child [faded] { node (Random-Access Machines) {Random-Access Machines} } + child { node (Circuits) {Circuits} } + child [faded] { node (Binary Decision Diagrams) {Binary Decision Diagrams} } + child { node (Oracle Machines) {Oracle Machines} } + child { node (Programming in Logic) {Programming in Logic} } + } + child [measuring complexity] { node [yshift=1cm] (Measuring Complexity) {Measuring Complexity} + child { node (Complexity Measures) {Complexity Measures} } + child { node (Classifying Complexity) {Classifying Complexity} } + child { node (Comparing Complexity) {Comparing Complexity} } + child [faded] { node (Describing Complexity) {Describing Complexity} } + } + child [solving problems] { node [yshift=1cm] (Solving Problems) {Solving Problems} + child { node (Exact Algorithms) {Exact Algorithms} } + child { node (Randomization) {Randomization} } + child { node (Fixed-Parameter Algorithms) {Fixed-Parameter Algorithms} } + child { node (Parallel Computation) {Parallel Computation} } + child { node (Partial Solutions) {Partial Solutions} } + child { node (Approximation) {Approximation} } + }; + \end{scope} +\end{codeexample} +Now comes the calendar code: +\begin{codeexample}[code only] + \tiny + \calendar [day list downward, + month text=\%mt\ \%y0, + month yshift=3.5em, + name=cal, + at={(-.5\textwidth-5mm,.5\textheight-1cm)}, + dates=2009-04-01 to 2009-06-last] + if (weekend) + [black!25] + if (day of month=1) { + \node at (0pt,1.5em) [anchor=base west] {\small\tikzmonthtext}; + }; +\end{codeexample} +The lecture annotations: +\begin{codeexample}[code only] + \lecture{1}{Computational Problems}{above,xshift=-5mm,yshift=5mm}{Computational Problems.north}{ + \item Knowledge of several key problems + \item Knowledge of problem encodings + \item Being able to formalize problems + }{2009-04-08} + + \lecture{2}{Computational Models}{above left} + {Computational Models.west}{ + \item Knowledge of Turing machines + \item Being able to compare the computational power of different + models + }{2009-04-15} +\end{codeexample} +Finally, the background: +\begin{codeexample}[code only] + \begin{pgfonlayer}{background} + \clip[xshift=-1cm] (-.5\textwidth,-.5\textheight) rectangle ++(\textwidth,\textheight); + + \colorlet{upperleft}{green!50!black!25} + \colorlet{upperright}{orange!25} + \colorlet{lowerleft}{red!25} + \colorlet{lowerright}{blue!25} + + % The large rectangles: + \fill [upperleft] (Computational Complexity) rectangle ++(-20,20); + \fill [upperright] (Computational Complexity) rectangle ++(20,20); + \fill [lowerleft] (Computational Complexity) rectangle ++(-20,-20); + \fill [lowerright] (Computational Complexity) rectangle ++(20,-20); + + % The shadings: + \shade [left color=upperleft,right color=upperright] + ([xshift=-1cm]Computational Complexity) rectangle ++(2,20); + \shade [left color=lowerleft,right color=lowerright] + ([xshift=-1cm]Computational Complexity) rectangle ++(2,-20); + \shade [top color=upperleft,bottom color=lowerleft] + ([yshift=-1cm]Computational Complexity) rectangle ++(-20,2); + \shade [top color=upperright,bottom color=lowerright] + ([yshift=-1cm]Computational Complexity) rectangle ++(20,2); + \end{pgfonlayer} +\end{tikzpicture} +\end{codeexample} + +The next page shows the resulting lecture map in all its glory (it +would be somewhat more glorious, if there were more lecture +annotations, but you should get the idea). + +\def\lecture#1#2#3#4#5#6{ + % As before: + \node [annotation, #3, scale=0.65, text width=4cm, inner sep=2mm, fill=white] at (#4) { + Lecture #1: \textcolor{orange}{\textbf{#2}} + \list{--}{\topsep=2pt\itemsep=0pt\parsep=0pt + \parskip=0pt\labelwidth=8pt\leftmargin=8pt + \itemindent=0pt\labelsep=2pt} + #5 + \endlist + }; + % New: + \node [anchor=base west] at (cal-#6.base east) {\textcolor{orange}{\textbf{#2}}}; +} + +\noindent +\begin{tikzpicture} + \begin{scope}[ + mindmap, + every node/.style={concept, circular drop shadow,execute at begin node=\hskip0pt}, + root concept/.append style={ + concept color=black, + fill=white, line width=1ex, + text=black, font=\large\scshape}, + text=white, + computational problems/.style={concept color=red,faded/.style={concept color=red!50}}, + computational models/.style={concept color=blue,faded/.style={concept color=blue!50}}, + measuring complexity/.style={concept color=orange,faded/.style={concept color=orange!50}}, + solving problems/.style={concept color=green!50!black,faded/.style={concept color=green!50!black!50}}, + grow cyclic, + level 1/.append style={level distance=4.5cm,sibling angle=90,font=\scshape}, + level 2/.append style={level distance=3cm,sibling angle=45,font=\scriptsize}] + \node [root concept] (Computational Complexity) {Computational Complexity} % root + child [computational problems] { node [yshift=-1cm] (Computational Problems) {Computational Problems} + child { node (Problem Measures) {Problem Measures} } + child { node (Problem Aspects) {Problem Aspects} } + child [faded] { node (problem Domains) {Problem Domains} } + child { node (Key Problems) {Key Problems} } + } + child [computational models] { node [yshift=-1cm] (Computational Models) {Computational Models} + child { node (Turing Machines) {Turing Machines} } + child [faded] { node (Random-Access Machines) {Random-Access Machines} } + child { node (Circuits) {Circuits} } + child [faded] { node (Binary Decision Diagrams) {Binary Decision Diagrams} } + child { node (Oracle Machines) {Oracle Machines} } + child { node (Programming in Logic) {Programming in Logic} } + } + child [measuring complexity] { node [yshift=1cm] (Measuring Complexity) {Measuring Complexity} + child { node (Complexity Measures) {Complexity Measures} } + child { node (Classifying Complexity) {Classifying Complexity} } + child { node (Comparing Complexity) {Comparing Complexity} } + child [faded] { node (Describing Complexity) {Describing Complexity} } + } + child [solving problems] { node [yshift=1cm] (Solving Problems) {Solving Problems} + child { node (Exact Algorithms) {Exact Algorithms} } + child { node (Randomization) {Randomization} } + child { node (Fixed-Parameter Algorithms) {Fixed-Parameter Algorithms} } + child { node (Parallel Computation) {Parallel Computation} } + child { node (Partial Solutions) {Partial Solutions} } + child { node (Approximation) {Approximation} } + }; + \end{scope} + + \tiny + \calendar [day list downward, + month text=\%mt\ \%y0, + month yshift=3.5em, + name=cal, + at={(-.5\textwidth-5mm,.5\textheight-1cm)}, + dates=2009-04-01 to 2009-06-last] + if (weekend) + [black!25] + if (day of month=1) { + \node at (0pt,1.5em) [anchor=base west] {\small\tikzmonthtext}; + }; + + \lecture{1}{Computational Problems}{above,xshift=-5mm,yshift=5mm}{Computational Problems.north}{ + \item Knowledge of several key problems + \item Knowledge of problem encodings + \item Being able to formalize problems + }{2009-04-08} + + \lecture{2}{Computational Models}{above left} + {Computational Models.west}{ + \item Knowledge of Turing machines + \item Being able to compare the computational power of different + models + }{2009-04-15} + + \begin{pgfonlayer}{background} + \clip[xshift=-1cm] (-.5\textwidth,-.5\textheight) rectangle ++(\textwidth,\textheight); + + \colorlet{upperleft}{green!50!black!25} + \colorlet{upperright}{orange!25} + \colorlet{lowerleft}{red!25} + \colorlet{lowerright}{blue!25} + + % The large rectangles: + \fill [upperleft] (Computational Complexity) rectangle ++(-20,20); + \fill [upperright] (Computational Complexity) rectangle ++(20,20); + \fill [lowerleft] (Computational Complexity) rectangle ++(-20,-20); + \fill [lowerright] (Computational Complexity) rectangle ++(20,-20); + + % The shadings: + \shade [left color=upperleft,right color=upperright] + ([xshift=-1cm]Computational Complexity) rectangle ++(2,20); + \shade [left color=lowerleft,right color=lowerright] + ([xshift=-1cm]Computational Complexity) rectangle ++(2,-20); + \shade [top color=upperleft,bottom color=lowerleft] + ([yshift=-1cm]Computational Complexity) rectangle ++(-20,2); + \shade [top color=upperright,bottom color=lowerright] + ([yshift=-1cm]Computational Complexity) rectangle ++(20,2); + \end{pgfonlayer} +\end{tikzpicture} |