Instead of using a width of 0pt
, use a reasonable value like 5/6pt
. And give a suitable value for the number of lines the picture will span ([4]
here)
\documentclass{article}
\usepackage{lipsum}
\usepackage{wrapfig}
\usepackage{tikz}
\begin{document}
\lipsum[1]
\begin{wrapfigure}[4]{r}{7pt}%
\vspace*{-4mm}% This works now
\begin{tikzpicture}%
[every node/.style={inner sep=0,outer sep=0}]%There are no nodes, so doesn't do anything
\foreach \z in {0,6,...,36}%
\shade[ball color=blue] (0,\z pt) circle (3pt);%
\end{tikzpicture}%
\end{wrapfigure}
\lipsum[2]
Nam dui ligula, fringilla a, euismod sodales, sollicitudin vel, wisi.
\begin{wrapfigure}[4]{r}{7pt}%
\vspace*{-4mm}% This works now
\begin{tikzpicture}%
[every node/.style={inner sep=0,outer sep=0}]%There are no nodes, so doesn't do anything
\foreach \z in {0,6,...,36}%
\shade[ball color=blue] (0,\z pt) circle (3pt);%
\end{tikzpicture}%
\end{wrapfigure}
Morbi
auctor lorem non justo. Nam lacus libero, pretium at, lobortis vitae, ultricies
et, tellus. Donec aliquet, tortor sed accumsan bibendum, erat ligula aliquet
magna, vitae ornare odio metus a mi. Morbi ac orci et nisl hendrerit mollis.
Suspendisse ut massa. Cras nec ante. Pellentesque a nulla. Cum sociis
natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
Aliquam tincidunt urna. Nulla ullamcorper vestibulum turpis. Pellentesque
cursus luctus mauris.
\end{document}

You can put the picture in a box and use the width of that box like below:
\documentclass{article}
\usepackage{lipsum}
\usepackage{wrapfig}
\usepackage{tikz}
\newsavebox{\mypicture}
\sbox{\mypicture}{%
\begin{tikzpicture}%
[every node/.style={inner sep=0,outer sep=0}]%There are no nodes, so doesn't do anything
\foreach \z in {0,6,...,36}%
\shade[ball color=blue] (0,\z pt) circle (3pt);%
\end{tikzpicture}%
}
\begin{document}
\lipsum[1]
\begin{wrapfigure}[4]{r}{\wd\mypicture}%
\vspace*{-4mm}% This works now
\usebox{\mypicture}
\end{wrapfigure}
\lipsum[2]
Nam dui ligula, fringilla a, euismod sodales, sollicitudin vel, wisi.
\begin{wrapfigure}[4]{r}{\wd\mypicture}%
\vspace*{-4mm}% This works now
\usebox{\mypicture}
\end{wrapfigure}
Morbi
auctor lorem non justo. Nam lacus libero, pretium at, lobortis vitae, ultricies
et, tellus. Donec aliquet, tortor sed accumsan bibendum, erat ligula aliquet
magna, vitae ornare odio metus a mi. Morbi ac orci et nisl hendrerit mollis.
Suspendisse ut massa. Cras nec ante. Pellentesque a nulla. Cum sociis
natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
Aliquam tincidunt urna. Nulla ullamcorper vestibulum turpis. Pellentesque
cursus luctus mauris.
\end{document}
wrapfig
. You can verify this by replacing yourtikzpicture
with\rule{5mm}{2cm}
. Also, you can use\vspace
, you just have to add a star:\vspace*{-1cm}
. However, it's not quite a good solution.