markdown2pdf latex 错误

markdown2pdf latex 错误

我在 emacs 中创建了一个 markdown 文档。该文档是乌克兰语,因此包含一些西里尔字母。我尝试使用 pandoc 模式将其转换为 pdf。但失败了,如下所示:

markdown2pdf: ! LaTeX Error: Command \CYRP unavailable in encoding OT1.
! LaTeX Error: Command \cyrl unavailable in encoding OT1.
! LaTeX Error: Command \cyra unavailable in encoding OT1.
! LaTeX Error: Command \cyrn unavailable in encoding OT1.
! LaTeX Error: Command \CYRV unavailable in encoding OT1.
! LaTeX Error: Command \cyrs unavailable in encoding OT1.
! LaTeX Error: Command \cyrt unavailable in encoding OT1.
! LaTeX Error: Command \cyru unavailable in encoding OT1.
! LaTeX Error: Command \cyrp unavailable in encoding OT1.
! LaTeX Error: Command \CYRN unavailable in encoding OT1.
! LaTeX Error: Command \cyre unavailable in encoding OT1.
! LaTeX Error: Command \cyrv unavailable in encoding OT1.
! LaTeX Error: Command \cyre unavailable in encoding OT1.
! LaTeX Error: Command \cyrl unavailable in encoding OT1.
! LaTeX Error: Command \cyri unavailable in encoding OT1.
! LaTeX Error: Command \cyrk unavailable in encoding OT1.
! LaTeX Error: Command \cyri unavailable in encoding OT1.
! LaTeX Error: Command \cyrishrt unavailable in encoding OT1.
! LaTeX Error: Command \cyrv unavailable in encoding OT1.
! LaTeX Error: Command \cyrs unavailable in encoding OT1.
! LaTeX Error: Command \cyrt unavailable in encoding OT1.
! LaTeX Error: Command \cyru unavailable in encoding OT1.
! LaTeX Error: Command \cyrp unavailable in encoding OT1.
! LaTeX Error: Command \cyrd unavailable in encoding OT1.
! LaTeX Error: Command \cyro unavailable in encoding OT1.
! LaTeX Error: Command \CYRO unavailable in encoding OT1.
! LaTeX Error: Command \CYRO unavailable in encoding OT1.
! LaTeX Error: Command \cyrp unavailable in encoding OT1.
! LaTeX Error: Command \cyrr unavailable in encoding OT1.
! LaTeX Error: Command \cyro unavailable in encoding OT1.
! LaTeX Error: Command \cyrg unavailable in encoding OT1.
! LaTeX Error: Command \cyrr unavailable in encoding OT1.
! LaTeX Error: Command \cyra unavailable in encoding OT1.
! LaTeX Error: Command \cyrm unavailable in encoding OT1.
! LaTeX Error: Command \cyru unavailable in encoding OT1.
! LaTeX Error: Command \cyrv unavailable in encoding OT1.
! LaTeX Error: Command \cyra unavailable in encoding OT1.
! LaTeX Error: Command \cyrn unavailable in encoding OT1.
markdown2pdf: /tmp/pandoc/Thesis-outline-ukr.log: hGetContents: invalid argument (Invalid or incomplete multibyte or wide character)

如何让它使用正确的编码?我应该在 markdown 文档中指定某些内容吗?或者 markdown2pdf 本身有任何设置吗?

更新型多巴胺:我将其添加到.emacs,但没有帮助:

;; set up unicode
(prefer-coding-system       'utf-8)
(set-default-coding-systems 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
;; This from a japanese individual.  I hope it works.
(setq default-buffer-file-coding-system 'utf-8)
;; From Emacs wiki
(setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING))

UPD2:markdown 文件是这里。校验和:

gleontiev@gleontiev-laptop:~$ sum Documents/Thesis-outline-ukr.markdown 
17120     4
gleontiev@gleontiev-laptop:~$ cksum Documents/Thesis-outline-ukr.markdown 
2128209357 4078 Documents/Thesis-outline-ukr.markdown
gleontiev@gleontiev-laptop:~$ openssl dgst -sha1 Documents/Thesis-outline-ukr.markdown 
SHA1(Documents/Thesis-outline-ukr.markdown)= d36a0b4fb051e6928751eba152a5555768d1cb13

答案1

我相信 markdown 需要 Unicode。也许您可以尝试使用 recode 将编码从默认编码更改为 UTF8。


根据 Pandocmarkdown2pdf 手册

假定输入采用 UTF-8 字符编码。如果您的本地字符编码不是 UTF-8,则应通过 iconv 管道输入:

iconv -t utf-8 输入.txt | markdown2pdf

markdown2pdf 假定 unicode、array、fancyvrb、graphicx 和 ulem 包位于 latex 的搜索路径中。如果这些包未包含在您的 latex 设置中,可以从以下位置获取http://ctan.org

不可否认的是,尽管我间接使用 LaTeX,但我经常发现它的错误和警告信息难以理解和处理。因此,尽管上述方法看起来是一条有希望的途径,但它可能最终是一条死路。


另一种可能性是尝试使用 markdown 结合html文档而不是 Pandoc 的 markdown2pdf - 我不知道它是否能解决问题,但也许值得尝试。


我得到的校验和和你不一样

$ wget -O Cyrillic2.markdown.txt http://paste.ideaslabs.com/download/J58n5B6cGp
11:06:08 (20.53 KB/s) - `Cyrillic2.markdown.txt' saved [4078/4078]

$ sum Cyrillic2.markdown.txt
40224     4 Cyrillic2.markdown.txt

$ cksum Cyrillic2.markdown.txt
3250703884 4078 Cyrillic2.markdown.txt

$ openssl dgst -sha1 Cyrillic2.markdown.txt
SHA1(Cyrillic2.markdown.txt)= e1d6d92b5c7a3c8673ab5dff4bfe01628b17d77a

答案2

  1. 使用 pandoc 从 markdown 生成 TeX。
  2. 编辑 tex 文件。找到命令

    \usepackage[T1]{fontenc}
    

    并将其更改为

    \usepackage[T2A]{fontenc}
    
  3. 还添加以下命令:

    \usepackage[ukrainian]{babel}
    
  4. 使用 编译 tex 文件pdflatex

答案3

游戏有点晚了,下面是我解决问题的方法。

  • --latex-engine=xelatex到处使用默认的 UTF-8。
  • 使用具有所需字形的字体。

对我有用的命令行是

pandoc --latex-engine=xelatex -V mainfont:"Linux Libertine O" -V monofont="Ubuntu" -o out.pdf in.md

我还没有发现适合monofont支持固定宽度西里尔字母的方法。

相关内容