You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自动将句号移至引号内?csquotes搭配自定义命令无法生效

问题根源

你当前的\qq定义阻断了csquotes的autopunct功能扫描后续标点的逻辑:\newcommand{\qq}[1]{\textquote{#1}}相当于把你传入的内容完全包裹在\textquote的参数内,跟在\qq{}后面的句号、冒号等标点不在\textquote的扫描范围里,自然不会自动移入引号内部。

最优解决方案

无需修改任何正文内容,也不需要替换csquotes包,仅需调整一行\qq的定义即可解决问题,完全不会出现间距异常:

  1. 把原有定义\newcommand{\qq}[1]{\textquote{#1}}替换为\newcommand{\qq}{\textquote}
  2. 如果需要将冒号也纳入自动移入引号的范围,可在加载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'

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 15:45:08