我正在制作一本以 HTML 和 pdf 形式呈现的四开本书籍。 HTML 由多个带有单独
qmd
文件的页面组成。整本书应该使用一组通过 \newcommand
定义的 LaTeX 宏。 LaTeX 使用 MathJax 渲染。
尝试了三种不同的方法:
A – 将宏插入到每个
qmd
文件的开头。这样,宏在使用时可以正确显示,但有两个缺点:在每个 qmd
文件中重复宏定义(而且它们很多),并且 XeTeX 抱怨已经定义的命令。
B – 在单独的
macros.qmd
文件中定义宏,并通过插入 在其他
qmd
文件的开头调用该通用文件
{{< include macros.qmd >}}
在每一个中,如四开本指南中所解释的那样。这成功地在 HTML 中正确生成了宏,但 XeTeX 仍然抱怨已经定义的命令。 – 我想用 \newcommand
替换
\providecommand
可以解决这个问题。C – 使用
macros.qmd
或
include-in-body:
文件中的类似选项调用
_quarto.yml
文件,如this、this 和 this 问题的答案中所建议。例如:
format:
html:
include-in-body: macros.qmd
或
format:
html:
include-in-body:
- text: {{< include macros.qmd >}}
但是渲染器似乎没有加载这些宏定义(XeTeX 也看不到它们)。我想知道是否有一个简单的解决方案适用于 HTML 和 XeTeX,并避免文本冗余(在作者方面),例如重复定义或调用外部文件。我的印象是,许多使用 Quarto 进行数学/物理的作者都会面临这个问题。
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}}
与macros.qmd
:
---
format: html
---
::: {.hidden}
$$
\newcommand{\foo}{E=mc^{2}}
$$
:::