如何自动将句号移至引号内?csquotes搭配自定义命令无法生效
问题根源
你当前的\qq定义阻断了csquotes的autopunct功能扫描后续标点的逻辑:\newcommand{\qq}[1]{\textquote{#1}}相当于把你传入的内容完全包裹在\textquote的参数内,跟在\qq{}后面的句号、冒号等标点不在\textquote的扫描范围里,自然不会自动移入引号内部。
最优解决方案
无需修改任何正文内容,也不需要替换csquotes包,仅需调整一行\qq的定义即可解决问题,完全不会出现间距异常:
- 把原有定义
\newcommand{\qq}[1]{\textquote{#1}}替换为\newcommand{\qq}{\textquote} - 如果需要将冒号也纳入自动移入引号的范围,可在加载
csquotes后添加配置:\autopunctuation{.,:;!?},括号内可自定义所有需要自动调整位置的标点。
修改后的完整示例代码如下:
\documentclass[12pt, letter, american]{article} \usepackage[american]{babel} \usepackage[autopunct,style=american]{csquotes} % 调整后的\qq定义 \newcommand{\qq}{\textquote} % 可选:添加冒号到自动移入标点列表 \autopunctuation{.,:;!?} \begin{document} This is an \qq{example}. % 冒号测试 This is an \qq{example}: \end{document}
调整后你的示例内容This is an \qq{example}.会正常输出This is an “example.”,完全符合美式排版要求,所有排版逻辑均为csquotes原生实现,不存在兼容性问题。
关于替代包
无需替换csquotes,它是目前LaTeX生态中最成熟、兼容性最好的引号处理包,适配各类babel语言设置和文档类。如果确实需要替代方案,可选quotmark包,但没有必要额外引入新包增加兼容性风险,上述方案已经可以完美解决你的需求。
内容的提问来源于stack exchange,提问作者Eric '3ToedSloth'
相关产品推荐
相关产品推荐

