Latex 从markdown第四个标题生成pdf的Pandoc呈现方式不同

Latex 从markdown第四个标题生成pdf的Pandoc呈现方式不同,latex,markdown,pandoc,pdflatex,Latex,Markdown,Pandoc,Pdflatex,我正在使用pandoc从一些降价生成pdf。我通过散列符号使用h1到h4。示例h1=#,h4=#####。当我生成这样的文档时: pandoc input.md -o output.pdf 我得到一个文档,其中h1、h2和h3后面有一个新行,但h4没有新行。文本与标题在同一行开始(格式不同,但中间没有换行符) 我尝试在#######之后添加空格,并使用编辑器添加手动换行符,但似乎没有任何效果 有什么想法吗?pandoc通过LaTeX生成PDF。在LaTeX中,使用以下命令生成“标题”: \se

我正在使用pandoc从一些降价生成pdf。我通过散列符号使用h1到h4。示例h1=#,h4=#####。当我生成这样的文档时:

pandoc input.md -o output.pdf
我得到一个文档,其中h1、h2和h3后面有一个新行,但h4没有新行。文本与标题在同一行开始(格式不同,但中间没有换行符)

我尝试在#######之后添加空格,并使用编辑器添加手动换行符,但似乎没有任何效果


有什么想法吗?

pandoc
通过LaTeX生成PDF。在LaTeX中,使用以下命令生成“标题”:

  • \section
  • \subsection
  • \subsubsection
  • \段落
  • \子段
  • 如您所见,“第四级标题”对应于
    \paragration
    命令,如您所述呈现。根本没有要使用的
    \subsubsubsection
    命令


    获得所需内容的唯一方法是重新定义
    \paragration
    命令,这相当棘手。我无法使它与Pandoc一起工作。

    我不确定,为什么,但这对我来说是可行的:

    $\\$
    放在你的
    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    可以说,解决这一问题的最佳方法是通过改变4级标题对应的内容来完全避免问题。pandoc的默认设置是对第一级标题使用
    \section
    命令,对第四级标题使用
    \paration
    。这可以通过以下参数进行更改:

    ——顶层划分=[默认|部分|章节|部分]

    在LaTeX[…]输出中将顶级标题视为给定的分区类型。层次顺序为部分、章节、章节;所有标头都会移动,以便顶级标头成为指定的类型。默认行为是通过试探法确定最佳分割类型[…]

    因此,使用
    --top-level division=chapter
    ,将通过
    \subsubsection
    命令生成第四级标题

    乳胶造型 如果这不是一个选项,下一个最好的方法是配置相应LaTeX命令的布局:对于四级标题,默认情况下为
    \paragration
    。以下方法取自

    请检查bpj的答案,该答案比下面的建议简单得多

    默认文档类 默认方式是通过titlesec包配置
    \paragration
    。我们可以为此使用header includes元数据字段,pandoc将在中间LaTeX文档中包含该字段

    ---
    标题包括:|
    ```{=乳胶}
    \usepackage{titlesec}
    \标题间距*{\段落}{0pt}{1ex}{-\parskip}
    \标题格式{\段落}[hang]
    {\normalfont\bfseries}
    {}
    {0pt}
    {}
    ```
    ---
    
    KOMA文档类 对于使用KOMA类(如SCRATCL)的文档,使用titlesec无法正常工作,因为KOMA有自己的处理方式。对于这些,请使用以下替代代码段:

    ---
    documentclass: scrartcl
    header-includes: |
      ``` {=latex}
      \makeatletter
      \renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}%
        {-3.25ex \@plus -1ex \@minus -0.2ex}%
        {0.01pt}%
        {\raggedsection\normalfont\sectfont\nobreak\size@paragraph}%
      }
      \makeatother
      ```
    ---
    

    而@tarleb的答案肯定是最好的(除了它指定了 垂直空间的数量错误),这里有一个“更简单”(通过某种度量) 但更多的黑客(至少在乳胶术语中)解决方案可以选择使用Pandoc Lua过滤器或乳胶黑客,但避免加载另一个乳胶包

    我们希望乳胶源看起来像这样:

    pandoc input.md -o output.pdf
    
    \hypertarget{level-4-heading}{%
    \段落{4级标题}\标签{4级标题}
    \hfill
    Lorem ipsum dolor sit amet。
    
    这种乳胶看起来很糟糕,但如果你不需要保存或分享乳胶 source它执行您可能想要的操作:在级别4之间留出一个空间 标题及其后的段落等于第3级之间的空格 标题及其后的段落

    下面是它的工作原理:因为一行上的
    \h填充本身大约是
    尽可能接近LaTeX中的空白段落,您将获得第一个
    段落-与标题连用的段落-仅包含
    水平空白直到行尾,然后立即
    新段落后-标题后的实际第一段-
    在它和标题之间只有一个正常的段落空格。这
    可能也会打乱LaTeX关于段落应该是什么的想法
    尽可能少地喜欢

    “手动”方式如下所示:

        #### Level 4 heading
    
        ````{=latex}
        \hfill
        ````
    
        Lorem ipsum dolor sit amet.
    
    这使用了Pandoc相对较新的原始标记语法“代码块” 它实际上是一块未经加工的乳胶块,但它看起来比 结果乳胶源!这也是一个乏味的家务,必须插入 这是在每一个4级标题之后。换句话说,您希望插入该选项 生乳胶自动过滤,可通过Lua过滤器过滤:

    --[======================================================================[
    latex-h4-break.lua-潘多克过滤器在4级标题后获得中断。
    用法:
    $pandoc--lua filter latex-h4-break.lua input.md-o output.pdf
    --]======================================================================]
    --创建一次,多次使用!
    本地hfill\u block=pandoc.RawBlock('latex','\\hfill')
    函数头(elem)
    如果4==元素级,则
    返回{elem,hfill_block}
    否则--忽略其他级别的标题!
    归零
    结束
    结束
    
    不过,您也可以在
    标题中进行简单的LaTeX破解,包括
    
    元数据块以获得相同的效果:

        ---
        header-includes: 
          - |
            ``` {=latex}
            \let\originAlParaGraph\paragraph
            \renewcommand{\paragraph}[1]{\originAlParaGraph{#1} \hfill}
            ```
        ---
    
        #### Level 4 heading
    
        Lorem ipsum dolor sit amet.
    
    首先创建
    \paragration
    命令的“别名”,然后 然后使用 新的定义使得现在无论在哪里,乳胶源都是由Pandoc创建的 包含