【问题标题】:Pandoc with Emoji and Pictographs带有表情符号和象形文字的 Pandoc
【发布时间】:2020-05-20 06:17:14
【问题描述】:

有没有办法从包含 unicode、表情符号和象形文字的 Markdown 文件中获取 PDF?

我正在运行这个测试:

echo ':smile: → ★ ???? ???? ⚠️' | pandoc -f markdown+emoji --latex-engine=xelatex -o foo.pdf

使用我所有的系统字体。

到目前为止我得到的最好结果是:

我尝试了一些不同的 pandoc 输入格式 (-f / --from) 和乳胶引擎,但没有成功。是否有完美的字体或关于如何实现的任何建议?

【问题讨论】:

    标签: unicode fonts emoji pandoc xelatex


    【解决方案1】:

    几天前,我正在寻找解决这个确切问题的方法, 但找不到任何...所以我开发了自己的解决方案: Pandoc filter to include emojis in the generated PDF

    虽然有一些妥协和限制:

    • 我必须使用template.tex 文件,因此如果您已经使用模板,则必须将我模板中的部分与您的部分合并。这可能是一个真正的痛苦......但我标记了我对 Pandoc 生成的原始template.tex 所做的更改。至少这会有所帮助。
    • 我没有使用Lua 语言制作过滤器的经验。所以我尝试了Python,但它并没有像我预期的那样工作,因为我找不到一个库来将 unicode emoji 代码点转换为我可以使用的东西。最后,我使用了Javascript,所以需要NodeJS。此外,必须安装一些 NPM 包。
    • 我使用InkScape 将在线资源中的 SVG 转换为 PDF,以便将它们插入 PDF。这是必要的,因为 LaTeX 无法识别 SVG 图像格式。
    • 此时,我还没有时间实现过滤器的自动安装。 签出 Git 存储库,然后从那里使用它……这是我能给出的最佳建议。有一个示例脚本可以将readme.md 转换为 pdf。我还提交了resulting PDF
    • 我不知道它是否适用于xelatexlualatex 或除pdflatex 以外的任何东西,因为我只有时间使用Pandoc 的默认引擎来测试它,即pdflatex

    使用表情符号过滤器

    先决条件:PandocNodeJS

    1. 签出存储库

    2. 安装需要的 NPM 包:

      npm install
      
    3. 运行 Pandoc,传递过滤器、模板、正确的输入格式、表情符号源等等。以下是用于从 readme.md 编译 example.pdf 的命令:

      pandoc --template="template.tex" -o example.pdf readme.md \
          --filter=emoji_filter.js -M emoji=noto-emoji --from gfm \
          -V links-as-notes=true -V colorlinks -V urlcolor=NavyBlue
      
      • --template="template.tex" 表示存储库中存在的 template.tex 文件
      • -o example.pdf 代表输出文件名
      • readme.md 是输入文件名
      • --filter=emoji_filter.js表示表情过滤脚本文件名
      • -M emoji=noto-emoji 是表情符号过滤器读取的元数据参数,以了解您想要什么样的表情符号。目前有两个选项:noto-emojitwemoji。你可以看到full emoji list at unicode.org
      • --from gfm 是输入格式,gfm 表示 GitHub Flavored Markdown。我使用它是因为它可以将 :__name__: 格式的表情符号转换为我的过滤器可以识别的 unicode 代码点。
      • 其他参数对此答案没有意义...它们用于调整链接在最终 PDF 中的显示方式。

    我希望这个答案和表情符号过滤器会有所帮助! 还有什么问题,请在评论中提问... 也许如果您认为我应该发布并解释代码的某些部分。 我真的不知道哪些部分可能有助于简洁的答案 因为代码比较复杂。

    不管怎样,尽管问=)

    【讨论】:

    • 这似乎是一个不错的解决方案@Miguel Angelo!我刚刚克隆到您的存储库并执行了您的示例,结果为:/usr/bin/env: ‘node\r’: No such file or directory Error running filter emoji_filter.js: Filter returned error status 127 我的环境是 Ubuntu 20.04 LTS、NodeJs v14.18.1、pandoc 2.5、inkscape 0.92.5 和 TexLive 2021(希望我没有错过任何内容) .你能告诉我我的问题是什么吗?
    猜你喜欢
    • 2021-07-02
    • 2019-04-03
    • 1970-01-01
    • 2021-10-11
    • 2023-03-04
    • 1970-01-01
    • 2020-12-27
    • 2012-12-09
    • 2013-03-13
    相关资源
    最近更新 更多