我在 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
- 使用 pandoc 从 markdown 生成 TeX。
编辑 tex 文件。找到命令
\usepackage[T1]{fontenc}
并将其更改为
\usepackage[T2A]{fontenc}
还添加以下命令:
\usepackage[ukrainian]{babel}
使用 编译 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
支持固定宽度西里尔字母的方法。