tikz做圖

若是你選擇了Latex,那也就意味着義無反顧的勇氣。做圖是科技寫做的重要部分,工科生最熟悉的做圖軟件一般是matlab,它的缺點是難以與Latex無縫融合,好比字體的統一就是個大問題。好在有能人意識到這個問題,而且作出了出色的轉化工具——matlab2tikz,能夠將matlab的圖轉化爲tex文件,而後在主文檔中直接\input便可。接下來的問題是:shell

1)若是圖不少,主文檔編譯很變得很慢;編程

2)可否將每一幅matlab的圖經過matlab2tikz轉化成一幅pdf格式的圖?這樣就能夠在主文檔以圖的形式包含便可。編程語言

沒有作不到,只有想不到的。tikz/pgf(pgfplots)能夠實現這一功能。到目前爲止,還沒發現有效的xeLatex編譯方法,pgfplots手冊都是以pdflatex編譯的。如下是一個完成的例子:工具

\documentclass[UTF8]{article}%UTF8必須大寫字體

\usepackage{CTEX}%大寫ui

\usepackage{tikz,pgfplots}lua

\usepgfplotslibrary{external}命令行

\tikzexternalize% activate externalization!code

\begin{document}內存

 

         \begin{figure}

                  \centering

                  \begin{tikzpicture}

                  \begin{axis}[

                  width=8cm,

                  height=4cm,

                  xlabel={時間座標},

                  ylabel={幅度座標},title={示例1}]

                  \addplot {x^2};

                  \end{axis}

                  \end{tikzpicture}

                  \caption{第一幅外部圖例子}%輸出的圖像文件不包含caption

         \end{figure}

         \begin{figure}

                  \centering

                  \begin{tikzpicture}

                  \begin{axis}[

                  width=8cm,

                  height=4cm,

                  xlabel={時間座標},

                  ylabel={幅度座標},title={示例2}]

                  \addplot {x^3};

                  \end{axis}

                  \end{tikzpicture}

                  \caption{第二幅圖}

         \end{figure}

\end{document}

且將命令行改成pdflatex -synctex=1 -interaction=nonstopmode --shell-escape %.tex。編譯以後,除了能夠生成主文檔對應的pdf文件,還會生成每幅圖對應的pdf文件,自動去除白邊哦。

  pdfLatex的內存分配不如luaLatex靈活,所以,當圖像數據量較大時,建議選用luaLatex編譯方法。一個完整的例子(Logistic分岔圖):

\ifx\directlua\@undefined
\else
\RequirePackage{luatex85}
\RequirePackage{shellesc}
\fi

\documentclass[tikz]{article}
\usepackage{luatexja-fontspec}
\setmainjfont{FandolSong}
\usepackage{luacode}
\usepackage{filecontents}
\usepackage{pgfplots}
\usepgfplotslibrary{external}
\tikzexternalize

\begin{luacode*}
  function logistic()

    local function map(r,x)
      return r*x*(1-x)
    end

    for r = 2.5,4,0.005 do
      x = 0.1
      for i = 1, 200 do
        x = map(r,x)
      end
      for i = 1, 200 do
        x = map(r,x)
        tex.sprint("("..r..","..x..")")
      end
    end
  end
\end{luacode*}

\begin{document}
\begin{figure}
\begin{tikzpicture}
  \begin{axis}[xlabel={參數$\mu$},ylabel={幅度}]
  \edef\logisticplot{\noexpand\addplot [color=black!10, mesh, only marks,
  mark size = 0.05pt, opacity = 0.1] coordinates{ \directlua{logistic()} };}
  \logisticplot
  \end{axis}
\end{tikzpicture}
\end{figure}
\end{document}

命令行設置:lualatex.exe -synctex=1 -interaction=nonstopmode -shell-escape %.tex。

luaLatex另外一亮點是支持編程語言。

相關文章
相關標籤/搜索