简介这是一份面向社会科学、教育学等专业学生与科研人员的APA论文格式规范文档用于解决论文写作中文献引用、作者署名、参考文献编排等格式不统一的问题适合初次接触APA格式或需在投稿前逐条核对格式规范的写作者参考。压缩包内仅含1个docx文档大小约42KB轻量易取打开即可按需检索查阅。文档围绕文献引用展开区分直接引用与间接引用两种写法并依次说明单一作者、两位作者、三至五位作者、六位以上作者的不同标注规则对组织机构作者区分易混淆单位与广为人知单位给出首次全名加注缩写、后续使用缩写的处理方式此外还涉及未标明作者、署名无名氏、外文同姓氏作者等特殊情形的引用办法以及多笔文献并列时的排序与分隔符号、无年代与古典文献、翻译著作、个人通讯与网络电子资料的著录要求。目前已有551人学习下载可帮助读者快速定位规则要点减少格式返工。1. 把 APA 格式要求 docx 当成一份可执行规范来读投稿被退回来的理由经常不是内容而是参考文献里那句(Wasserstein, Zappula, Rosen, Gerstman, Rock, 1994)——第一次出现必须把五位作者全列第二次才能缩写成Wasserstein et al. (1994)。学校发的《APA论文格式要求.docx》看着像一份排版说明实际是一份带分支条件的规范作者人数、语种、是否重复出现、是否同一段落每一个变量都会改变输出形态。把这份文档当成需求规格书来读比当成格式说明书来读要省事得多。它的覆盖面比多数人想得宽。文内引用部分给了十几种场景包括团体作者、未标明作者、同姓作者、无年代古典文献、个人通讯记录参考文献部分给了十条英文排序标准和十类文献的字段模板从期刊、书籍、学位论文一路排到视听媒体和法令最后还有一节专讲表格的标题、内容、注记三段结构以及中文注记里那个容易被忽略的检验显著性标注。适合谁看正在写论文的研究生、要给学生改格式的助教以及手里有一堆稿件要做格式批处理的人。前两类人关心规则本身第三类人关心规则能不能落到脚本上——这份文档的规则密度很高恰好适合做成校验器。2. 文内引用的分支判定从作者数量到括号连接符的正则化文内引用是整份文档里分支最多的部分也是改起来最费手的地方。它的核心不是怎么写而是当前这句话属于哪一支。把分支判断清楚后面的书写动作都是机械的。2.1 两种引用形态与同段二次省略的边界文档把引用分成两种主要方法一种把作者名写进句子主干比如Razik1995的研究发现……另一种把作者和年代一起塞进括号比如……Razik, 1995。前者是叙述式后者是括号式。判断标准只看作者名是否落在括号外。接着有一条容易被忽略的规则同一段落中已经引用过的作者第二次出现时年代可以省略。原文举的例子是一段里先写Walker2000所描述的方法……后面直接写Walker 还发现……。这里的边界是同一段落跨段就必须重新给出年代。我见过有人把这条理解成同一篇文章内结果全文只标了一次年份那属于误用。中文文献的写法与英文平行只是年代换成民国纪年秦梦群民90或者秦梦群民90。中文用全角括号与全角逗号英文用半角——这条在混排文档里最容易出错因为输入法切换很容易漏。2.2 作者数量四档分支作者数量决定了列几个名字、用什么连接词。文档把这一块拆成四条原则落到操作层面就是一张四行表作者人数首次出现后续出现连接符1 人Porter2001同首次无2 人Wasserstein and Rosen1994同首次始终全列句内用and括号内用3–5 人全部姓氏列出末位前加首位作者 et al.同两人规则6 人及以上首位作者 et al.同首次始终只列首位同上参考文献中需列全中文对应的是与和等人X清山与林天佑民90、X清山等人民84。注意原则四给出的位置约束——文中引用用and与连接括弧内和参考文献表里用。这是一条纯粹的位置规则跟作者人数无关两个作者和五个作者都一样。还有一个隐藏点六人以上的文献参考文献表里必须把作者全部列出。文内缩写和表内全列是两套输出不能图省事两边都缩写。2.3 团体作者与无作者的替换规则团体作者分两类。容易混淆的单位每次都用全名不给缩写简单且广为人知的单位第一次在方括号里加注缩写形式第二次以后用缩写但参考文献表里一律写全名例如National Institute of Mental Health[NIMH]1999首次出现之后写NIMH1999。中文示例如行政院教育改革审议委员会[行政院教改会]民87。无标明作者的文章把篇名或章名当作作者文中用斜体粗体呈现放在括号内时改用双引号Educational Leadership1994对应(Educational Leadership, 1994)。署名为无名氏的直接用无名氏或Anonymous顶替作者位。外文作者姓氏相同时文中引用一律写全名加名字缩写来消歧比如R. D. Luce1995and G. E. Luce1988——注意这里 and 两侧都带缩写首字母只写姓氏读者没法区分。2.4 用正则做粗筛并人工确认规则清楚了就可以写一个粗筛脚本把正文里的引用形态全部捞出来按分支归类人工只需要看报告。常见做法是用两条正则分别匹配括号式和叙述式import re # 括号式(作者, 年代) —— 允许中英文括号、全角逗号、分号并列 PAREN_CITE re.compile( r[(](?Pbody[^()]{1,150}?)[,]\s* r(?Pyear1[6-9]\d{2}|20\d{2}|民\s?\d{1,3}|n\.d\.|印制中) r(?Ptail[^()]{0,40})[)] ) # 叙述式作者在括号外年代在括号内 NARRATIVE_CITE re.compile( r(?Pauthor[A-Z][A-Za-z.\- ]{1,60}|[\u4e00-\u9fa5]{2,6}) r[(](?Pyear1[6-9]\d{2}|20\d{2}|民\s?\d{1,3})[)] ) def scan(text: str): 返回两类引用的 (起始位置, 作者串, 年代) 三元组 hits [] for m in PAREN_CITE.finditer(text): hits.append((m.start(), m.group(body).strip(), m.group(year))) for m in NARRATIVE_CITE.finditer(text): hits.append((m.start(), m.group(author).strip(), m.group(year))) return sorted(hits)year这一支为什么要列这么多种形态因为文档里明确存在n.d.无日期、印制中、民国纪年三种非标准年份写法正则里漏掉任何一种这些条目就会从报告里消失反而变成看起来没问题的假阴性。tail分组负责兜住p. 125、chap. 8、第八章这类页码和章节标注它们同样需要人工核对是否指到了具体出处。跑完脚本先看统计不要急着改括号式命中的数量、叙述式命中的数量、et al.出现的次数。et al.次数明显偏高通常意味着有人把首次出现也缩写了括号式里出现and而不是则是位置规则被写反。3. 参考文献表的排序键构造与同年 a/b 标注实现参考文献表和文内引用是强耦合的引用过的必须出现在表里表里的每一条也必须被引用过而且两边的作者姓氏和年代要完全一致。文档把这句话放在参考文献部分的开头等于给了一个天然的校验条件——后面第五章会用到。3.1 十条规则收敛成一个排序键英文文献的排列顺序文档给了十条标准。把它们当成十条独立规则去记很累但收敛成一个排序键就清楚了规则要点落到排序键的哪一段姓氏字母序数字开头按读法比较21st → Twenty-first第 1 段同一作者按年代先后第 4 段一位作者永远排在多位作者之前第 2 段多位作者依次比较第二、第三作者姓氏第 3 段同作者同年按去冠词后的篇名字母序年代加 a、b、c第 5 段同姓不同名按名字字母序第 1 段后追加名字机关团体以全名比较主团体在前第 1 段用全名串Anonymous以 Anonymous 比较第 1 段无作者时以篇名/书名当作者第 1 段后设分析文献前加*并在表首说明单独标记不进排序键中文文献按作者姓名笔画排序这一条没法用字符串直接比较通常做法是维护一张笔画数映射表或者干脆把中文条目单独分组、手工确认顺序。3.2 同年 a/b 标注的生成同一作者、同一年、有多篇文献时要按去冠词后的篇名或书名字母序排列并在年代后面加a、b、c。文档给的例子是Razik, T. A., Lin, T. -Y. (1990a). Fundamental concepts…与(1990b). Human relations…。冠词的处理是这一条的关键排序时去掉A、An、The但显示时保留。也就是说排序键和展示文本是两套字符串不能共用一个变量。3.3 Python 实现与两个易错点ARTICLES (a, an, the) def strip_article(title: str) - str: 去掉篇名/书名开头的冠词仅用于排序不改变显示文本 parts title.split(maxsplit1) if parts and parts[0].lower() in ARTICLES: return parts[1] if len(parts) 1 else return title def build_key(entry: dict): authors entry[authors] # [{surname: Razik, given: T. A.}, ...] first authors[0][surname].lower() # 规则三一位作者排在多位作者之前用 0/1 做区分 solo 0 if len(authors) 1 else 1 # 规则四依次比较第二、第三作者姓氏 rest tuple(a[surname].lower() for a in authors[1:]) year entry[year] # n.d. 建议单独排到最前或最后全局统一 title strip_article(entry[title]).lower() return (first, solo, rest, year, title) def assign_suffix(entries: list) - list: 同作者同年加 a/b/c顺序已由 build_key 保证 entries.sort(keybuild_key) counter, last {}, None for e in entries: tag (e[authors][0][surname].lower(), e[year]) counter[tag] counter.get(tag, 0) 1 e[suffix] chr(96 counter[tag]) if counter[tag] 1 else return entriesbuild_key用元组比较替代一堆if这是 Python 里最省事的做法元组从左到右逐项比较天然实现了先姓氏、再是否为单作者、再第二三作者、再年代、再篇名的优先级。solo字段是规则三的落点没有它Razik, T. A. (1991)会被排到Razik, T. A., Lin, T. -Y. (1995)后面因为空元组比非空元组小——这个方向恰好是反的。assign_suffix里有个容易踩的坑counter[tag] 1才加后缀但如果同一作者同年只有一篇不加后缀是对的有两篇以上第一篇也要带a。上面这段代码第一轮就计数所以第一篇会拿到a符合要求。另外n.d.和印制中这类没有年代的条目最好在排序前统一替换成一个哨兵值否则字符串比较会把它们插到奇怪的中间位置。4. 用 python-docx 把条目模板落到样式、悬挂缩进与斜体上排序对了不等于格式对了。参考文献表的排版有三处硬性要求悬挂缩进、期刊名与书名的斜体、以及十类文献各自的字段顺序。4.1 十类文献的字段模板文档把文献分成十类每一类的字段顺序都不一样。把常用的几类抽出来就是下面这张表类别字段顺序示例中文期刊作者年代. 文章名. 期刊名期别页别.沈姗姗民85. 教育选择与控制理念的另类思考. 教育资料与研究414-15.英文期刊Author, A. A., Author, B. B. (1999). Title of article.Title of Periodical, xx(xx), xxx-xxx.Powers, J. M., Cookson, P. W. Jr. (1999). The politics of school choice research.Educational Policy, 13(1), 104-122.中文书籍作者年代. 书名. 出版地出版商.林文达民81. 教育行政学. 台北市三民.英文书籍Author, A. A. (1993).Book title. Location: Publisher.Barnard, C. I. (1971).The functions of the executive. Cambridge, MA: Harvard University Press.未出版学位论文作者年代. 论文名. ○○大学○○研究所硕士/博士论文未出版地点.柯正峰民88. 我国迈向学习社会政策制订之研究. 国立○○师范大学社会教育学系博士论文未出版台北市.视听媒体制作人制作人导演导演年代. 影片名【影片】.来源及地址Scorsese, M. (Producer), Lonergan, K. (Writer/Director). (2000). You can count on me [Motion picture]. United States: Paramount Picture.六人以上的期刊条目还多一个et al.的位置问题文档要求前六位作者全部列出第六位之后加, et al.。这跟文内引用的 只列首位 et al. 是两套规则写脚本时要分函数处理。4.2 悬挂缩进与斜体的写入python-docx 里没有现成的悬挂缩进属性需要用左缩进加负的首行缩进来拼from docx import Document from docx.shared import Pt, Inches from docx.enum.text import WD_ALIGN_PARAGRAPH def add_reference(doc, base, italic_part, tail): base正体前缀, italic_part斜体片段(期刊名/书名), tail正体后缀 p doc.add_paragraph() # 悬挂缩进整体左缩进 0.5 英寸首行再往左拉 0.5 英寸 p.paragraph_format.left_indent Inches(0.5) p.paragraph_format.first_line_indent Inches(-0.5) p.paragraph_format.space_after Pt(0) p.paragraph_format.line_spacing 2.0 # 双倍行距 p.alignment WD_ALIGN_PARAGRAPH.LEFT if base: p.add_run(base) if italic_part: p.add_run(italic_part).italic True # 期刊名、书名、卷号走斜体 if tail: p.add_run(tail) return p三个参数对应三类文本片段之所以拆开是因为斜体是run级别的属性整段一起设斜体会把作者名也带进去。Inches(-0.5)配合left_indentInches(0.5)是悬挂缩进的通用写法换成磅值Pt(21.6)也行只要两处绝对值相等。line_spacing 2.0是学位论文的惯例投稿期刊通常要求双倍行距加悬挂缩进同时满足这一行别省。4.3 表注与资料来源的落位表格部分文档给了三块结构标题在表上方表 1-1 标题或Table 1. Title内容是单元格注记在表下方靠左顶格。中文注记的书写顺序是第一项写总表注解第二项另起一行写特定行或列的注解如n1 25. n2 32.第三项另起一行写显著性注解*p .05. **p .01. ***p .001.。显著性标注有个细节默认是双侧检定如果同一张表里双侧和单侧混用用*注双侧、注单侧写成*p .05双侧和p .01单侧。英文表格的对应写法是第一项写Note.其余顺序一致。资料来源的写法按来源类型分两种来自期刊的写成资料来源文章名称作者年代期刊名称期别页别.来自书籍的写成资料来源书名页别作者年代出版地出版商.。英文表格对应Note. From Title of Article, by A. A. Author, 1995, Title of Journal, xx(xx), p. xx.。还有一条影响排版的规则APA 面向期刊投稿时表格内不画纵向直线但学位论文为了美观可以画。这是少数明确给出可以破例的地方做模板时最好留一个开关参数而不是写死。5. 双向一致性校验正文引用与参考文献的对账技巧规则落到脚本之后最后一个动作是把两边对起来查。文档在参考文献部分开头就写明了约束引用过的文献必须出现在参考文献里参考文献里的每一笔也必须被引用过两边的作者姓氏和年代必须完全一致。这句话可以直接翻译成一次集合比较。5.1 归一化与集合比较import re def norm(name: str) - str: 姓氏归一化去空格、转小写、去掉 、and、与、等人、et al. name re.sub(r(?i)\b(and|et al\.?)\b||与|等人, , name) return re.sub(r\s, , name).lower() def key_of(author_field: str, year: str) - str: 取首位作者的姓氏 年代作为对账主键 first re.split(r[,;], author_field)[0] return f{norm(first)}|{year.strip()} cited {key_of(a, y) for _, a, y in scan(paper_text)} listed {key_of(e[author_field], e[year]) for e in reference_entries} print(只在正文出现, cited - listed) print(只在文献表出现, listed - cited)norm把、and、与、等人、et al.全部清掉是因为同一条文献在正文里可能缩写成Wasserstein et al.在表里却是五位作者全列不做归一化就永远对不上。key_of只取首位作者和年代是为了兼容三到五人文献的两种形态。5.2 白名单与例外清单对账结果里一定会有假差异需要提前拉白名单否则每次都要人工过一遍。文档明确列了三类不进参考文献的引用个人通讯记录书信、日记、笔记、电子通讯、古典文献、以及引用时只说明章节的经典文本。个人通讯在正文中要注明类别和详细日期比如T. A. Razik, Diary, May 1, 1993这类条目在差异报告里应该被直接过滤。另外三类需要单独标注而不是简单过滤翻译著作同时注原出版年与译本出版年写成Laplace, 1814/1951、无年代文献用n.d.占位、以及公元前的古典文献。前两类在对账时把年代字段单独归一化成1814/1951这样的整体比较第三类直接跳过。后设分析的文献还有一条独立标记不必另附附录逐条列举但要融入参考文献表并在条目前加*同时在表首说明加星号者为后设分析相关文献。做校验脚本时把这条规则做成一个正则检查——参考文献表第一条是否为说明句、带*的条目是否都出现在该表内。最后值得单独跑一次的是排版残留检查遍历doc.paragraphs凡是落在参考文献区间的段落检查paragraph_format.left_indent与paragraph_format.first_line_indent的绝对值是否相等。悬挂缩进被人手动拖过之后两处数值往往不再相等肉眼几乎看不出来但打印稿上一眼就能看出缩进量不齐。本文还有配套的精品资源点击获取