gpt4 book ai didi

emacs - 自定义组织模式导出

转载 作者:行者123 更新时间:2023-12-04 07:56:30 24 4
gpt4 key购买 nike

因此,一段时间以来,我一直在使用org-mode做研究笔记。我喜欢如何无缝地导出到 latex (对于我的论文)和html(对于我的博客)。但是,每当我使用带有#+ LATEX_HEADER的\newcommand定义宏时,这些宏根本不会显示在HTML导出中。

我目前通过将所有这些命令放在
(\newcommand\newcommand等,等等。)
在顶部,然后从tex文件中手动删除“(”和“)”。

我希望我能做的是为这些命令保留一个抽屉,并自定义org模式的html和Latex导出以适本地处理此抽屉。

例如,我将在org文件中添加以下内容:

:LATEX_MACROS:
\newcommand{\norm}[1]{\lVert{#1}\rVert}
\newcommand{\abs}[1]{\lvert{#1}\rvert}
\newcommand{\half}{\frac{1}{2}}
:END:

导出后,它会在标题部分的 latex 文件中逐字显示
并在html文件中
\(
\newcommand{\norm}[1]{\lVert{#1}\rVert}
\newcommand{\abs}[1]{\lvert{#1}\rvert}
\newcommand{\half}{\frac{1}{2}}
\)

最佳答案

在撰写本文时,这是一种与Org,pdflatex和MathJax结合使用的独立方法。确保已导出抽屉(或至少是LATEXMACROS抽屉)(这是默认设置),然后在Org文件顶部附近插入:

#+OPTIONS: toc:nil
#+DRAWERS: LATEXMACROS ...

:LATEXMACROS:
@@html:<div style="display: none">@@
\(
\global\def\mymacro{...}
\global\def\mymacrow2args#1#2{...}
...
\)
@@html:</div>@@
:END:

#+TOC: headlines

可以解决以下问题:
  • 我们必须使用数学环境(此处为\( ... \)),否则Org会转义TeX语法。
  • 我们不能使用\newcommand,因为LaTeX希望它们在序言中,而MathJaX不会收到它。可以在序言之外使用\newcommand,但随后LaTeX(与MathJax不同)将定义的宏限制为当前的数学环境。我们通常希望在文件中的任何位置使用它们。
  • 我们不能使用简单的\def,因为就作用域而言,它的行为类似于\newcommand(对于MathJax是全局的,对于LaTeX是本地的)。我们也不能使用\xdef,因为MathJax不知道。
  • MathJax不知道\global,但这不会阻止它使用全局的\def。但是,它将为网页中的每个\global打印一个红色警告。为了摆脱它们,我们将数学环境放在未显示的HTML部分中。
  • 对于MathJax,将无法在其默认位置的目录中及时定义宏。如果您在标题中使用宏并需要TOC,请使用#+OPTIONS: toc:nil禁用默认值,并使用#+TOC: headlines手动将其添加到抽屉后面。

  • 注意事项:
  • 无法预览使用自定义宏的 latex 片段,因为小的TeX文件Org构建将不包含我们的环境。
  • \newcommand不同,\def默默地替换任何内容。而且,其语法略有不同。
  • 数学环境在pdflatex的输出中占用了一些垂直空间,因此我们必须将其放置在无关紧要的位置(例如,在第一个标题之前)。
  • 这可能真的取决于版本:
  • Org模式在导出LaTeX宏时可能会更好(例如,在解析#+LATEX_HEADER时提供更智能的方式将它们发送到MathJax,提供新的导出选项,而不是转义\newcommand并将其放入经过正确处理的前导中)。
  • MathJax可能开始接受\xdef作为\def的别名或忽略\global(这样就不再需要HTML节技巧)。
  • 关于emacs - 自定义组织模式导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12717654/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com