【问题标题】:Pandoc markdown - multiple authors with affiliation side-by-side in PDF?Pandoc markdown - 多个作者在 PDF 中并排连接?
【发布时间】:2020-11-29 22:16:07
【问题描述】:

我正在使用 pandoc 2.10。我想在 Markdown 中写一篇文章文档,然后通过 Latex 导出到 PDF - 我希望有多个作者有附属关系和电子邮件,有点像 https://stackoverflow.com/a/53631801/6197439 的这个例子(但是使用 R-specific 模板,显然):

所以,首先我尝试使用默认 pandoc 功能 - 这是test.md

---
title: "Testing the authors"
author:
  - Alice Alisson, First, Oldest Institute
  - Bob Bobson, First, Oldest Institute
  - Charlie Charlson, Second, Newer Company
date: Aug 10, 2020
---

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

使用pandoc test.md --pdf-engine=xelatex -o test.pdf,我得到:

像这样,作者不是并排的 - 隶属关系位于作者姓名旁边;而且由于机构名称也有逗号,读起来有点混乱。

然后,我发现可以在普通 pandoc 中通过脚注使用从属关系 - 这里更新了test.md

---
title: "Testing the authors"
author:
- Alice Alisson^[First, Oldest Institute]
- Bob Bobson^[First, Oldest Company]
- Charlie Charlson^[Second, Newer Company]
date: Aug 10, 2020
---

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

...和pandoc test.md --pdf-engine=xelatex -o test.pdf,我得到:

作者是并排的,这很好,但从属关系是脚注,我不喜欢。

然后,通过Authors and affiliations in the YAML of RMarkdown - 我发现了https://github.com/pandoc/lua-filters ;所以我想我可以测试一下;所以这里是更新的 test.md:

---
title: "Testing the authors"
institute:
  - first: First, Oldest Institute
  - second: Second, Newer Company
author:
  - Alice Alisson:
      institute:
        - first
      correspondence: "yes"
      email: aa@example.com
  - Bob Bobson:
      institute:
        - first
      correspondence: "yes"
      email: bb@example.com
  - Charlie Charlson:
      institute:
        - second
      correspondence: "yes"
      email: cc@example.com
date: Aug 10, 2020
---

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

... 和:pandoc test.md --lua-filter=scholarly-metadata.lua --lua-filter=author-info-blocks.lua --pdf-engine=xelatex -o test.pdf,我得到:

所以,在这里,作者是并排的,这很好 - 但我通过脚注等参考获得从属关系,并且电子邮件也在单独的一行中;我觉得这有点难读。

那么,我如何为 pandoc 文档格式化 YAML 块,以便它并排显示作者,并在下面显示从属关系和电子邮件?比如:

    Alice Alisson               Bob Bobson             Charlie Charlson                      
First, Oldest Institute   First, Oldest Institute    Second, Newer Company      
    aa@example.com            bb@example.com            cc@example.com                    

如果使用普通 pandoc 无法做到这一点 - 有没有我可以使用的 lua 过滤器来实现这一点?

【问题讨论】:

    标签: latex pandoc


    【解决方案1】:

    可以将scholarly-metadata.lua 过滤器与自定义过滤器结合使用,以所需的方式压缩作者条目:

    -- file: format-authors.lua
    local function squash_author (institutes)
      return function (author)
        local name = setmetatable(author.name, {})
        local institute = institutes[tonumber(author.institute[1])]
        return pandoc.MetaInlines(
          pandoc.List(name)
            .. pandoc.List{pandoc.LineBreak()}
            .. pandoc.List(institute.name)
            .. pandoc.List{pandoc.LineBreak()}
            .. author.email
        )
      end
    end
    
    function Meta (m)
      m.author = m.author:map(squash_author(m.institute))
      return m
    end
    
    

    处理上面给出的例子

    pandoc test.md \
       --lua-filter=scholarly-metadata.lua \
       --lua-filter=format-authors.lua 
       -o test.pdf
    

    生产

    您还必须调整作者使用的字体大小以将所有作者放在一行中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-11
      • 1970-01-01
      • 2019-12-08
      • 1970-01-01
      相关资源
      最近更新 更多