如何在AsciiDoc中结合弯引号与长破折号实现正确渲染?
解决AsciiDoc中断对话的弯引号+长破折号渲染问题
问题回顾
你在编写中断对话时,期望用弯引号包裹内容,同时以长破折号(—)结尾,但现有语法要么无法将--转成长破折号,要么会破坏弯引号的解析:
- 直接写:
"What are you --"→ 输出“What are you --”`(短破折号未转换) - 给
--加空格:"What are you --"→ 弯引号语法失效,原字符被输出 - 仅能通过实体转义:
"What are you —'"` → 可行但繁琐
推荐解决方案
方案1:全局字符替换(最省心)
在文档开头添加全局替换规则,让AsciiDoc自动将--转成长破折号,无需依赖空格:
:replacements: (--->—)
之后直接用弯引号语法编写对话:
"What are you --"
渲染后会自动得到:“What are you —”
方案2:直接输入原生特殊字符(最直观)
如果你的编辑器支持输入UTF-8特殊字符,直接手动输入弯引号(“”)和长破折号(—):
“What are you —”
这种方式完全不需要依赖AsciiDoc的语法转换,只要渲染环境支持UTF-8就能正常显示。
方案3:行内局部Passthrough(灵活控制)
用AsciiDoc的行内Passthrough标记+++包裹长破折号,既保留弯引号的解析,又强制输出长破折号:
"What are you +++—+++"
渲染后同样能得到目标效果,适合不需要全局替换的场景。
为什么原有方法失效?
AsciiDoc默认的长破折号转换规则是两侧带空格的--(即--)才会被转成—;而给结尾的--加空格后,行内代码块的边界被空格干扰,导致弯引号的语法解析失败,所以原字符被直接输出。
内容的提问来源于stack exchange,提问作者Jason Bullers
相关产品推荐
相关产品推荐

