Markdown 包--紧密列表

Markdown 包--紧密列表

我在 Latex 中使用 markdown 包(https://ctan.math.utah.edu/ctan/tex-archive/macros/generic/markdown/markdown.pdf

我的文档包含很多列表(我使用 markdown 的主要动机),我想对它们的呈现方式有更多的控制。主要是,我想在主文本和列表之间添加额外的空白(我使用 tightLists 包选项)

我尝试了两种解决方案:

  1. 创建一个命令,环绕 markdown 环境并添加空格。这根本不会渲染文本(即仅渲染空格)
\newcommand\md[1]{
\vspace{2mm}
\begin{markdown}
#1
\end{markdown}
\vspace{2mm}
}
\md{Hello world}  % renders no text, only white space

2.重新定义渲染列表的 markdown 包命令。这可行,但会在嵌套列表中的项目之间产生额外的空间——我只希望最外层的块中有空格。

\newcommand\listspace{\vspace{2mm}}
\renewcommand\markdownRendererOlBeginTight{%
    \listspace%
    \markdownRendererOlBeginTightPrototype%
}%
\renewcommand\markdownRendererOlEndTight{%
    \markdownRendererOlEndTightPrototype%
    \listspace%
}%
\renewcommand\markdownRendererUlBeginTight{%
    \listspace%
    \markdownRendererUlBeginTightPrototype%
}%
\renewcommand\markdownRendererUlEndTight{%
    \markdownRendererUlEndTightPrototype%
    \listspace%
}%

答案1

这是实现您想要的一种方法。诀窍是在嵌套列表时更改渲染器的定义:

  1. 我们从名为 的定义开始outer
  2. top-inner我们切换到以顶级列表的开头命名的定义。
  3. inner我们切换到以二级列表的开头命名的定义。

\begingroup当我们从嵌套列表中向上冒泡时,我们将通过用和括住列表来自动恢复以前的定义\endgroup

\documentclass{article}
\usepackage{markdown}

\newcommand\listspace{\vspace{2mm}}

% The default top-level definitions
\markdownSetupSnippet{outer}{
  renderers = {
    ulBeginTight = {%
      \listspace
      \markdownRendererUlBeginTightPrototype
      \begingroup
        \markdownSetup{snippet = top-inner}
    },
    olBeginTight = {
      \listspace
      \markdownRendererOlBeginTightPrototype
      \begingroup
        \markdownSetup{snippet = top-inner}
    },
  },
}

% Definitions after the beginning of the top-level list
\markdownSetupSnippet{top-inner}{
  renderers = {
    ulBeginTight = {%
      \markdownRendererUlBeginTightPrototype
      \begingroup
        \markdownSetup{snippet = inner}
    },
    olBeginTight = {%
      \markdownRendererOlBeginTightPrototype
      \begingroup
        \markdownSetup{snippet = inner}
    },
    ulEndTight = {%
      \endgroup
      \markdownRendererUlEndTightPrototype
      \listspace
    },
    olEndTight = {%
      \endgroup
      \markdownRendererOlEndTightPrototype
      \listspace
    },
  },
}

% Definitions after the beginning of the second-level list
\markdownSetupSnippet{inner}{
  renderers = {
    ulBeginTight = {%
      \markdownRendererUlBeginTightPrototype
      \begingroup
    },
    olBeginTight = {%
      \markdownRendererOlBeginTightPrototype
      \begingroup
    },
    ulEndTight = {%
      \endgroup
      \markdownRendererUlEndTightPrototype
    },
    olEndTight = {%
      \endgroup
      \markdownRendererOlEndTightPrototype
    },
  },
}

\markdownSetup{
  tightLists = true,
  hashEnumerators = true,
  snippet = outer,
}

\begin{document}
\begin{markdown}
some text

- first item
- second item
    - nested first item
    - nested second item
        - doubly nested item
- third item


#. first item
#. second item
    #. nested first item
    #. nested second item
        #. doubly nested item
#. third item

some more text
\end{markdown}
\end{document}

将上述代码保存为名为 example.tex 的文件并执行 lualatex example.tex 的输出

Markdown 包将这些命名定义称为片段它们是 Markdown 2.10.0 (2021-08-06) 版本的一部分,另请参阅我的 TUGboat 文章介绍了一些片段

在 2.10.0 版本之前,您必须嵌套\markdownSetups(或\renewcommands),这对于人类来说可能有点难以阅读和书写。此外,您无法命名不同的定义集,这会失去记录您的意图的机会。

答案2

您可以重新定义\markdownRendererUlBeginTightmarkdownRendererUlEndTight以包含一些额外空间。这与您自己的方法类似,但仅影响列表的开始和结束。

MWE 显示差异:

\documentclass{article}
\usepackage[tightLists=true]{markdown}
\begin{document}
some text
\begin{markdown}
- list first item
- list second item
- list third item
\end{markdown}
some more text\\[5mm]

\def\markdownRendererUlBeginTight{\vspace{5mm}\begin{compactitem}}
\def\markdownRendererUlEndTight{\end{compactitem}\vspace{5mm}}
% and similar for ordered lists
some text
\begin{markdown}
- list first item
- list second item
- list third item
\end{markdown}
some more text
\end{document}

在此处输入图片描述

请注意,在实际文档中,您应该将重新定义放在序言中:

\documentclass{article}
\usepackage[tightLists=true]{markdown}
\def\markdownRendererUlBeginTight{\vspace{5mm}\begin{compactitem}}
\def\markdownRendererUlEndTight{\end{compactitem}\vspace{5mm}}
\begin{document}
[...]

并排视图显示与常规tightLists选项相比,这不会在项目之间添加额外的空间:

在此处输入图片描述

相关内容