latex中英文混排剧本需用ctexart类统一中文环境,禁用手动缩进,用\charactername和\role命令结构化角色,csquotes+polyglossia自动处理引号,\stage命令配合\textsc与\lowercase控制舞台提示。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

在LaTeX中编写中英文混排剧本时,常出现台词缩进不一致、角色名字体错乱、中英文标点混用导致间距异常等问题,直接手动调整每个段落会破坏结构语义且无法全局统一。
用ctexart文档类打下统一基础
第一步:将\documentclass{article}改为\documentclass[UTF8]{ctexart}。这一步强制启用中文环境感知,自动处理汉字与拉丁字母的字宽差异、标点悬挂逻辑和段首缩进规则。
第二步:删除所有手动插入的\quad、\enspace或\hspace{}来对齐角色名——ctexart已内置\charactername命令用于标准角色标识,后续只需调用即可。
第三步:在导言区添加\usepackage{setspace}\setstretch{1.3}。剧本行距必须宽松,否则中文字号+英文字母混排时视觉拥挤,1.2以下行距会让中文顿号、逗号与英文逗号堆叠成黑块。
角色名与台词的结构化标记
方法一:用\section*包裹角色名,后接\vspace{-1em}紧贴台词
\section*{李四(低声)}\vspace{-1em}<br>
“Wait—what did you just say?”
这适合单人独白场景,但注意
\section*会干扰目录生成,若需生成人物索引则不可用。
方法二:定义专用命令\newcommand{\role}[1]{\textbf{#1}\quad\ignorespaces}
然后正文写作:\role{王五(转身)}“I’m not joking.”
【关键】必须带\ignorespaces,否则换行后空格会被保留,导致台词首字缩进异常。
中英文引号与标点的自动识别
直接输入全角中文引号“”和半角英文引号""必然出错——LaTeX无法判断上下文语言。正确做法是加载csquotes宏包并配合babel或polyglossia:
\usepackage[autostyle=true]{csquotes}<br>
\usepackage{polyglossia}<br>
\setmainlanguage{chinese}<br>
\setotherlanguage{english}
之后所有引用统一用\enquote{内容}包裹。中英文混排时,\enquote{Hello,你好!}会自动选用中文引号包裹整段,而\enquote{He said “no”}则在外层用中文引号、内层嵌套英文引号,无需人工干预。
注意:若未加载polyglossia而只用csquotes,\enquote会始终输出英文引号,这是最常被忽略的编译前提。
舞台提示的字体与间距控制
舞台提示(如「灯光渐暗」「他猛地站起」)需与台词明显区分。用\textit{}不够可靠——斜体在中文字体下可能不生效。应改用\textsc{}(小型大写字母),并为中文适配:
\newcommand{\stage}[1]{\textsc{\lowercase{#1}}\hspace{0.5em}}
然后写作:\stage{灯光渐暗}男主角缓缓摘下眼镜。
这里\lowercase是关键:它把中文字符转为小写形态(实际无变化),但触发了xeCJK对小型大写模式的字体回退机制,确保中文字体不崩溃;\hspace{0.5em}强制提示与后续台词保持固定间隙,避免因中英文字符宽度不同导致粘连。











