使用Pandoc处理中文文档时如何禁用行尾自动添加空格?
解决Pandoc转DOCX时中文句子出现多余空格的问题
这个问题我之前处理过好几次,确实挺闹心的——Vim为了排版好看加的自动换行,到了DOCX里就变成中文句子里莫名其妙的空格。下面给你两种方向的解决办法,按需选就行:
一、从Vim源头避免多余换行
既然问题是Vim的自动换行导致Pandoc误加空格,那我们可以让Vim对中文Markdown文件不做强制换行:
- 修改Vim配置(
.vimrc或.vim/init.vim),针对Markdown文件关闭自动换行:
解释一下:autocmd FileType markdown setlocal textwidth=0 formatoptions-=ttextwidth=0表示不设置自动换行的宽度,只有手动按回车才会换行formatoptions-=t去掉formatoptions里的t选项(原来的fo=+tMn里的t就是自动按textwidth换行)
- 如果还想保留列标记(
cc=80)只是不想自动换行,可以单独去掉t选项,保留cc=80:autocmd FileType markdown setlocal formatoptions-=t
这样编辑中文Markdown时,长句子不会被Vim拆成多行,Pandoc转换时自然不会加多余空格。
二、用Pandoc参数处理已有的换行文件
如果已经有一堆带硬换行的Markdown文件,不想改Vim配置,直接用Pandoc的参数就能解决:
- 使用
--wrap=none参数,让Pandoc忽略原文件中的硬换行,重新排版文本:
这个参数会让Pandoc把段落内的所有硬换行都当成不存在,直接把文本连贯起来,DOCX里就不会有多余空格了。pandoc input.md -o output.docx --wrap=none - 如果你用的是旧版本Pandoc(2.10之前),
--wrap=none对应的是--no-wrap参数,写法是:pandoc input.md -o output.docx --no-wrap
额外小技巧
如果是中英文混排的文档,Vim的自动换行可能还是会在英文部分有用,可以试试设置textwidth为更大的值(比如120),减少中文被拆行的概率;或者用vim-easy-align这类插件辅助排版,兼顾中英文的换行需求。
内容的提问来源于stack exchange,提问作者Lex
相关产品推荐
相关产品推荐

