# Simple TikZ diagram - help needed with several issues

I would appreciate some help with several issues I'm experiencing with a diagram. I'm building this diagram in LaTeX/TikZ for my dissertation defense slides (Beamer); the diagram reproduces my original adapted version of the updated DeLone and McLean model of information systems success, which appearance I don't like and find the LaTeX quality much more pleasing to eyes.

Above is the original model diagram I'm trying to reproduce. Below is my current LaTeX/TikZ version.

Here's the corresponding LaTeX code that I came up with:

\documentclass[12pt]{beamer}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage{tikz}

\usepackage{palatino}
\usecolortheme{orchid}
\useinnertheme{rectangles}

\begin{document}

\begin{frame}{\small{IS Success: Updated DeLone \& McLean's (2003) Model*}}
\centering

\scalebox{0.8}{
\begin{tikzpicture}[node distance = 1cm] % , auto

% Styles (TODO/LoPri: switch from 'tikzstyle' to 'tikzset')
\tikzstyle{construct} = [rectangle,
ultra thick, rounded corners,
draw=blue, fill=blue!20, minimum height=1.25cm, minimum width=3.2cm, align=center, inner sep=0.5em]
\tikzstyle{smallconstruct} = [rectangle,
ultra thick, rounded corners,
draw=blue, fill=blue!20, minimum height=1.25cm, align=center, inner sep=0.5em]  \tikzstyle{arrow} = [ultra thick, ->, >=stealth]

% Nodes
\node[construct, anchor=mid] (InformationQuality) {Information\\Quality};
\node[construct, anchor=mid] (SystemQuality) [below =1cm of InformationQuality] {System\\Quality};
\node[construct, anchor=mid] (ServiceQuality) [below =1cm of SystemQuality] {Service\\Quality};

\node[construct, anchor=mid] (UserSatisfaction) [above right =-0.10cm and 1cm of ServiceQuality] {User Satisfaction};

\node[smallconstruct, anchor=north west] (IntentionToUse) [above =1cm of UserSatisfaction] {Intention to\\Use};
\node[smallconstruct, anchor=mid] (Use) [right =0cm of IntentionToUse] {Use};

\node[construct, anchor=mid] (NetBenefits) [right =6cm of SystemQuality] {Net Benefits};

% Arrows
\draw[arrow] (InformationQuality.east) -- (IntentionToUse.west);
\draw[arrow] (InformationQuality.east) -- (UserSatisfaction.west);
\draw[arrow] (SystemQuality.east) -- (IntentionToUse.west);
\draw[arrow] (SystemQuality.east) -- (UserSatisfaction.west);
\draw[arrow] (ServiceQuality.east) -- (IntentionToUse.west);
\draw[arrow] (ServiceQuality.east) -- (UserSatisfaction.west);

\draw[arrow] (UserSatisfaction) -- (IntentionToUse);
\draw[arrow] (Use.south) -- (UserSatisfaction);

\draw[arrow] (Use) -- (NetBenefits);
\draw[arrow] (UserSatisfaction) -- (NetBenefits);

\draw[arrow] (NetBenefits) |- (IntentionToUse);
\draw[arrow] (NetBenefits) |- (UserSatisfaction);

\end{tikzpicture}
} % end \scalebox

% old way
%\includegraphics[scale=0.98]{images/DeLoneMcLeanUpdatedModel}

\vfill
\flushleft \tiny *Adapted from “The DeLone and McLean model of information systems success: A ten-year update.”,\\ by DeLone and McLean, 2003, \emph{Journal of Management Information Systems, 19}(4), p. 24.\\ Copyright 2003 by M.E. Sharpe, Inc. Adapted with permission.
\end{frame}

\end{document}


I need help with / advice on the following issues (thank you in advance):

1. I'm not sure how to specify a complex (more than one turn) path for arrows from Net Benefits to Use (north, west, south) and User Satisfaction (south, west, north), correspondingly (I've tried things like '|-|', but TikZ didn't "like" it);

2. I'm not sure what directive/command could I use to force arrows, originating from first column's boxes, arrive to second column boxes' sides not to a single place (in other words, I want to spread the ending tips of those arrows along the left/west side of corresponding boxes);

3. What is the reason of a horizontal shift between Intention to Use/Use and User Satisfaction boxes and how to fix that? A bonus would be a more elegant, but simple, way to ensure the same width of those boxes - as you see, I hardcoded the value; I've tried some approaches, hence construct and smallconstruct styles I've created, but haven't succeeded so far.

• I just realized that I forgot to update code to land corresponding arrows onto the left/west side of the Net Benefits box, but it's not essential, as it's similar to the second column boxes, so I won't be making these trivial changes for now. – Aleksandr Blekh Mar 15 '15 at 11:17
• Can you please add a full minimal working example so that people can see what packages etc you need to get your code to work (but don't add code that is not needed). This makes it much easier for people to help you. It should take the form \documentclass{beamer}...\begin{document}...\end{document} and it should compile. – Andrew Mar 15 '15 at 11:43
• @Andrew: Absolutely. Sorry, I simply forgot about that part. – Aleksandr Blekh Mar 15 '15 at 11:45
• @Andrew: Updated. I use some of those packages on other Beamer slides. – Aleksandr Blekh Mar 15 '15 at 11:52

Well, this is a bit of a hack.

1. To make the width of User satisfaction and Intention to Use|Use the same I have used minimum width.
2. I have used xshift and yshift to adjust the placement of the arrows.
3. I have changed the anchor to east and west in many cases.
4. I have tweaked the spacing...
5. The horizontal shift that you refer to in #3 is almost certainly caused by the horizontal shift in the above right=.... Not sure why. To counteract this I have added another horizontal shift in the above right=... for the "intention" box. I found an appropriate shift by trial and error...

The code:

\documentclass[12pt]{beamer}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage{tikz}

\begin{document}

\begin{frame}{\small{IS Success: Updated DeLone \& McLean's (2003) Model*}}
\centering

\scalebox{0.8}{
\begin{tikzpicture}[node distance=1cm] % , auto

% Styles (TODO/LoPri: switch from 'tikzstyle' to 'tikzset')
\tikzstyle{construct}= [rectangle, ultra thick, rounded corners, draw=blue, fill=blue!20,
minimum height=1.25cm, minimum width=32mm, align=center, inner sep=0.5em]
\tikzstyle{smallconstruct}= [rectangle, ultra thick, rounded corners, draw=blue, fill=blue!20,
minimum height=1.25cm, align=center, inner sep=0.5em]
\tikzstyle{arrow}= [ultra thick, ->, >=stealth]

% Nodes
\node[construct, anchor=east] (InformationQuality) {Information\\Quality};
\node[construct, anchor=east] (SystemQuality) [below=1cm of InformationQuality] {System\\Quality};
\node[construct, anchor=east] (ServiceQuality) [below=1cm of SystemQuality] {Service\\Quality};

\node[construct, anchor=east,minimum width=42mm] (UserSatisfaction)
[above right=-3mm and 14mm of ServiceQuality] {User Satisfaction};

\node[smallconstruct, anchor=east] (IntentionToUse) [above right=1cm and -43mm of UserSatisfaction] {Intention to Use};
\node[smallconstruct, anchor=east] (Use) [right=-1mm of IntentionToUse] {Use};

\node[construct, anchor=mid] (NetBenefits) [right=66mm of SystemQuality] {Net Benefits};

% Arrows
\draw[arrow] ([yshift=1mm]InformationQuality.east) -- ([yshift=2mm]IntentionToUse.west);
\draw[arrow] ([yshift=-1mm]InformationQuality.east) -- ([yshift=2mm]UserSatisfaction.west);
\draw[arrow] ([yshift=1mm]SystemQuality.east) -- (IntentionToUse.west);
\draw[arrow] ([yshift=-1mm]SystemQuality.east) -- (UserSatisfaction.west);
\draw[arrow] ([yshift=1mm]ServiceQuality.east) -- ([yshift=-2mm]IntentionToUse.west);
\draw[arrow] ([yshift=-1mm]ServiceQuality.east) -- ([yshift=-2mm]UserSatisfaction.west);

\draw[arrow] ([xshift=-2.4mm]UserSatisfaction.north) -- ([xshift=3mm]IntentionToUse.south);
\draw[arrow] (Use.south) -- ([xshift=15.5mm]UserSatisfaction.north);

\draw[arrow] (Use.east) -- ([yshift=1mm]NetBenefits.west);
\draw[arrow] (UserSatisfaction.east) -- ([yshift=-1mm]NetBenefits.west);

\draw[arrow] (NetBenefits.north) -- ++(0,2.2) -| ([xshift=3mm]IntentionToUse.north);
\draw[arrow] (NetBenefits.south) -- ++(0,-2.2) -| ([xshift=-2.4mm]UserSatisfaction.south);

\end{tikzpicture}
}

\vfill
\flushleft \tiny *Adapted from “The DeLone and McLean model of information systems success: A ten-year update.”,\\ by DeLone and McLean, 2003, \emph{Journal of Management Information Systems, 19}(4), p. 24.\\ Copyright 2003 by M.E. Sharpe, Inc. Adapted with permission.
\end{frame}

\end{document}


The output:

• Excellent answer - much appreciated, especially your fast response! Certainly an upvote and very likely will accept it a bit later, as long as other people won't come up with some groundbreaking alternatives :-). As for being a hack, please don't worry about it - I still have quite a number of slides to create, not to mention preparing to the defense itself, so, while it's nice to learn LaTeX, I don't care about internal elegance at certain places. Again, thank you so much, Andrew, for your time and effort! – Aleksandr Blekh Mar 15 '15 at 13:03
• Sorry to bother again. Two quick questions: 1) could you point to a tutorial or TikZ documentation's section that describes the syntax like ... ++(0,2.2) -| ([xshift=4mm] ...); 2) how could I make an arrow from Use to User Satisfaction go straight down? – Aleksandr Blekh Mar 15 '15 at 13:20
• @AleksandrBlekh I have updated the answer to do this. For the documentation try texdoc tikz. The ++(0,2) notation just means add (0,2) to the last coordinate -- that is, go straight up. The [xshift=?] is an optional argument to the node specification that shifts the correspondng coordinate by this amount. – Andrew Mar 15 '15 at 13:33
• Got it! Andrew, I greatly appreciate your help - detailed & very fast. This is an awesome community. – Aleksandr Blekh Mar 15 '15 at 13:38