如何使用 TikZ 创建老式科学图表?

如何使用 TikZ 创建老式科学图表?

我想重现 1996 年论文中的以下科学图表。 老式的科学图表

我的问题:

(a)作者是如何创建这样的图形的?他可能使用了什么软件?

(b)是否可以使用 来实现TikZ?如果可以,一般的程序是什么?

我很感激你的帮助。

答案1

至少它有效……

\documentclass[border=5pt,tikz]{standalone}
\usetikzlibrary{arrows,backgrounds,shapes.arrows,positioning}
\tikzset{arrownode/.style={
        transform shape nonlinear=true,
        shape=double arrow,
        shape border rotate=180,
        draw
    }
}
\begin{document}
    \begin{tikzpicture}[>=latex,every node/.style={font=\footnotesize}]
        \draw[->] (-1.5,0) -- (1.5,0) node[above] {$x$};
        \draw[->] (0,-1.5) -- (0,1.7) node[right] {$y$};
            \draw[xshift=.5cm,yshift=1cm] (0,0) rectangle (2,2);
                \draw[xshift=.5cm,yshift=1cm,white] (0,0) -- (0,2);
                \draw[xshift=.5cm,yshift=1cm,white] (0,0) -- (2,0);
                    \draw[xshift=.5cm,yshift=1cm,thick] (0,2) -- (2,2);
            \draw[fill=white,xshift=.5cm,yshift=1cm] (0,2) -- ([xshift=-.05cm,yshift=-.1cm]0,2) -- (1,1.8) -- ([xshift=-.05cm,yshift=-.1cm]2,2) -- (2,2);
            \draw[xshift=.5cm,yshift=1cm] ([xshift=-.05cm,yshift=-.1cm]2,2) -- ([xshift=-.15cm]2,1) -- ([xshift=-.05cm,yshift=-.1cm]2,0) -- (2,0);
            \draw[fill=white,xshift=.5cm,yshift=1cm] ([xshift=-.05cm,yshift=-.1cm]2,0) -- ([yshift=-.2cm]1,0) -- (0,0) -- ([xshift=-.2cm]0,1) -- ([xshift=-.05cm,yshift=-.1cm]0,2);
            \draw[fill=white,xshift=.5cm,yshift=1cm] ([xshift=-.2cm]0,1) -- ([yshift=-.2cm].9,1) -- ([xshift=-.15cm]2,1);
            \draw[xshift=.5cm,yshift=1cm] (1,1.8) -- ([yshift=-.2cm].9,1) -- ([yshift=-.2cm]1,0);
            \draw[xshift=.5cm,yshift=1cm,fill=white] ([xshift=-.05cm,yshift=-.1cm]2,0) -- ([xshift=-.15cm]2,1) -- ([yshift=-.2cm].9,1) -- (1,-.2) -- cycle;
            \draw[xshift=.5cm,yshift=1cm,fill=white] ([xshift=-.05cm,yshift=-.1cm]0,2) -- ([xshift=-.2cm]0,1) -- ([yshift=-.2cm].9,1) -- (1,1.8) -- cycle;
                \draw[xshift=.5cm,yshift=1.2cm] plot [smooth cycle] coordinates {(.5,1)(.4,.5)(.8,.2)(1.2,.3)(1.5,.5)(1.4,.8)(1.2,1)(1,1.1)};
            \draw[xshift=.5cm,yshift=1cm,fill=white] (2,2) -- ([xshift=-.05cm,yshift=-.1cm]2,2) -- ([xshift=-.15cm]2,1) -- ([xshift=-.05cm,yshift=-.1cm]2,0) -- (2,0) -- cycle;
        \draw (-1.4,0) -- ([xshift=.5cm,yshift=1.2cm].5,1);
        \draw (0,-1) -- ([xshift=.5cm,yshift=1.2cm]1.2,.3);
        \draw[shorten <=-.6cm,shorten >=.23cm,dash pattern=on 5pt off 1pt on .5 off 1pt] (0,0) -- ([xshift=.55cm,yshift=1cm]1,1);
        \begin{scope}[xshift=1.9cm,yshift=2.5cm]
            \begin{pgfonlayer}{background}
                \draw[fill=white,radius=1.3cm] (.2,.2) circle;
                \draw[fill=white,radius=1.3cm] (0,0) circle;
                \coordinate (a) at (1.12,1.12);
            \end{pgfonlayer}
        \end{scope}
        \begin{scope}[shift={(3.5,3.5)}]
            \foreach \x in {1,2}
            \foreach \y in {1,2}
            {
                \draw[radius=.4cm] (\x,\y) circle;
            }
                \coordinate (b) at (.68,2.25);
                \coordinate (c) at ([xshift=1cm].68,2.25);
                \coordinate (d) at ([yshift=-1cm].68,2.25);
                \coordinate (e) at ([xshift=1cm,yshift=-1cm].68,2.25);
                    \coordinate (c1) at (1.35,1.8);
                    \coordinate (c2) at ([xshift=1cm]1.35,1.8);
                    \coordinate (c3) at ([yshift=-1cm]1.35,1.8);
                    \coordinate (c4) at ([xshift=1cm,yshift=-1cm]1.35,1.8);
            \draw (.5,.5) rectangle (2.5,2.5);
                \draw[dashed] (a) -- (1.5,1.5) node[pos=.34,above] {$b$};
                \draw[dashed] (c) -- ([xshift=-1.5cm,yshift=.25cm]a) -- (b);
                \draw[dashed] (d) -- ([xshift=-1.45cm,yshift=.29cm]a) -- (e);
                    \draw[dashed] (c1) -- ([xshift=.25cm,yshift=-1.5cm]a) -- (c2);
                    \draw[dashed] (c3) -- ([xshift=.25cm,yshift=-1.5cm]a) -- (c4);
            \node at (2.7,.3)  {\tiny Detector};
            \node at (0,2.7) {\tiny Pupils (abcd)};
                \draw[->] (1.5,2) -- (3,2) node[above] {$s$};
                \draw[->] (2,1.5) -- (2,3) node[right] {$t$};
                    \node at (.2,2.2) {$a$};
                    \node at (2.7,1) {$d$};
                    \node at (2.7,1.7) {$c$};
        \end{scope}
        \node[text width=1.7cm,left] at (-.5,1.3) {\tiny Large $F$/focus of the telescope};
        \node[text width=3cm] (n) at (4.5,0) {\tiny Blurred image of a reference source};
            \draw[->] (n) to[in=-20,out=170] ([xshift=.5cm,yshift=1.2cm]1.2,.3);
        \node at (4,1.5) {Lens Relay};
        \node[yscale=.5,arrownode] (node) at (-.5,3.3) {\phantom{\hspace{.7cm}}};
        \node[rotate=90,yscale=.5,arrownode,above=1 of node,yshift=-.1cm] (nnode) {\phantom{\hspace{.7cm}}};
        \node[above of=nnode] {\tiny Oscillating Pyramidal Prism};
    \end{tikzpicture}
\end{document}

输出如下:

截屏

答案2

在我看来,用 TikZ 构建图形非常复杂。这需要很多时间;但是如果你想在不了解 TikZ 的情况下快速实现你的图片,你可以使用,特别是,

相关内容