添加自定义 latex 命令以与 pandoc/markdown 一起使用

添加自定义 latex 命令以与 pandoc/markdown 一起使用

所以我用的是流行的Eisvogel 模板对于我的个人工作。我基本上用 markdown 输入所有内容,然后使用 pandoc 将其转换为漂亮的 pdf。

使用 blockquotes ( > text ) 会产生一个漂亮的栏。但是,我突然想到要添加更多样式选项。假设我不仅想将这些块引用用作真正的引文,还想将其用作“信息面板”或“警报面板”。我希望能够以某种方式在我的 markdown 文件中给出前缀或自定义文本命令,并显示正确的框。

假设不是这样:> text这会产生一个美观的灰色框,左侧带有破折号,我希望得到类似的效果,\alert > text这样框就会呈现为红色,而不是原始的块引用颜色。

当然,语法可能看起来完全不同,但我只需要找到一种方法来进一步自定义这个很酷的 pandoc-latex 东西,最好使用自定义命令。我对编写纯 LaTeX 有点熟悉,但使用 pandoc 速度更快,因为我也在 markdown 文件中做笔记。

有人有主意吗?

干杯

答案1

好吧,看看 eisvogel 模板,它看起来像是在customblockquote使用 mdframed 包定义的特殊环境中排版 blockquote:参见其文档

您可以使用 yaml 选项定义新的 LaTeX 命令以用于 pandoc header-includes:。(或者在命令行标志中包含的单独文件中-H。)我认为一个选项是使用这样的命令来重新定义此环境。如果您想恢复正常,您必须将其重新定义为模板定义的方式

---
title: My Document
author: Someone
date: 7 May 2022
header-includes: |
    \definecolor{myred}{RGB}{245,20,20}
    \newcommand{\normalquote}{
        \definecolor{blockquote-text}{RGB}{119,119,119}
        \renewmdenv[rightline=false,
            bottomline=false,
            topline=false,
            linewidth=3pt,
            linecolor=blockquote-border,
            skipabove=\parskip]{customblockquote}
    }
    \newcommand{\redalert}{
        \definecolor{blockquote-text}{RGB}{240,240,240}
        \renewmdenv[
            linewidth=2pt,
            linecolor=black,
            leftmargin=10pt,
            rightmargin=10pt,
            backgroundcolor=myred,
            fontcolor=white,
            shadow=true,
            skipabove=\parskip]{customblockquote}
    }

...

This is some regular text.


> This is a regular quote.

\redalert
> This is a *very* red box with a shadow and light text.

\normalquote
> This is a normal blockquote again.

pandoc 引用重新定义示例

当然,您可以根据需要定义任意数量的此类样式。

最有可能的是,如果我对 pandoc 过滤器和模板有更多的了解,就会有一种更直接的方法,但这可能足以满足您的目的。

答案2

考虑切换到 quarto,这旨在成为 R markdown 的一次进化飞跃。如果您使用自定义模板,这可能不是一个好主意(我没有测试过它是否可以在 quarto 中直接使用,在进行一些/许多更改或根本不使用之后),但除此之外 quarto 包含一些易于使用的预定义“标注”:

姆韦


来源 (mwe.qmd):

---
format: pdf
---

## Callouts in Quarto

In Quarto (next generation of R markdown) you can use "callouts" 
to show predefined alert boxes. For PDF output, \LaTeX\   
`tcolorbox` package is used in the background automatically.


::: callout-note

There are five types of callouts: 
`note`, `tip`, `warning`, `caution` and   `important`. 

:::

::: callout-tip
## Tip with custom caption

This is an example of a tip with custom caption.

:::
    
::: callout-warning
foo
:::

::: {.callout-caution}
## Take care !  

foo

:::

::: callout-important
foo
:::

请注意,在“经典” R markdown 中,您还可以使用自定义块生成不同的 LaTeX 环境。例如,一个简单的示例tcolorbox可以是:

::: {.tcolorbox data-latex="[title=Warning]"}
foo 
:::

但如您所见,即使是默认框的语法也有点复杂,您需要负责在模板中包含所需的包,或者其他header-includes,而制作更复杂的框将需要一些额外的工作(参见链接),而在 Quarto 中只需键入简单的标注块。此外,这些块不能导出为其他格式,而 Quarto 的标注可以导出为 HTML 和 DOCX 表,这些表可以很好地模仿 es tcolorbox

答案3

由于讨论似乎倾向于警告块,我建议看一下 Awesome Boxes:

https://www.nic.funet.fi/pub/TeX/CTAN/graphics/awesomebox/awesomebox.pdf

易于使用,与 markdown 和 pandoc 配合良好。

相关内容