带有 ROOT 内核的 nbconvert 在降价中导出无名图

Posted

技术标签:

【中文标题】带有 ROOT 内核的 nbconvert 在降价中导出无名图【英文标题】:nbconvert with ROOT kernel exports nameless plots in markdown 【发布时间】:2016-08-27 13:59:09 【问题描述】:

我正在使用 nbconvert v4 将 jupiter 笔记本导出为 pdf。我的笔记本使用 ROOT C++ 内核,我设法导出它的唯一方法是通过降价。 我将笔记本转储到markdown,然后使用pandoc将其导出为pdf。

我唯一的问题是我通过笔记本中的代码创建绘图,因此我的降价文件包含自动生成的 png 文件。

当我使用 pandoc 时,这些文件会变成图形,并且由于某种原因,图形的标题总是“png”。

我运行命令:

jupyter nbconvert --to markdown my_file.ipynb
pandoc --toc --template=../Scripts/mdtemplate.tex my_file.md --latex-engine=pdflatex -o final.pdf

我在网上找到了我使用的模板:

    \documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$babel-lang$,$endif$$if(papersize)$$papersize$paper,$endif$$for(classoption)$$classoption$$sep$,$endfor$]$documentclass$
$if(fontfamily)$
\usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]$fontfamily$
$else$
\usepackagelmodern
$endif$
$if(linestretch)$
\usepackagesetspace
\setstretch$linestretch$
$endif$
\usepackagegeometry
 \geometry
 a4paper,
 total=170mm,257mm,
 left=20mm,
 top=25mm,
 bottom=25mm,
 right=20mm,
 
\usepackageamssymb,amsmath
\usepackageifxetex,ifluatex
\usepackagefixltx2e % provides \textsubscript
\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
  \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]fontenc
  \usepackage[utf8]inputenc
$if(euro)$
  \usepackageeurosym
$endif$
\else % if luatex or xelatex
  \ifxetex
    \usepackagemathspec
  \else
    \usepackagefontspec
  \fi
  \defaultfontfeaturesLigatures=TeX,Scale=MatchLowercase
$if(euro)$
  \newcommand\euro€
$endif$
$if(mainfont)$
    \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]$mainfont$
$endif$
$if(sansfont)$
    \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]$sansfont$
$endif$
$if(monofont)$
    \setmonofont[Mapping=tex-ansi$if(monofontoptions)$,$for(monofontoptions)$$monofontoptions$$sep$,$endfor$$endif$]$monofont$
$endif$
$if(mathfont)$
    \setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]$mathfont$
$endif$
$if(CJKmainfont)$
    \usepackagexeCJK
    \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]$CJKmainfont$
$endif$
\fi
% use upquote if available, for straight quotes in verbatim environments
\IfFileExistsupquote.sty\usepackageupquote
% use microtype if available
\IfFileExistsmicrotype.sty%
\usepackagemicrotype
\UseMicrotypeSet[protrusion]basicmath % disable protrusion for tt fonts

$if(geometry)$
\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]geometry
$endif$
\usepackagehyperref
$if(colorlinks)$
\PassOptionsToPackageusenames,dvipsnamescolor % color is loaded by hyperref
$endif$
\hypersetupunicode=true,
$if(title-meta)$
            pdftitle=$title-meta$,
$endif$
$if(author-meta)$
            pdfauthor=$author-meta$,
$endif$
$if(keywords)$
            pdfkeywords=$for(keywords)$$keywords$$sep$; $endfor$,
$endif$
$if(colorlinks)$
            colorlinks=true,
            linkcolor=$if(linkcolor)$$linkcolor$$else$Maroon$endif$,
            citecolor=$if(citecolor)$$citecolor$$else$Blue$endif$,
            urlcolor=$if(urlcolor)$$urlcolor$$else$Blue$endif$,
$else$
            pdfborder=0 0 0,
$endif$
            breaklinks=true
\urlstylesame  % don't use monospace font for urls
$if(lang)$
\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
  \usepackage[shorthands=off,$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=$babel-lang$]babel
$if(babel-newcommands)$
  $babel-newcommands$
$endif$
\else
  \usepackagepolyglossia
  \setmainlanguage[$polyglossia-lang.options$]$polyglossia-lang.name$
$for(polyglossia-otherlangs)$
  \setotherlanguage[$polyglossia-otherlangs.options$]$polyglossia-otherlangs.name$
$endfor$
\fi
$endif$
$if(natbib)$
\usepackagenatbib
\bibliographystyle$if(biblio-style)$$biblio-style$$else$plainnat$endif$
$endif$
$if(biblatex)$
\usepackage$if(biblio-style)$[style=$biblio-style$]$endif$biblatex
$if(biblatexoptions)$\ExecuteBibliographyOptions$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$$endif$
$for(bibliography)$
\addbibresource$bibliography$
$endfor$
$endif$
$if(listings)$
\usepackagelistings
$endif$
$if(lhs)$
\lstnewenvironmentcode\lstsetlanguage=Haskell,basicstyle=\small\ttfamily
$endif$
$if(highlighting-macros)$
$highlighting-macros$
$endif$
$if(verbatim-in-note)$
\usepackagefancyvrb
\VerbatimFootnotes % allows verbatim text in footnotes
$endif$
$if(tables)$
\usepackagelongtable,booktabs
$endif$
$if(graphics)$
\usepackagegraphicx,grffile
\makeatletter
\def\maxwidth\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi
\def\maxheight\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi
\makeatother
% Scale images if necessary, so that they will not overflow the page
% margins by default, and it is still possible to overwrite the defaults
% using explicit options in \includegraphics[width, height, ...]
\setkeysGinwidth=\maxwidth,height=\maxheight,keepaspectratio
$endif$
$if(links-as-notes)$
% Make links footnotes instead of hotlinks:
\renewcommand\href[2]#2\footnote\url#1
$endif$
$if(strikeout)$
\usepackage[normalem]ulem
% avoid problems with \sout in headers with hyperref:
\pdfstringdefDisableCommands\renewcommand\sout
$endif$
$if(indent)$
$else$
\IfFileExistsparskip.sty%
\usepackageparskip
% else
\setlength\parindent0pt
\setlength\parskip6pt plus 2pt minus 1pt

$endif$
\setlength\emergencystretch3em  % prevent overfull lines
\providecommand\tightlist%
  \setlength\itemsep0pt\setlength\parskip0pt
$if(numbersections)$
\setcountersecnumdepth5
$else$
\setcountersecnumdepth0
$endif$
$if(subparagraph)$
$else$
% Redefines (sub)paragraphs to behave more like sections
\ifx\paragraph\undefined\else
\let\oldparagraph\paragraph
\renewcommand\paragraph[1]\oldparagraph#1\mbox
\fi
\ifx\subparagraph\undefined\else
\let\oldsubparagraph\subparagraph
\renewcommand\subparagraph[1]\oldsubparagraph#1\mbox
\fi
$endif$
$if(dir)$
\ifxetex
  % load bidi as late as possible as it modifies e.g. graphicx
  $if(latex-dir-rtl)$
  \usepackage[RTLdocument]bidi
  $else$
  \usepackagebidi
  $endif$
\fi
\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
  \TeXXeTstate=1
  \newcommand\RL[1]\beginR #1\endR
  \newcommand\LR[1]\beginL #1\endL
  \newenvironmentRTL\beginR\endR
  \newenvironmentLTR\beginL\endL
\fi
$endif$
$for(header-includes)$
$header-includes$
$endfor$

$if(title)$
\title$title$$if(thanks)$\thanks$thanks$$endif$
$endif$
$if(subtitle)$
\providecommand\subtitle[1]
\subtitle$subtitle$
$endif$
$if(author)$
\author$for(author)$$author$$sep$ \and $endfor$
$endif$
$if(institute)$
\institute$for(institute)$$institute$$sep$ \and $endfor$
$endif$
\date$date$

\begindocument
$if(title)$
\maketitle
$endif$
$if(abstract)$
\beginabstract
$abstract$
\endabstract
$endif$

$for(include-before)$
$include-before$

$endfor$
$if(toc)$

$if(colorlinks)$
\hypersetuplinkcolor=$if(toccolor)$$toccolor$$else$black$endif$
$endif$
\setcountertocdepth$toc-depth$
\tableofcontents

$endif$
$if(lot)$
\listoftables
$endif$
$if(lof)$
\listoffigures
$endif$
$body$

$if(natbib)$
$if(bibliography)$
$if(biblio-title)$
$if(book-class)$
\renewcommand\bibname$biblio-title$
$else$
\renewcommand\refname$biblio-title$
$endif$
$endif$
\bibliography$for(bibliography)$$bibliography$$sep$,$endfor$

$endif$
$endif$
$if(biblatex)$
\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$

$endif$
$for(include-after)$
$include-after$

$endfor$
\enddocument

任何想法如何在 nbconvert 或 Pandoc 中设置标题名称?错误可能出在哪里?

附:如果有帮助,我还会在此处附上标题的屏幕截图。 它是由代码产生的:

TCanvas canvas_2("c", "c");
TF1 f1("f1","sin(x)/x",0.,10.);
f1.Draw();
canvas_2.Draw();

【问题讨论】:

【参考方案1】:

看来我找到了答案。为了使图像获得 pdf 和 html 格式的名称,必须在产生它们的代码单元中添加元数据,然后在 template.tpl 文件中使用它们来命名图像。

我在网上某处找到了这个解决方案,但我似乎无法再次找到它。如果它对任何人有用,我可以发布一个示例。

【讨论】:

以上是关于带有 ROOT 内核的 nbconvert 在降价中导出无名图的主要内容,如果未能解决你的问题,请参考以下文章

如何在电报中使用降价?我想发送带有超链接的消息

使用带有降价的嵌套@components的Laravel Mail问题

发送后显示带有降价的 Laravel 通知(MailMessage)

在 nbconvert 之前保存 Jupyter 笔记本

R降价输出大小

安装 MikTex、pandoc 和 nbconvert 后将 Jupyter Notebook 转换为 PDF 时出错