利用Word域代码实现将形如“图一-1”的题注修改为“图1-1”
憧憬少
欢迎访问我的个人博客:yxchangingself.xyz
42 人赞同了该文章
目录收起
参考链接
什么是域代码
解决方案
优化
示例
本文首发于憧憬少的个人博客。
问题描述
在用word编写毕业论文时,遇到了这样一个问题:通过多级列表的设置将一级标题设置为汉字数字之后,若需要设置包含章节号的题注(形如“图1-1”)时,则会变成“图一-1”的形式。本篇文章解决的就是将形如“图一-1”的题注通过设置域代码,在不修改一级标题格式的情况下改为“图1-1”。
参考链接
word里面,如何在章节编号为第一章、第二章这种情况,实现图根据章节编号并且形式为图1.1、图2.1?
Word 自动更改题注章节编号格式“图一.1”为“图1.1”
[word技巧]把标题、图表题注编号由“一.1”改为"1.1"
一篇文章教会你使用word域代码(seq field code ) :这个方法也是可以的,不过本文没有采用。
设置域显示格式的开关-微软官方
word将“图一.x”修改为“图1.x”-Bilibili
域代码:Quote 域-微软官方
STYLEREF域代码官方文档链接
什么是域代码
使用组合键 Alt+F9 ,可以显示或隐藏文档中所有域代码 :
从上图中可以看到,原本的“图 一-1”已经变成了“图 { STYLEREF 1 \s }-{SEQ 图 * ARABIC \s 1}”,如果你此时直接复制它们,会发现粘贴出来的仍然是“图 一-1”,而将光标放在花括号中,则会将花括号括住的内容选中成为一个整体。其中花括号括住的部分就是“域代码” 。
你使用“添加题注”的对话框为图片添加题注时,插入的实际上就是这些“域代码”,你使用 Ctrl+F9组合键(会生成域代码的花括号,手动输入花括号是不行的)插入题注效果是一样的。
在这里 {STYLEREF 1 \s} 代表了章节号,也就是汉字数字“一”和“二”, {SEQ 图 \* ARABIC \s 1}代表了图的题注编号。
其中 STYLEREF 和SEQ 是“域”的名字,而后面的内容则是“域”的参数与“格式开关”(即域的格式选项)。
{STYLEREF 1 \s} 代表“插入具有样式名为‘1’的文本,并在指定标题级别下面重新开始( \s,此处未指定标题级别)”。
{SEQ 图 \* ARABIC \s 1}代表“插入名为'图'的序列的下一个编号,将结果显示为阿拉伯基数( \* ARABIC),并在一级标题下面重新开始编号( \s,此处标题级别为1,即若是到了下一个一级标题下,则会重新从1开始编号)”。
得知了word题注是用“域代码”实现的事实后,现在我们要做的事情就是将{STYLEREF 1 \s}的输出结果从汉字数字转变为阿拉伯数字,尝试将\* ARABIC开关加入其中,似乎并没有效果。
我在网上搜索到了另一个解决方案,利用迂回的方式将其转化,见:[word技巧]把标题、图表题注编号由“一.1”改为"1.1"
解决方案
将{STYLEREF 1 \s}修改为 { QUOTE "一九一一年一月{ STYLEREF 1 \s }日" \@"D" }就可以了,注意花括号仍然得是使用 Ctrl+F9组合键生成的花括号。
我找到的文章并未说明其原理,但了解了域代码相关知识后,也不难理解原理。
首先找到 QUOTE域的相关说明:域代码:Quote 域-微软官方
{ QUOTE "LiteralText" }
"LiteralText":插入的文本,必须加引号。它可以包含除 AutoNum、AutoNumLgl、AutoNumOut 或 Symbol 以外的所有其他域。
也就是说,QUOTE "一九一一年一月{ STYLEREF 1 \s }日" 这一部分是将“一九一一年一月{ STYLEREF 1 \s }日”插入到域代码所在位置,如果是第一章,那么最终结果就是一九一一年一月一日。
看到这里,也许你已经猜到后面那个\@"D"开关是在干什么了:
设置域结果格式-微软官方
日期-时间格式开关 (\ @) 指定如何显示日期或时间。
例如, switch \ @ "dddd, mmmm d, yyyy" 字段{ DATE \ @ "dddd, MMMM d, yyyy" }显示 "星期五, 2019 年11月23日"。结合以下日期和时间说明: day (d)、month (M) 和 year (y);小时 (h) 和分钟 (m)-生成日期时间格式。你还可以包含文本、标点和空格。
字母
d 显示月份中的日期或一个星期中的某一天。 字母
d 可以大写或小写。此格式项目将某个星期或月份的某一天显示为数字;对于单位数日子,数字前面不加 0(零)。 例如,某月的第 6 天显示为
6 。
所以该开关的意思是,将最终结果中的“天”给显示出来,而我们前面的内容得到的是一九一一年一月一日,那么输出结果就是 1,这样就通过日期转换将汉字数字转换为阿拉伯数字了。
这个日期无关紧要,只要格式是中文日期即可,例如我改为 {QUOTE "二零二一年四月{ STYLEREF 1 \s }日" \@"D"}也没有关系。
之后再使用组合键 Alt+F9 ,就可以隐藏域代码,只显示域代码的结果了。
优化
虽然问题解决了,但是每次都要输入这样的域代码非常费劲。我在B站找到了一个视频,up主的解决方案很好:word将“图一.x”修改为“图1.x”-Bilibili。
他使用了word的另一个好用的功能——构建基块。
选中刚刚写好的题注
使用组合键 Alt+F3 ,会弹出一个名为“新建构建基块”的对话框,修改构建基块的名称。例如修改为“图注”。
点击“确定”保存
之后如果想要插入这样的题注,那么直接输入该构建基块的名称(此处为“图注”二字),word就会在你输入的地方显示一个提示“按Enter插入”,此时按下Enter键,就可以插入这一个构建基块了。
示例
注意得用多级列表,如图。
实现上述效果的操作步骤是:
输入各章标题文本(在此图中是“第一章”、“第二章”等)
将各章标题设置对应的标题样式(此处设置为标题一样式)
点击“多级列表”图标按钮,自己定义汉字标题(我是之前就定义好了,这部分内容可以自行搜索资料,我之前是在知乎找到的资料)
插入图片,按照文章说的方法插入图注。
CSDN-Ada助手: 推荐 Python入门 技能树:https://edu.csdn.net/skill/python?utm_source=AI_act_python
2401_85728667: ’‘{STYLEREF 1 \s} 代表“插入具有样式名为‘1’的文本,并在指定标题级别下面重新开始( \s,此处未指定标题级别)”。 这句话理解不对,\s 在 styleref 中跟 \n是同一种作用,指的是显示标题编号。 https://wordmvp.com/FAQs/TblsFldsFms/AppendixCaptions.htm
CSDN-Ada助手: 恭喜你这篇博客进入【CSDN每天值得看】榜单,全部的排名请看 https://bbs.csdn.net/topics/615253013。
Trying everything: 写的太好了