【问题标题】:Can I make tags in markdown/Latex linkable? (Jupyter Notebook)我可以在 Markdown/Latex 中制作可链接的标签吗? (Jupyter 笔记本)
【发布时间】:2018-09-07 21:47:42
【问题描述】:

我有一个 Jupyter 笔记本,并且我有包含如下降价的单元格:

\begin{align}
0 + S(a) &= S(0 + a) \tag{by definition of addition} \\
         &= S(a) \tag{by induction hypothesis}
\end{align}

我希望某些标签是可点击的,以便它们跳转到相应的部分。例如我试过

\tag{[by definition of addition](#def_addition)}

除了\href\url<a href=等之外,它们都作为文本的一部分呈现,而不是作为可点击的超链接处理。

这种事情是不受支持还是有解决方法?

【问题讨论】:

  • 通常,hyperref 包在 Latex 中支持这种事情。鉴于 Jupyter 使用 mathjax 渲染乳胶,这不是一个合适的乳胶分布,我想你要让 \usepackage{hyperref} 之类的东西真正起作用。
  • 是的,我也尝试过\usepackage{hyperref},但它似乎没有“接受”

标签: python hyperlink latex markdown jupyter-notebook


【解决方案1】:

原来已经有一个 answer 涵盖了如何在 Jupyter 中发出 \usepackage 声明。但是现在我详细阅读了它,它实际上涵盖了如何在将其转换为实际正确的乳胶文件的过程中向笔记本添加\usepackage 指令。这不是你真正想要的,但它可能是你能做的最好的。

所以要使用他们的解决方案,您的工作流程将是这样的:

  • 写一个包含latex(markdown,真的)和python单元的笔记本
    • 根据需要向乳胶添加标签(最终将成为链接)
  • 通过执行所有 python 代码生成输出
  • 将最终结果转换为静态乳胶文件,使用上述答案中描述的技巧添加 hyperref 包

您的最终结果将是一个.pdf,其中包含来自markdown 单元的所有乳胶以及来自笔记本中python 单元的所有源和输出。当然明显的缺点就是不能直接执行python源码。

【讨论】:

  • 我确实看到了那个答案,但它看起来非常复杂,除非我在完成编写后专门将笔记本导出为特定格式,否则它看起来不会起作用——它可能无法运行/render 当我运行单元格时
【解决方案2】:

你猜怎么着?尽管我之前持怀疑态度,但事实证明,您实际上可以将 markdown 单元格中的方程式链接到笔记本中的任何其他 markdown 单元格。我想出了两种方法。它们都涉及一些权衡,而且它们都是肮脏的黑客,所以我的其他答案可能仍然会更好,但这里是:

\eqref 换成\tag

首先,将方程式中的\tag 命令替换为\eqref

\begin{align}
0 + S(a) &= S(0 + a) \quad\quad\quad\quad \eqref{dadd} \\
         &= S(a) \quad\quad\quad\quad \eqref{ihop}
\end{align}

请注意,如上例所示,您必须使用 \quad 或其他有效的乳胶数学模式空格之一添加自己的间距。

完成后,将组合标签/标签添加到笔记本中的任何其他降价单元格:

$$\label{dadd}\tag{by definition of addition}$$

单元格中的某处包含加法和的定义

$$\label{ihop}\tag{by induction hypothesis}$$

细胞中的某处持有诱导假说。

这将为您的方程式添加看起来像标签的链接。 \eqref 宏的内容应与对应的\label 的内容匹配,但显示的链接文本将与标记的内容匹配。

这是最后一个单元格中的a link to a live notebook online with some example \eqref links

另一个警告:为了获得要呈现的链接,您必须保存笔记本并重新加载运行它的浏览器,可能至少几次。

\tag 替换为html 链接,并使用$...$ 代替align

如果您只是使用美元符号分隔符(即$<your-math-here>$)调用常规内联数学模式,而不是将您的方程式包装在align 环境中,您可以将每行末尾的\tags 替换为使用[]()语法的markdown html链接:

$\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad 0 + S(a) = S(0 + a) \qquad\qquad\qquad\qquad$ [(by definition of addition)](#dadd)
$\;\quad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad = S(a) \qquad\qquad\qquad\qquad\quad$ [(by induction hypothesis)](#ihop)

如您所见,这种方法的最大缺点是您必须自己设置所有间距,包括繁琐的对齐过程。您可能还会发现使用内联数学模式呈现方程的方式不如使用显示数学模式呈现它们的方式吸引人(如在align 中)。从好的方面来说,笔记本中的 html 链接似乎更受支持/更强大,您无需重新加载即可渲染它们。

链接端点的语法如下:

<a id='dadd'></a>

这是最后一个单元格中的another link to a live notebook online with some example html equation links

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    • 2016-05-30
    • 1970-01-01
    相关资源
    最近更新 更多