Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IPython(Jupyter)MathJaX序言 问题:_Ipython_Ipython Notebook_Mathjax_Pandoc - Fatal编程技术网

IPython(Jupyter)MathJaX序言 问题:

IPython(Jupyter)MathJaX序言 问题:,ipython,ipython-notebook,mathjax,pandoc,Ipython,Ipython Notebook,Mathjax,Pandoc,我如何设置MathJax“序言”,以便在IPython(或Jupyter)笔记本中重复使用,以便于其他人阅读我的文档(on),并用于生成LaTeX/PDF 背景 我想使用IPython(现在的Jupyter)笔记本记录我后来通过LaTeX转换为PDF的文档(使用IPython nbconvert)。问题是如何包含我在几乎每个文档中使用的大量宏定义。比如: \newcommand{\vect}[1]{\vec{#1}} \newcommand{\abs}[1]{\lvert#1\rvert} \D

我如何设置MathJax“序言”,以便在IPython(或Jupyter)笔记本中重复使用,以便于其他人阅读我的文档(on),并用于生成LaTeX/PDF

背景 我想使用IPython(现在的Jupyter)笔记本记录我后来通过LaTeX转换为PDF的文档(使用
IPython nbconvert
)。问题是如何包含我在几乎每个文档中使用的大量宏定义。比如:

\newcommand{\vect}[1]{\vec{#1}}
\newcommand{\abs}[1]{\lvert#1\rvert}
\DeclareMathOperator{\erf}{erf}
等等。就笔记本电脑而言,一个不令人满意的解决方案是将它们简单地包含在笔记本电脑顶部的降价单元格中,嵌入在两个美元符号之间,因此它被解释为数学。如果这是在一些介绍性文本之后完成的,那么它甚至不会影响输出

问题是,在转换为LaTeX(用于PDF导出)时,这些命令嵌入到LaTeX文件的数学环境中。这有几个问题:

  • \DeclareMathOperator
    这样的命令必须出现在LaTeX文档前言中
  • 命令定义是方程式的局部定义,在文档的后面部分不可用。(这可以通过使用
    \gdef
    \global\def
    来克服,但是必须用
    \let\gdef{\def}
    之类的东西欺骗MathJax来识别这些命令,这些东西在某种程度上是隐藏在LaTeX中的。我发现的任何制作这项工作的方法都是一个丑陋的黑客行为。)
  • 有时命令已经在LaTeX中定义,需要有
    \renewcommand
    (MathJax不支持,但同样可以由
    \let\renewcommand\newcommand
    等提供。这对我来说似乎是合理的,因为MathJax不知道最终LaTeX文件可能使用什么前导)
  • 可能解决方案是添加如下代码(不确定是否等效于
    \DeclareMathOperator
    此处…)

    
    MathJax.Hub.Config({
    特克斯:{
    宏:{
    向量:[“{\\vec#1}”,1],
    abs:[“{\\lvert#1\\rvert}”,1]
    }
    }
    });
    
    custom.js
    文件,然后在转换为PDF时提供一个LaTeX包以供包含。这种方法的问题是:如何分发
    custom.js
    文件和LaTeX样式的文件供其他人(协作者和查看者)使用

  • 我希望合作者能够编辑和阅读我的文档,而不必在其全局配置中安装自定义扩展。具体来说,我可以要求他们在下载/签出我的代码后运行类似于
    python setup.py configure
    的命令,该命令对项目进行本地修改,例如在包含笔记本的所有目录中填充
    ipython\u notebook\u config.py
    文件,但我不喜欢安装扩展,或者修改他们的个人全局
    custom.js
    文件

    我的绊脚石是,我不知道如何将本地
    custom.js
    文件的贡献添加到笔记本链中,并怀疑这可能违反了安全策略

    最好的解决方案不需要我的合作者采取任何行动

  • 我希望我的笔记本可以使用,人们可以下载笔记本并生成PDF。(我认为这排除了使用
    custom.js
    hacks和分布式
    *.sty
    文件的可能性,但我不确定。)

  • 我更希望能够简单地启动一个新笔记本,然后开始写作,而不必在每个笔记本的开头插入一堆样板代码,尽管可以通过使用笔记本扩展或
    python\u notebook\u config.py
    中的一些钩子来实现这一过程的自动化

  • 工具书类 以下帖子解决了其中一些问题,但在大多数方面都有不足之处:

    • (特别注意到相关困难)
    关于IPython笔记本电脑生产LaTeX文件(潜在)问题的讨论:

    笔记本中的数学一般性讨论:


      • 我认为你可以解决一些问题,但不是全部

        首先是绊脚石。我相信(尽管我可能错了)nbviewer只看笔记本本身。例如,我不知道它如何运行
        ipython\u notebook\u config.py
        。这就排除了这种思路,也就是说,我认为你必须咬紧牙关,在每个笔记本上都添加样板文件。但你至少可以将样板文件最小化。本着这种精神:

        您可以在github或其他任何平台上维护您的
        custom.js
        (可能使用更具描述性的名称),然后向所有笔记本添加一行样板文件,以从URL加载该脚本。您仍然需要样板文件,但要短得多

        一旦您执行了包含javascript的代码单元,它就会保存在笔记本中,这意味着下次浏览器加载它时,它会自动发生,甚至在代码单元执行之前。因此,除非nbviewer阻止javascript的执行,否则它应该可以正常工作。这也将使协作者能够很好地工作,因为他们不必下载额外的文件


        至于您自己的风格文件,我怀疑任何人如果足够成熟,能够安装ipython和latex,下载您的笔记本,并在其上运行
        nbconvert
        ,也足以下载
        .sty
        文件。无论如何,我看不出有任何方法可以绕过这一需要……

        在web上拥有一个中心
        custom.js
        文件不是一个坏主意,只要有一种方法可以使用本地版本(例如在飞机上工作时)。问题是:在哪里可以包含样板文件,以便它能够尽早影响MathJax配置?到
        <script type="text/x-mathjax-config">
        MathJax.Hub.Config({
          TeX: {
            Macros: {
              vect: ["{\\vec #1}",1],
              abs: ["{\\lvert #1 \\rvert}",1]
            }
          }
        });
        </script>