DiagrammeR 和 MathJax 无法正确呈现 rmarkdown 文档中的图形
Posted
技术标签:
【中文标题】DiagrammeR 和 MathJax 无法正确呈现 rmarkdown 文档中的图形【英文标题】:DiagrammeR and MathJax do not correctly render a graph in a rmarkdown document 【发布时间】:2022-01-21 12:12:43 【问题描述】:我正在使用下面的rmarkdown
示例,它没有显示符号theta
也没有显示图的标题,并且第一个节点太宽(见下面的输出):
---
title: "Untitled"
output: html_document
---
The example is:
```r nnet02, echo=F, fig.cap="Multilayer"
library(DiagrammeR)
add_mathjax(
grViz("digraph G1
graph [layout=neato overlap = true]
I1 [pos='1,1!' style=radial label='$\\\\theta$']
I2 [pos='2,1!' style=radial]
I1 -> I2
", width = 550))
```
你能帮帮我吗?
【问题讨论】:
Theta 正在被我消失?你也是? 我可以为您提供下一个解决方案,一分钟。 你可以使用html labels 例如label='θ'
。另请参阅graphviz docs
@PaulSmith ; graphviz 采用 html 标签,因此您可以使用 <sup>
和 <sub>
哦,是的,让我想起了这个***.com/questions/39334738/…。
【参考方案1】:
据我所知,我们可以在 Unicode 中找到所有必要的符号。
(Mathjax 是多余的?)
您修改后的代码:
---
title: "Untitled"
output: html_document
---
The example is:
```r nnet02, echo=F, fig.cap="Multilayer"
library(DiagrammeR)
grViz("digraph G1
graph [layout=neato overlap = true]
I1 [pos='1,1!' style=radial label='\U03B8' fontsize=15]
I2 [pos='2,1!' style=radial fontsize=15]
I1 -> I2
", width = 550)
```
有 sups 和 subs:
***
I1 [pos='1,1!' style=radial label= '\U03B8\U00B3' fontsize=10]
I2 [pos='2,1!' style=radial label= '\U03B8\u2085' fontsize=10]
***
一些额外的想法
我们可以在查看器中绘制我们的图表(使用 MJ)。 导出为图片并添加到我们的 RMarkdown。
【讨论】:
@PaulSmith 当然可以。一瞬间。准备好了。 @PaulSmith 这个资源对你很有用:unicode-table.com/en/sets/superscript-and-subscript-letters @PaulSmith 我不知道 :) 我们可以更改字体和外观。等等) @PaulSmith 所以,字体没有帮助。关于 Mathjax 和消失。我们有问题,因为我们的图表有 .SVG 输出。我试图找到一个解决方案,如何将 MJ 嵌入到 SVG,但无法做到。也许你会处理。我很高兴看到它。 F.e.label= <<foreignObject> ... </foreignObject>>
不工作...
谢谢,@manro!我怀疑这是add_mathjax
的错误。同时,我针对Diagrammer
(在 GitHub 中)提交了一个错误。让我们等待反馈。【参考方案2】:
在@user20650 提到问题Improve positioning of subscript and superscript on node labels 之后,可以构建一种解决方法:
-
在
cat chunk
中写入graphviz dot
代码,随后将保存为gv
文件:
cat, engine.opts=list(file = 'sample.gv')
digraph G1
graph [layout=neato overlap = true];
I1 [pos="1,1!" label="\\theta^2_j" shape="circle"];
I2 [pos="2,1!" label="\\sum_i=1^n I_i" shape="circle"];
I1 -> I2;
-
在
r chunk
中,调用dot2tex
(dot2tex) 将gv
文件转换为LaTeX tikz
图片。接下来,将tex
文件编译为pdf
并对其进行裁剪。最后,将裁剪后的pdf
图形转换为svg
格式(使用dvisvgm
、dvisvgm):
r echo=F
system("dot2tex --prog=neato --autosize -f tikz -t math sample.gv > sample.tex")
system("pdflatex sample.tex")
system("pdfcrop sample.pdf sample.pdf")
system("dvisvgm --pdf sample.pdf")
-
最后,一个
r chunk
将svg
图包含到rmarkdown
文档中:
r echo=F, fig.cap="My caption.", out.width=500
knitr::include_graphics("sample.svg")
结果是:
【讨论】:
这真的很有用......可能是一种将它构建到 knitr hook 之类的方法;我以后可能会去 我想是的,@user20650。而且由于add_mathjax
有问题,我的解决方法也可以用来重写他们的add_mathjax
。我针对Diagrammer
提交了一个错误,但没有人回答...很多很多问题都没有任何回复...以上是关于DiagrammeR 和 MathJax 无法正确呈现 rmarkdown 文档中的图形的主要内容,如果未能解决你的问题,请参考以下文章
CKEDITOR mathjax公式在jquery中未正确加载
使用 mPDF 将 MathJax 方程输出到 PDF 时未正确对齐
diagrammeR - 改编自“如何在我的流程图中添加武器?”