Ok, depois de longas horas de luta com os problemas e cavando. Eu finalmente encontrei a causa raiz do problema.
A causa
O problema é que no test.md
, os textos que começam com barra invertida existem em vários lugares e devem ser considerados literais. Por exemplo,
* 一般现在时\过去时\将来时,simple present\past\future
* 现在(过去\将来)进行时,present(past\ future) continuous
* 现在(过去\将来)完成时,present(past\future) perfect
* 现在(过去\将来)完成进行时,present(past\future) perfect continuous
As barras invertidas no parágrafo acima servem apenas como separador para diferentes situações. É markdown válido. Mas infelizmente eles são processados como comandos por pandoc.
Solução
Use o seguinte comando:
pandoc -f markdown-raw_tex --pdf-engine=xelatex -V CJKmainfont=KaiTi test.md -o test.pdf
Ou distorça o texto começando com barra invertida usando backticks (mas isso nem sempre é desejado) ou apenas use duas barras invertidas.
Alguns pensaram
A mensagem de erro da Pandoc é enganosa, pois o problema não está relacionado à decodificação UTF-8. Eu não tenho idéia porque a mensagem de erro é assim.
Além disso, parece que as mensagens de erro para esse problema não são consistentes. Por exemplo, para o texto acima contendo barras invertidas. Se você compilar usando
pandoc -f markdown --pdf-engine=xelatex -V CJKmainfont=KaiTi test.md -o test.pdf
A mensagem de erro será algo como:
Error producing PDF.
! Undefined control sequence.
l.75 一般现在时\过去时
Em seguida, será muito mais fácil descobrir onde está o problema em vez de desenterrar problemas relacionados ao utf-8.
Follow-ups
Este é realmente um bug no xelatex. Pode produzir bytes utf-8 inválidos quando encontrar seqüências de controle inválidas. Mas pandoc apenas assume que o que recebe é uma sequência utf-8 válida. Daí o erro. Para explicações mais detalhadas, consulte este post .
update 2017.12.29
Com o lançamento do Pandoc 2.0.6 , esse comportamento é tratado de maneira mais adequada:
Allow lenient decoding of latex error logs, which are not always properly UTF8-encoded
Agora, é mais fácil depurar esse tipo de problema.