使用Pandoc将Markdown转HTML时,实现行内部分文本右对齐的方法
实现Markdown转HTML时单行内文本左右对齐的几种方案
针对你用Pandoc把Markdown转HTML时,需要单行内部分文本右对齐的需求,这里给几个实用的解决办法:
方案1:直接内嵌HTML结构
Markdown支持内嵌HTML,你可以用<div>配合CSS布局实现对齐,写法如下:
<div style="display: flex; justify-content: space-between; align-items: center;">left text right text</div>
Pandoc转HTML后,flex布局的space-between属性会自动让两端文本分别靠向左右边缘,刚好满足你的需求。如果需要兼容旧环境,也可以用浮动写法:
<div style="width: 100%;">left text <span style="float: right;">right text</span></div>
方案2:用Lua过滤器实现原生Markdown标记
如果你不想写HTML,想保持Markdown的清爽,可以用Pandoc的Lua过滤器识别自定义标记(比如你提到的->),自动转换成对齐结构。
先创建一个名为right-align.lua的过滤器文件,内容如下:
-- 识别段落中的"->"标记,替换为flex对齐结构 function Para(para) local content = para.content local split_idx = nil -- 定位"->"的位置 for i, elem in ipairs(content) do if elem.t == "Str" and elem.text == "->" then split_idx = i break end end if split_idx then -- 拆分左右文本并生成flex布局 local left = content:sub(1, split_idx-1) local right = content:sub(split_idx+1) return pandoc.Div( {pandoc.Span(left), pandoc.Span(right, pandoc.Attr("", {}, {style="margin-left: auto;"})}, pandoc.Attr("", {}, {style="display: flex; align-items: center;"}) ) end return para end
然后用Pandoc调用过滤器转换:
pandoc --lua-filter=right-align.lua input.md -o output.html
这样你在Markdown里只需要写:
left text -> right text
过滤器会自动把它转换成两端对齐的HTML结构,全程不用写HTML。
方案3:sed预处理文本
如果你习惯用shell工具预处理,也可以用sed把自定义标记替换成HTML,再传给Pandoc。比如用->作为分隔符,执行以下命令:
sed 's/\(.*\) -> \(.*\)/<div style="display:flex;justify-content:space-between;align-items:center;">\1 \2<\/div>/' input.md | pandoc -o output.html
这个命令会把所有xxx -> yyy格式的行替换成flex布局的div,再交给Pandoc生成最终HTML。
内容的提问来源于stack exchange,提问作者Bastian Venthur
相关产品推荐
相关产品推荐

