diff --git a/Project.toml b/Project.toml
new file mode 100644
index 0000000000000000000000000000000000000000..90acdb4cdd0215a495950d7df8fccce021ca49b5
--- /dev/null
+++ b/Project.toml
@@ -0,0 +1,8 @@
+name = "JuliaTikz"
+uuid = "9c98e656-dfbc-11ea-2f36-4b421b45bbac"
+authors = ["Leif Andersson <leif.andersson@control.lth.se>"]
+version = "0.1.0"
+
+[deps]
+Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7"
+
diff --git a/src/JuliaTikz.jl b/src/JuliaTikz.jl
new file mode 100644
index 0000000000000000000000000000000000000000..e86cbd636ca063432d76e543f5ace3ac6b9f4cf6
--- /dev/null
+++ b/src/JuliaTikz.jl
@@ -0,0 +1,105 @@
+module JuliaTikzModule
+
+export printcsv, JuliaTikz;
+
+using ControlSystems  # ControlSystems v0.5.4
+using Plots
+using Printf
+
+
+function sprintdatarow(r)
+    join(map(n -> @sprintf("%#11.5G", n), r),';')
+end
+
+function sprintheader(r)
+    join(map(n -> @sprintf("%11s", n), r),';')
+end
+
+function printcsv(csv::String, data::Array{Any})
+    @warn """printcsv(csv::String, data::Array{Any}) is deprecated
+           Use  printcsv(data::Array{Any}, csv="") instead""";
+    printcsv(data,csv);
+end
+
+
+"""
+    printcsv(data::Array{Any}, csv="")
+
+Print the array `data` to a file suitable for inclusion in pgfplots.
+The columns of `data` should have a string as first element, and Float64
+as the remaining elements.
+
+The default name of the file will be `<name>.csv`, where `<name>` is the value
+of the global variable `name`, typically given by `JuliaTikz`. Another name may 
+be specified whith the second argument of `printcsv`.
+"""
+function printcsv(data::Array{Any}, csv="")
+    if cmp(csv,"") == 0
+        global name;
+        csv = name *".csv";
+    end;
+    open(csv, "w") do f
+        hh = Array{String}(data[1,:]);
+        dd = convert(Array{Float64,2},data[2:end,1:end]);
+        println(f, sprintheader(hh));
+        map(r->println(f,sprintdatarow(r)),eachrow(dd));
+    end
+end
+
+#@deprecate printcsv(csv::String, data::Array{Any})  printcsv(data::Array{Any}, csv="")
+
+"""
+    JuliaTikz(tikzfile,delete=true)
+
+Extract and run the Julia part of a combined tikz/Julia file.
+
+The boundary between the two is the string
+ 
+    \\endinput Julia <name>
+
+where `<name>` is the name that will be given to the Julia file 
+(with .jl appended), and also to a variable `name` in the program,
+i.e. name = "<name>".
+
+The Julia file will be extracted to a temporary directory, which will be 
+deleted  after the run unless the optional argument `delete` is false.
+"""
+function JuliaTikz(tikzfile,delete=true)
+    dir = mktempdir();
+    filespec = ""; out="";
+    if !delete
+        println("Opening " * tikzfile)
+    end;
+    open(tikzfile) do file
+        res = nothing;
+        while res === nothing
+            if eof(file)
+                error("\"\\endinput Julia \" not found");
+            end;
+            line = readline(file);
+            res = match(r"(\s*\\endinput\s+Julia\s+)([[:alnum:]]+)", line);
+        end;
+        
+        name = res.captures[2];
+        filespec = join([dir, name * ".jl"],"/");
+        out = open(filespec,"w");
+        if !delete
+            println("Writing " * filespec);
+        end;        
+        firstline = "name = \"" * name * "\"";
+        println(out,firstline);
+        while !eof(file)
+             println(out,readline(file));
+        end;
+        close(out);
+    end;
+    include(filespec);
+    
+    if delete
+        rm(dir,recursive=true);
+    else
+        return filespec;
+    end;
+end;
+
+end; # end module