如何在Pandoc Markdown中为PDF/EPUB格式化伪参考文献段落?
在Pandoc中实现跨PDF/EPUB的伪参考文献悬挂缩进
要实现文本中间带悬挂缩进的伪参考文献段落(普通段落模仿参考文献格式),同时适配PDF和EPUB导出,推荐以下两种通用方案:
方案一:Fenced Div + Lua过滤器 + 样式定义
这种方法无需在Markdown中嵌入格式代码,更适合批量处理文档。
1. 标记伪参考文献段落
用Pandoc的fenced div包裹需要悬挂缩进的内容,自定义类名(如hanging-indent):
Oblique delenit salutatus eos id, an legimus maiorum sed, sea omittantur necessitatibus et. See the following: ::: hanging-indent Auditore, Ezio. (1635). Mediocrem rationibus neglegentur no sed. Florence, Italy: Sea erant ceteros imperdiet ex. ::: Mea cu habeo mentitum oporteat, pro ut commodo eloquentiam instructior.
2. 定义样式规则
- EPUB/HTML 样式:创建
custom.css文件,添加悬挂缩进规则:
.hanging-indent { text-indent: -1.5em; /* 负缩进实现悬挂效果 */ padding-left: 1.5em; /* 左侧留白抵消负缩进 */ }
- PDF/LaTeX 样式:创建
custom.tex文件,定义LaTeX悬挂缩进命令:
\usepackage{parskip} \newcommand{\hangpar}{% \par% \setlength{\hangindent}{1.5em}% 悬挂缩进宽度 \setlength{\hangafter}{1}% 首行不缩进,后续行缩进 }
3. 编写Lua过滤器转换格式
创建hang-indent.lua脚本,让Pandoc把hanging-indent类的div转换成LaTeX命令:
function Div(el) if el.classes[1] == "hanging-indent" then local content = pandoc.utils.stringify(el.content) return pandoc.RawBlock("latex", "\\hangpar " .. content) end end
4. 编译命令
- 生成EPUB:
pandoc input.md --css=custom.css -o output.epub
- 生成PDF:
pandoc input.md --include-in-header=custom.tex --lua-filter=hang-indent.lua -o output.pdf
方案二:直接嵌入条件Raw块
如果不想写Lua脚本,可针对不同输出格式直接嵌入Raw代码,适合简单场景:
Oblique delenit salutatus eos id, an legimus maiorum sed, sea omittantur necessitatibus et. See the following: ```{=html} <div class="hanging-indent"> Auditore, Ezio. (1635). Mediocrem rationibus neglegentur no sed. Florence, Italy: Sea erant ceteros imperdiet ex. </div>
\hangpar Auditore, Ezio. (1635). Mediocrem rationibus neglegentur no sed. Florence, Italy: Sea erant ceteros imperdiet ex.
Mea cu habeo mentitum oporteat, pro ut commodo eloquentiam instructior.
编译时同样需要引入`custom.css`和`custom.tex`文件,命令同方案一。 内容的提问来源于stack exchange,提问作者user116789
相关产品推荐
相关产品推荐

