应使用latex结构化语义管理地点层级:定义\location命令统一格式,用\locationtree实现多级目录,正则或lualatex批量标准化,再通过\locationref支持编号与交叉引用。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你在Overleaf里写《城市空间演化研究》这类论文时,场景标题常出现“北京市→海淀区→中关村街道→鼎好大厦B座3层东侧办公区”这种嵌套过深、层级混杂的写法,LaTeX编译后目录生成错乱、交叉引用失效、PDF书签折叠异常。问题根源不是地点本身复杂,而是你把地理信息当作文本堆砌,没用LaTeX的结构化语义去标记层级关系。
用自定义命令统一管理地点层级
第一步:在导言区(\begin{document}之前)添加新命令:\newcommand{\location}[3]{\textbf{#1}(#2 · #3)}。其中#1是核心地点名,#2是行政层级缩写,#3是功能属性标签。
第二步:在正文中调用该命令,例如:\location{鼎好大厦B座3层东侧办公区}{BJ-HD-ZGC}{商用办公}。编译后显示为【鼎好大厦B座3层东侧办公区】(BJ-HD-ZGC · 商用办公),PDF书签自动提取第一参数作为主键。
第三步:若需生成多级目录项,改用\locationtree宏包——先在导言区加载\usepackage{titlesec}和\usepackage{etoolbox},再定义\newcommand{\locationtree}[4]{\section*{#1}\addcontentsline{toc}{section}{#2}\label{loc:#3}#4},这样既能控制视觉样式,又确保目录和引用可追踪。
从原始文本中批量提取并标准化地点
方法一:用正则表达式预处理。将“北京市海淀区中关村街道鼎好大厦B座3层东侧办公区”替换为\location{鼎好大厦B座3层东侧办公区}{BJ-HD-ZGC}{商用办公}。关键匹配模式为:^([\u4e00-\u9fa5]+?市)([\u4e00-\u9fa5]+?区)([\u4e00-\u9fa5]+?街道)(.+)$,捕获组即为核心地点名。
方法二:交给LuaLaTeX自动解析。在导言区插入Lua代码块,定义parse_location函数,识别“省-市-区-街道-建筑-楼层-方位”七级结构,缺失层级自动补空字符串,输出标准化命令。这一步必须启用\directlua且编译器选XeLaTeX或LuaLaTeX。
【注意:若原文含英文地名如“Haidian District, Beijing”,必须先统一转为中文再执行正则,否则捕获失败】
让地点标题参与章节编号与交叉引用
在导言区加入\newcounter{locationcnt}和\renewcommand{\thelocationcnt}{\thesection.\arabic{locationcnt}},再将\location命令升级为\newcommand{\locationref}[3]{\refstepcounter{locationcnt}\textbf{#1}(#2 · #3)\label{loc:#3}}。这样每次调用都会生成唯一编号,正文可用\ref{loc:ZGC-B3-East}精准引用。
这一步操作起来很简单,直接把升级后的命令粘贴进导言区即可生效。但要注意:所有\locationref必须放在\section或更高级别命令之后,否则编号会继承上一节序号而非清零重计。











