% ===================================================================== % PRISM Book — Pandoc/XeLaTeX 模板 % 适配:macOS + TinyTeX + ctex + xeCJK,可独立 xelatex 编译 % ===================================================================== \documentclass[11pt,a4paper,oneside,openany]{ctexbook} % ── 几何 / 字体 / 中文 ──────────────────────────────────────────────── \usepackage[a4paper,margin=2.4cm,headheight=24pt,headsep=0.5cm,footskip=1.2cm]{geometry} \usepackage{amssymb} % 提供 \boxtimes, \checkmark 等任务列表符号 \usepackage{amsmath} \usepackage{xeCJK} \setCJKmainfont[BoldFont={STHeiti},ItalicFont={STKaiti}]{STSong} \setCJKsansfont{STHeiti} \setCJKmonofont{STHeiti} \setmainfont{Helvetica Neue} \setsansfont{Helvetica Neue} \setmonofont{Menlo}[Scale=0.85] \linespread{1.20} % 让 xelatex 允许在 CJK 字符之间断行(关键!); % 否则一行长中文(常见于表格单元、长描述)即使在 p{w} 列里也不会自动换行, % 导致 Overfull \hbox 大量溢出。 \XeTeXlinebreaklocale "zh" \XeTeXlinebreakskip = 0pt plus 1pt minus 0.1pt % URL 也允许任意位置断开,避免长链接溢出 \usepackage{xurl} % sloppy 模式:允许 inter-word 间距稍微变化以避免溢出 \sloppy \emergencystretch=3em % 改用 hyphenat:允许在所有字符之间断行,主要为长下划线文件名/URL/路径。 % 比 seqsplit 安全 — 它能在 \section / \texttt 中正常工作。 \usepackage[htt]{hyphenat} % 对 etoolbox 提供的 \pretocmd 用 \texttt 包裹时启用低惩罚断字 % (\texttt 内部已是 \ttfamily,hyphenat 的 htt 选项让 ttfamily 也能断字) % ── 颜色 / 框 / 代码 ────────────────────────────────────────────────── \usepackage{xcolor} \definecolor{PrismRed}{HTML}{E63946} \definecolor{PrismOrange}{HTML}{F77F00} \definecolor{PrismYellow}{HTML}{FCBF49} \definecolor{PrismTeal}{HTML}{2A9D8F} \definecolor{PrismBlue}{HTML}{1D7AB8} \definecolor{PrismPurple}{HTML}{5A189A} \definecolor{InkDark}{HTML}{0E1116} \definecolor{InkMuted}{HTML}{4A5560} \definecolor{BoxBG}{HTML}{F4F2EB} \definecolor{CodeBG}{HTML}{F6F7F9} \definecolor{CodeBorder}{HTML}{D7DBE0} \definecolor{Accent}{HTML}{1D7AB8} \definecolor{GoldRule}{HTML}{C9A227} \usepackage[most]{tcolorbox} \tcbset{ enhanced, breakable, boxrule=0pt, arc=2pt, colback=BoxBG, colframe=Accent, fonttitle=\bfseries, before skip=4pt, after skip=4pt, left=8pt, right=8pt, top=4pt, bottom=4pt, beforeafter skip balanced } \usepackage{listings} \lstdefinestyle{prism}{ basicstyle=\ttfamily\footnotesize, backgroundcolor=\color{CodeBG}, frame=single, rulecolor=\color{CodeBorder}, framesep=4pt, framerule=0.4pt, xleftmargin=8pt, xrightmargin=8pt, showstringspaces=false, breaklines=true, breakatwhitespace=false, keywordstyle=\color{PrismPurple}\bfseries, commentstyle=\color{InkMuted}\itshape, stringstyle=\color{PrismTeal}, numberstyle=\tiny\color{InkMuted}, numbers=none, upquote=true, columns=flexible, literate= {á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1 {→}{{$\rightarrow$}}1 {←}{{$\leftarrow$}}1 {≥}{{$\geq$}}1 {≤}{{$\leq$}}1 {±}{{$\pm$}}1 {≈}{{$\approx$}}1 {×}{{$\times$}}1 {⋯}{{$\cdots$}}1 {·}{{·}}1 {…}{{\ldots}}1 {⌶}{{$\Box$}}1 } \lstset{style=prism} % pandoc 用 fancyvrb 转 verbatim;用 fvextra 扩展自动换行能力,避免长注释/长字符串超出页宽 \usepackage{fvextra} \DefineVerbatimEnvironment{Verbatim}{Verbatim}{% fontsize=\footnotesize,% breaklines=true,% breakanywhere=true,% breaksymbolleft={},% breaksymbolright={},% } % 用 tcolorbox 来包代码块,既能套色又能正确处理换页 \definecolor{CodeBoxBG}{HTML}{F6F7F9} \definecolor{CodeBoxRule}{HTML}{D7DBE0} \makeatletter \@ifundefined{Shaded}{% \newtcolorbox{ShadedBox}{ enhanced, breakable, colback=CodeBoxBG, colframe=CodeBoxRule, boxrule=0.4pt, arc=2pt, left=6pt, right=6pt, top=4pt, bottom=4pt, before skip=4pt, after skip=4pt } \newenvironment{Shaded}{\begin{ShadedBox}}{\end{ShadedBox}}% }{} \makeatother % pandoc syntax-highlight 需要的环境与命令 \usepackage{upquote} % pandoc 用法:\begin{Shaded}\begin{Highlighting}[options]...\end{Highlighting}\end{Shaded} % 所以 Highlighting 内部 只做 Verbatim,背景已由外层 Shaded(=ShadedBox tcolorbox)负责 \makeatletter \@ifundefined{Highlighting}{% \newenvironment{Highlighting}[1][]{% \VerbatimEnvironment% \begin{Verbatim}[fontsize=\footnotesize,commandchars=\\\{\},#1]% }{% \end{Verbatim}% }% }{} \makeatother % ── 表格 / 列表 ──────────────────────────────────────────────────────── \usepackage{booktabs} \usepackage{longtable} \usepackage{array} \usepackage{tabularx} \usepackage{makecell} \usepackage{enumitem} \setlist{nosep,leftmargin=*} % ── 图 / 链接 ────────────────────────────────────────────────────────── \usepackage{graphicx} \usepackage{float} \usepackage[unicode=true,colorlinks=true, linkcolor=Accent, citecolor=Accent, urlcolor=Accent, pdftitle={PRISM v__PRISM_VERSION__ — Prior-Registered Integrated Spatial Memory}, pdfauthor={Project Planning Team}, pdfsubject={PRISM v__PRISM_VERSION__, built __PRISM_BUILD_DATE__}, pdfkeywords={PRISM, RoomPlan, ZED 2i, SLAM, Spatial Memory, Robot, World Model}]{hyperref} % ── 页眉页脚 ────────────────────────────────────────────────────────── \usepackage{fancyhdr} \pagestyle{fancy} \fancyhf{} \fancyhead[L]{\small\textsf{\textcolor{InkMuted}{PRISM \textbullet{} 机器人大脑空间记忆架构 \textbullet{} v__PRISM_VERSION__}}} \fancyhead[R]{\small\textsf{\textcolor{InkMuted}{\leftmark}}} \fancyfoot[L]{\small\textsf{\textcolor{InkMuted}{Build: __PRISM_BUILD_DATE__}}} \fancyfoot[C]{\small\textsf{\textcolor{InkMuted}{\thepage{} / \pageref*{LastPage}}}} \fancyfoot[R]{\small\textsf{\textcolor{InkMuted}{v__PRISM_VERSION__}}} \renewcommand{\headrulewidth}{0.3pt} \renewcommand{\headrule}{\hbox to\headwidth{\color{GoldRule}\leaders\hrule height \headrulewidth\hfill}} \renewcommand{\footrulewidth}{0pt} \usepackage{lastpage} % ── 章节样式 ────────────────────────────────────────────────────────── \ctexset{ chapter={ name={第,章}, number=\arabic{chapter}, format=\Large\bfseries\sffamily\raggedright, titleformat=\Large\bfseries\sffamily\raggedright, aftername={\hspace{0.6em}}, beforeskip=1.2em, afterskip=1.0em }, section={ format=\large\bfseries\sffamily\raggedright, aftername={\hspace{0.5em}} }, subsection={ format=\normalsize\bfseries\sffamily\raggedright, }, subsubsection={ format=\normalsize\sffamily\raggedright, } } % ── pandoc 兼容包 ───────────────────────────────────────────────────── \usepackage{calc} % pandoc 表格列宽需要 calc 包 \providecommand{\tightlist}{\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} \providecommand{\pandocbounded}[1]{#1} \providecommand{\real}[1]{#1} % pandoc:把 0.4545 原样传入 calc \providecommand{\textquotesingle}{\textsf{'}} % Pandoc 用 \def\LTcaptype{none};需要先定义 none counter 避免 \refstepcounter{none} 报错 \newcounter{none} % 一些 pandoc highlight 占位 (避免缺命令报错) \providecommand{\NormalTok}[1]{#1} \providecommand{\KeywordTok}[1]{\textcolor{PrismPurple}{\textbf{#1}}} \providecommand{\DataTypeTok}[1]{\textcolor{PrismTeal}{#1}} \providecommand{\DecValTok}[1]{\textcolor{PrismOrange}{#1}} \providecommand{\BaseNTok}[1]{\textcolor{PrismOrange}{#1}} \providecommand{\FloatTok}[1]{\textcolor{PrismOrange}{#1}} \providecommand{\CharTok}[1]{\textcolor{PrismTeal}{#1}} \providecommand{\StringTok}[1]{\textcolor{PrismTeal}{#1}} \providecommand{\CommentTok}[1]{\textcolor{InkMuted}{\textit{#1}}} \providecommand{\OtherTok}[1]{#1} \providecommand{\AlertTok}[1]{\textcolor{PrismRed}{\textbf{#1}}} \providecommand{\FunctionTok}[1]{\textcolor{Accent}{#1}} \providecommand{\RegionMarkerTok}[1]{#1} \providecommand{\ErrorTok}[1]{\textcolor{PrismRed}{\textbf{#1}}} \providecommand{\BuiltInTok}[1]{#1} \providecommand{\ExtensionTok}[1]{#1} \providecommand{\PreprocessorTok}[1]{\textcolor{PrismOrange}{#1}} \providecommand{\AttributeTok}[1]{#1} \providecommand{\InformationTok}[1]{\textcolor{InkMuted}{#1}} \providecommand{\WarningTok}[1]{\textcolor{PrismOrange}{\textbf{#1}}} \providecommand{\AnnotationTok}[1]{\textcolor{InkMuted}{\textit{#1}}} \providecommand{\VariableTok}[1]{#1} \providecommand{\ImportTok}[1]{\textcolor{PrismPurple}{#1}} \providecommand{\OperatorTok}[1]{#1} \providecommand{\ControlFlowTok}[1]{\textcolor{PrismPurple}{\textbf{#1}}} \providecommand{\SpecialCharTok}[1]{#1} \providecommand{\VerbatimStringTok}[1]{\textcolor{PrismTeal}{#1}} \providecommand{\SpecialStringTok}[1]{\textcolor{PrismTeal}{#1}} \providecommand{\ConstantTok}[1]{\textcolor{PrismOrange}{#1}} \providecommand{\DocumentationTok}[1]{\textcolor{InkMuted}{\textit{#1}}} \providecommand{\CommentVarTok}[1]{\textcolor{InkMuted}{\textit{#1}}} % pandoc 引文环境 \newenvironment{cslreferences}{}{} \newcommand{\citeproctext}{} \newcommand{\citeproc}[2]{#2} % emoji / unicode 兜底 (xeCJK 大多直接显示;不显示的用 textsf 代替) \newcommand{\emoji}[1]{\texorpdfstring{#1}{}} % ───────────────────────────────────────────────────────────────────── \title{\bfseries PRISM \\[6pt] \large Prior-Registered Integrated Spatial Memory \\[3pt] \normalsize 机器人大脑空间记忆架构 \\[6pt] \small\sffamily\textcolor{InkMuted}{v__PRISM_VERSION__ \textperiodcentered{} __PRISM_BUILD_DATE__}} \author{项目规划组 \textperiodcentered{} Project Planning Team} \date{__PRISM_BUILD_DATE__ \textperiodcentered{} v__PRISM_VERSION__} \begin{document} \frontmatter \maketitle % 简短前言 (一页) \thispagestyle{empty} \vspace*{2em} \begin{tcolorbox}[title={关于本书 / About this Book}, colback=BoxBG, colframe=Accent] \textbf{PRISM} (Prior-Registered Integrated Spatial Memory) 是一种把 \emph{iPhone RoomPlan 离线先验地图} 与 \emph{ZED 2i 双目+IMU 在线感知} 融合进同一个机器人大脑的\textbf{四层空间记忆架构}。 本书完整收录 PRISM v1.1 方案的 15 个章节 (README + 14 章),含可立即复制运行的 Python schema、ROS 2 节点编排、 8 周路线图、风险登记、评测体系、以及一份周末可跑通的最小 MVP。 \end{tcolorbox} \vfill \noindent\textsf{\textcolor{InkMuted}{\small \textbf{License}: CC BY-NC 4.0 \hfill \textbf{Repo}: \texttt{github.com//prism}\\ \textbf{文档版本}: v1.1 \hfill \textbf{最后更新}: 2026-05-16 }} \cleardoublepage \tableofcontents \cleardoublepage \mainmatter % ─────────── 正文由 pandoc 注入 ─────────── __PRISM_BODY_PLACEHOLDER__ \end{document}