2016-11-12 155 views
1

我有一些gnuplot代码,它使用tikz终端制作图形。但是,我想添加到生成的.tex文件中的一些tikz代码。Gnuplot tikz终端,如何给图片添加命令?

作为MWE,请考虑以下的gnuplot代码:

set term tikz standalone 
set output "out.tex" 
plot sin(x) 

比方说,我要画上生成的情节,我可以使用\draw (2,2) circle [radius = 2cm]做一个圆。添加此行到.tex文件生成率如下代码:

\documentclass[10pt]{article} 
\usepackage[T1]{fontenc} 
\usepackage{textcomp} 

\usepackage[utf8x]{inputenc} 

\usepackage{gnuplot-lua-tikz} 
\pagestyle{empty} 
\usepackage[active,tightpage]{preview} 
\PreviewEnvironment{tikzpicture} 
\setlength\PreviewBorder{\gpbboxborder} 
\begin{document} 

\begin{tikzpicture}[gnuplot] 


%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
%!! ADDED BY HAND 
\draw (2,2) circle [radius = 2cm]; 
%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 


%% generated with GNUPLOT 5.0p3 (Lua 5.1; terminal rev. 99, script rev. 100) 
... 

有没有办法来告诉我要上画一些tikz代码gnuplot的,所以它输出.tex文件类似,我做出了一个?阅读文档,我发现用这个终端可以设置序言,但不能在其中包含tikz代码。 我正在考虑的另一个选择是使用set print output_file然后print我想要的代码,但是,无论是代码首先打印在文件中,gnuplot覆盖它或在gnuplot打印输出后覆盖它。

回答

1

也许这接近:

set label 1 "\\tikz{\\draw [green] (2,2) circle [radius = 2cm];}" at screen 0.0, screen 0.0 

set label 2 "by gnuplot" textcolor rgb "#00FF00" at 0, -0.6 
set label 3 "manual" textcolor rgb "#0000FF" at 0, -0.5 

set term tikz standalone 
set output "out.tex" 
plot sin(x) 

有一个小的相比,你的手工绘制命令生成的循环失调,但也可能是足够接近。

请注意,此方法不会直接在生成的tex文件中放置draw命令,它会将draw命令放入node。我认为这会导致抵消。 gnuplot的生成此:

\node[gp node left] at (0.000,0.000) {\tikz{\draw [green] (2,2) circle [radius = 2cm];}}; 

enter image description here

不要忘记逃跑的反斜杠。在set label at之后的选项screen告诉gnuplot将标签相对于屏幕坐标系统放置,看看gnuplot命令行中的help coordinates

+0

如果您尝试在另一个地方绘制圆圈,例如'(5,5)',则会在您的图形中绘制该圆圈的位置。我试过绘制其他东西,它总是绘制在左下角。我也尝试过在'http://zx.stackexchange.com/questions/1003/in-tikz-is-it-possible-to-nest-nodes'中提出包含'tikzpicture'环境和矩阵节点但没有任何工作。由于所有内容都放入节点中,因此可能需要制作脚本来将该代码添加到.tex文件中。 – Nister

+0

啊,你说得对。它似乎完全忽略了(2,2)或(5,5)。或者(2,2)是相对于该节点的,并且该节点的内容被修剪。但是如何将标签移动到正确的位置,比如'set set label 1'\\ tikz {\\ draw [green](0,0)circle [radius = 2cm];}“在-5,-0.2'? 'at -5,-0.2'是节点的左下角。我知道,找到正确的坐标可能会很困难。也许一个外部脚本(可以用'system'调用)是一个更清洁的解决方案。 – maij