I'm wondering whether is possible to draw a Moebius Strip using TikZ. The closest thing I've seen is in Texamples' page, but no luck so far!

Do you have any ideas? I don't even have a MWE (sorry)

  • I suggest you to use inkscape to draw it.
    – Sigur
    Commented Jun 10, 2013 at 23:25

5 Answers 5


With PGFPlots:




    hide axis,
\addplot3 [
    surf, shader=faceted interp,
    point meta=x,
    samples y=5,
    z buffer=sort,
    y domain=-0.5:0.5
] (

\addplot3 [
    domain=-145:180, % The domain needs to be adjusted manually, depending on the camera angle, unfortunately
    samples y=0,
] (

  • Thank you for the marvellous answer! Is it possible to superpose the Moebius strip with the middle circle?, I'd like to highlight that the Moebius strip is based on a circle! :-P Thank you very much.
    – Dox
    Commented Jun 11, 2013 at 13:20
  • @Dox: Yes, you can add a second plot for that. Unfortunately, PGFPlots can't do the z buffering for separate plots, so you'll have to set the domain for the circle manually to make sure the hidden parts aren't drawn.
    – Jake
    Commented Jun 11, 2013 at 13:47
  • Magnificent! I tried, but got a much less nice than your. Cheers.
    – Dox
    Commented Jun 11, 2013 at 14:00
  • @Jake: Why I get a triangular mesh instead of a rectangular mesh as you when I run this code (with pdflatex)? It's all about pgfplots package update or another trick?
    – rafaeldf
    Commented Jun 13, 2013 at 16:30
  • @rafaeldf: That could be a viewer issue with the interpolated shading. Does using shader=faceted instead of shade=faceted interp help?
    – Jake
    Commented Jun 13, 2013 at 16:49

As a quotient space:



  mark=at position 0.5 with {\arrow{>}}}
\draw[postaction=decorate] (0,0) -- (2,0);
\draw (2,0) -- (2,-2);
\draw[postaction=decorate] (2,-2) -- (0,-2);
\draw (0,0) -- (0,-2);


enter image description here

And now, taken from MoebiusStrip.tex:

% Title: Moebius Strip
% Tags: Clipping, Node positioning, Shadings, Macros
% Authors: Jacques Duma & Gerard Tisseau
% Site: http://math.et.info.free.fr/TikZ/index.html



:Title: Moebius Strip
:Tags: Clipping, Node positioning, Shadings, Macros
:Authors: Jacques Duma & Gerard Tisseau
:Site: http://math.et.info.free.fr/TikZ/index.html

To build this Moebius Strip, take a normal strip of paper, write "TikZ for LaTeX" on one side, give it 3 half-twists and join the ends.

The resulting strip has only one face and one boundary.

% one third of the Moebius Strip
%: \strip{<angle>}
\shadedraw[very thick,top color=white,bottom color=gray,rotate=#1]
 (0:2.8453) ++ (-30:1.5359) arc (60:0:2)
 -- ++  (90:5) arc (0:60:2) -- ++ (150:3) arc (60:120:2) 
 -- ++ (210:5) arc (120:60:2) -- cycle;}

%: \MoebiusStrip{<text1>}{<text2>}{<text3>}
\begin{scope} [transform shape]
    \draw (-60:3.5) node[scale=6,rotate=30] {#1};
    \draw (180:3.5) node[scale=4,rotate=-90]{#3};
    % redraw the first strip after clipping
    \clip (-1.4,2.4)--(-.3,6.1)--(1.3,6.1)--(5.3,3.7)--(5.3,-2.7)--cycle;
    \draw (60:3.5) node [gray,xscale=-4,yscale=4,rotate=30]{#2};



\begin{tikzpicture} [rotate=22]


enter image description here


enter image description here

As a parametric surface with the Asymptote:

import graph3;
real r=2, w=1;
real x(real u, real v){return (r+v/2*cos(3pi*u))*cos(2pi*u);};
real y(real u, real v){return (r+v/2*cos(3pi*u))*sin(2pi*u);};
real z(real u, real v){return (v/2*sin(3pi*u));};
triple f(pair p){return (x(p.x,p.y),y(p.x,p.y),z(p.x,p.y));};
\caption{M\"obius strip.}

With PSTricks. Stolen from Herbert's answer.


\def\Radius{5 }
   t 2 div cos u mul \Radius add t cos mul
   t 2 div cos u mul \Radius add t sin mul
   t 2 div sin u mul }
   t 2 div cos \Radius add t cos mul
   t 2 div cos \Radius add t sin mul
   t 2 div sin }


enter image description here

  • Gorgeous. But what does mean "mul" ? I get this error message : Undefined control sequence. \c@lor@to@ps ->\PSTricks _Not_Configured_For_This_Format l.11 t 2 div sin u mul } The control sequence at the end of the top line of your error message was never \def'ed. Commented Sep 3, 2023 at 9:09

Another PsTricks solution, using pst-solide3d, adapted from a code from Manuel Luque:

    \documentclass[pdf,dvipsnames,svgnames, x11names]{standalone}

    \psset[pst-solides3d]{viewpoint=20 10 5, Decran=40, lightsrc=20 10 10}
    \psPoint(0,0,0){O}\uput[d](O){$ O $}
       {2 u v Cos mul add 2 v mul Cos mul}
       {2 u v Cos mul add 2 v mul Sin mul}
       {u v Sin mul}
       base=0.2 0.25 0 pi,linewidth=0.1,
       base=-0.25 -0.2 0 pi,linewidth=0.1,
       base=-0.25 0.25 0 pi,fillcolor=yellow!50,incolor=yellow!50,


enter image description here

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .