Plot Julia笔记本中打印和打印文本之间的冲突

Plot Julia笔记本中打印和打印文本之间的冲突,plot,jupyter-notebook,julia,Plot,Jupyter Notebook,Julia,我有一个Julia Jupyter笔记本,其中我用绘图生成绘图,例如 thxpplot=plot(title=title,xlabel="T (K)",ylabel="V/V0") thxpplot=plot!(Tplt,Vplt/V0,label=mat,color="red") display((thxpplot)) 以及文本输出,例如 @printf("%s: %s (%d atoms)\n","M

我有一个Julia Jupyter笔记本,其中我用绘图生成绘图,例如

thxpplot=plot(title=title,xlabel="T (K)",ylabel="V/V0")
thxpplot=plot!(Tplt,Vplt/V0,label=mat,color="red")
display((thxpplot))
以及文本输出,例如

@printf("%s: %s (%d atoms)\n","Material",mat,N)
令人烦恼的是,两个输出流似乎都没有同步。经常发生的情况是,特别是在比这更大的示例中,打印文本的一部分出现在绘图之前,其余部分出现在绘图之后,即使代码给出的连续指令清楚地将两者分开。如何确保这些输出流之间的正确同步,或者换句话说,如何立即刷新输出缓冲区?我不认为这是Python笔记本中的一个问题


Thomas

您可以使用

flush(stdout)
但是,如果将打印与文本混合使用,请注意打印使用的是
display
命令,而不是
println
,有时您可能仍然会遇到同步问题,因为这些流是由Jupyter单独处理的

这种情况下的解决方案是使用:

display("some text you want to display")
通过这种方式,您将能够控制输出的顺序

在您的情况下,您可能需要使用以下选项,而不是
@printf

display(@sprintf("whatever you want to print"))
但是,它使用默认的
text/plain
MIME类型(并添加引号等)

通过不同的MIME类型,您的结果可能会更好:

display("text/json", @sprintf("%s: %s (%d atoms)\n","Material",4,5))
或者你甚至可以使用HTML

display("text/html", @sprintf("%s: <b>%s</b> (<b>%d</b> atoms)\n","Material",4,5))
display(“text/html”,@sprintf(“%s:%s(%d原子)\n”,“Material”,4,5))

虽然这似乎解决了订单的问题,但我发现至少有两个缺点:1。@sprintf的参数以引号显示,这与我的初衷相反;2.并非所有格式说明都被翻译,特别是
\t
\n
被逐字复制。