如何为四开本书籍全局定义 LaTeX 宏?

pgl*_*lpm 5 macros latex quarto

我正在制作一本以 HTML 和 pdf 形式呈现的四开本书籍。HTML 由具有单独qmd文件的多个页面组成。\\newcommand整本书应该使用一组通过 s 定义的 LaTeX 宏。LaTeX 使用 MathJax 渲染。

\n

尝试了三种不同的方法:

\n

A \xe2\x80\x93 将宏插入每个文件的开头qmd。这样,宏在使用时可以正确显示,但有两个缺点:每个qmd文件中重复宏定义(而且它们很多),并且 XeTeX 抱怨已经定义的命令。

\n

B \xe2\x80\x93 在单独的文件中定义宏,并通过插入macros.qmd在其他文件的开头调用该公共文件qmd

\n
{{< include macros.qmd >}}\n
Run Code Online (Sandbox Code Playgroud)\n

正如四开本指南中所解释的那样。这成功地在 HTML 中正确生成了宏,但 XeTeX 仍然抱怨已经定义的命令。\xe2\x80\x93 我想替换\\newcommand\\providecommand可以解决这个问题。

\n

C \xe2\x80\x93macros.qmd使用文件include-in-body:中的选项或类似选项调用文件,如thisthisthis问题_quarto.yml的答案中所建议的。例如:

\n
format:\n  html:\n    include-in-body: macros.qmd\n
Run Code Online (Sandbox Code Playgroud)\n

或者

\n
format:\n  html:\n    include-in-body:\n      - text: {{< include macros.qmd >}}\n
Run Code Online (Sandbox Code Playgroud)\n

但渲染器似乎没有加载这些宏定义(XeTeX 也看不到它们)。

\n

我想知道是否有一个简单的解决方案适用于 HTML 和 XeTeX,并避免文本冗余(在作者这边),例如重复定义或调用外部文件。我的印象是,许多使用 Quarto 进行数学/物理的作者都会面临这个问题。

\n

Jul*_*ian 4

我会使用你的选项 C,但使用include-in-header, 例如

project:
  type: book

book:
  title: "testbook"
  author: "Jane Doe"
  date: "23.11.2022"
  chapters:
    - index.qmd
    - intro.qmd

format: 
    html:
      include-in-header:
         - file: macros.html
    pdf:
      include-in-header:
         - text: |
               \newcommand{\foo}{E=mc^{2}}
Run Code Online (Sandbox Code Playgroud)

macros.qmd

---
format: html
---

::: {.hidden}
$$
\newcommand{\foo}{E=mc^{2}}
$$
:::
Run Code Online (Sandbox Code Playgroud)