%====================================================================== % ouccsx.sty — 中国海洋大学 特殊事项说明表 版式包 % % 依据:报销相关/中国海洋大学特殊事项说明表.docx(Word 2007 保存) % 目标:版式与逐项对齐;内容可随意增删而不破版。 % % 尺寸换算: % twips → pt : pt = twips / 20 (1 pt = 1/20 twip) % twips → mm : mm = twips / 1440 * 25.4 % w:sz : 半磅值,÷ 2 即 pt % w:line : 1/20 pt(lineRule="exact" 时即精确行距) % % ⚠️ 与 PDF 对齐的几何量一律用 bp(= 1/72 in,PDF 用户单位), % 不用 pt(= 1/72.27 in)。两者差 0.375%,A4 上累积可达 2 pt, % 超过一个字符宽,肉眼看得出。标注坐标者均为 PDF 坐标 % (左上原点、向下为正)。 % % 用法见同目录 特殊事项说明表.tex,说明见 README.md %====================================================================== \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{ouccsx}[2026/10/28 v1.2 OUC special item statement form] \RequirePackage{geometry} \RequirePackage{fontspec} \RequirePackage{xeCJK} \RequirePackage{fancyhdr} %====================================================================== % 1. 页面与版心 % % sectPr: % pgSz 11906 × 16838 twips = 210.02 × 297.05 mm → A4 % pgMar top 2155 / bottom 1985 twips = 38.01 / 35.00 mm % left 1588 / right 1474 twips = 28.01 / 26.00 mm % % ------------------------------------------------------------------ % ⚠️⚠️ 本模板的版心【不是】docx 的版心,这是刻意的。 % % 原表 tblW = 9613 twips = 169.54 mm = 480.65 bp, % 而 docx 版心宽只有 210 − 28 − 26 = 156 mm。 % 表比版心宽 13.54 mm,靠 tblInd = −546 twips(−9.63 mm)向左顶出去。 % % 坐标(Word 导出 PDF): % 表格左边框 x = 46.70 bp,右边框 x = 527.35 bp(宽 480.65 ✓) % 标题文字中心 x = 300.41 bp ← 居中于 docx 版心,不是居中于表格 % % ⇒ 若把 geometry 设成 docx 版心(left 28 mm),表格必然超出版心 % 13.54 mm,报一条 Overfull \hbox,且改内容时位置会漂。 % % ⇒ 本包把 geometry 的版心【直接设成表格宽度】: % left = 16.47 mm (= 表格左边框) % totalwidth = 169.54 mm (= 表格外宽) % 表格正好填满版心,零 Overfull,位置与原件逐点相同。 % % ⇒ 代价:标题若用 \centering 会落在 287.03 bp,原件在 300.41 bp, % 偏左 13.4 bp。故标题另给偏移补回 docx 版心的中心(见第 5 节)。 %====================================================================== \newlength{\sxofficialleft} % docx 版心左界,仅用于换算 \setlength{\sxofficialleft}{28.01mm} \newlength{\sxtblleft} \setlength{\sxtblleft}{16.47mm} \newlength{\sxtblw} % 表格外宽 = 版心宽 \setlength{\sxtblw}{169.54mm} \geometry{ paperwidth = 210mm, paperheight = 297mm, left = 16.47mm, % = 表格左边框 totalwidth = 169.54mm, % = 表格外宽 % ⚠️ 坐标差:本包所有 y 都恒比原件小 0.14 bp(表顶线、备注、 % 页码全部同步偏移,是 top 与 PDF 线宽的取整差,不是各行的问题)。 % 从 top 里补掉,一次消除。 top = \dimexpr38.01mm+0.14bp\relax, bottom = 35.00mm, % = docx pgMar bottom 1985 twips headheight = 0pt, headsep = 0pt, footskip = 24.41bp, } \setlength{\parindent}{0pt} \setlength{\parskip}{0pt} %====================================================================== % 2. 字体与字号 % % 字号(w:sz 半磅值 ÷ 2): % 大标题 44 → 22 pt / 表内正文 21 → 10.5 pt % 签字日期 24 → 12 pt / 备注 21 → 10.5 pt / 页码 28 → 14 pt % % ⚠️⚠️⚠️ ctex 默认 \linespread ≈ 1.3,会把 \fontsize{10.5}{13.65} % 的 13.65 pt 行距再放大 30% 变成 17.7 pt。本模板所有行距都来自 % docx 精确值,故每次设字号前必须先把 \linespread 归 1。 % % ⚠️ 原标题用「方正小标宋简体」,商业字体,本库不分发(见根 README % 的字体承诺)。按 课程执行大纲/ 的既定做法换成 OUC Serif 真粗体 % —— 小标宋本就是宋体的标题变体,真粗体比伪粗更接近,笔画不糊。 %====================================================================== \input{../fonts.tex} \newcommand{\sxfonttitle}{% \linespread{1}\relax\fontsize{22}{25}\selectfont} \newcommand{\sxfontbody}{% \linespread{1}\relax\fontsize{10.5}{13.65}\selectfont} \newcommand{\sxfontsign}{% \linespread{1}\relax\fontsize{12}{15.6}\selectfont} \newcommand{\sxfontfoot}{% \linespread{1}\relax\fontsize{14}{16.8}\selectfont} %====================================================================== % 3. 表格的几何量 % % 边框 tblBorders sz=4 → 0.5 pt(w:sz 是 1/8 pt,4/8) % 内边距 tblCellMar left/right = 108 twips,top/bottom = 0 % % 行高:trHeight 是 5091 / 1140 / 634 twips,hRule="atLeast", % 但 atLeast 是「最小」,实际高度由内容撑开。故用取值: % 四条横线中线 y = 172.99 / 457.49 / 516.34 / 573.64 % ⇒ 三段高 284.50 / 58.85 / 57.30(线中心距), % 扣掉各一端的半线宽(0.249)得内容高 284.00 / 58.35 / 56.80。 % ⚠️ 不用 trHeight 的 254.55 / 57 / 31.7:R0 被 19 段撑到 284, % R2 被 4 段撑到 56.8,照 trHeight 会让整表矮 40 bp。 %====================================================================== \newlength{\sxrule} \setlength{\sxrule}{0.5pt} % = tblBorders sz 4/8 \newlength{\sxpad} \setlength{\sxpad}{4.93bp} % 校到内容左界 52.08(实际52.11) \newlength{\sxboxw} % 单元格内容盒宽(不含边框) \setlength{\sxboxw}{\dimexpr\sxtblw-2\sxrule\relax} % ⚠️⚠️ 段落折行的可用宽度 ≠ 盒宽。 % 折行可用宽 = \sxboxw − \sxpad − \sxbodypad。 % 原件内容左界 52.08、右界 521.89 ⇒ 可用宽 469.81 bp。 % ⚠️ 这 1.7 bp 是「折不折行」的临界。本表那句「项目负责人是科研经费 % 使用的直接责任人……」共 47 字,在 471.5 bp 里能挤成一行, % 在 469.81 bp 里必须折行 —— 原件是两行。差一行 = 13.56 bp, % R0 下半全部内容上移 16.5 bp,肉眼一看就错。 \newlength{\sxbodypad} \setlength{\sxbodypad}{6.65bp} % = 481.388 − 4.948 − 469.81 \newlength{\sxrowa} \setlength{\sxrowa}{284.00bp} \newlength{\sxrowb} \setlength{\sxrowb}{58.35bp} \newlength{\sxrowc} \setlength{\sxrowc}{56.80bp} %====================================================================== % 4. 行定位体系(全文件的核心) % % ⚠️⚠️⚠️ 本表的行距**不能**用 \baselineskip 控制。改之前先读这段。 % % 【坑一】\baselineskip 只在**同一段落内部**管行距。 % 本表行距逐行不同(15.24 / 15.48 / 14.04 / 13.56 / 13.68), % 因为 10.5 pt 与 12 pt 的字混排,Word 按「下一行字号 × 1.3」算。 % 最初每行 \par 之后单独给 \baselineskip,**完全无效**: % 所有行距被压成 13.51,12 pt 的签名行没变高,整表矮 2.25 bp。 % 原因:每行 \par 自成一段后,段间基线距离 = 上段末行深度 + % \parskip + 本段首行字高,\baselineskip 根本没被读到。 % % 【正解】不依赖 \baselineskip,逐行显式插胶: % % 基线距 = 上盒深度 + \kern + 本盒高度 % ⇒ \kern = 目标距 − 上盒深度 − 本盒高度 % % 与字体度量彻底解耦:换字体、换字号、描述写长写短,行距不变。 % % 【坑二】块首行必须用 \kern,不能用 \vskip。 % TeX 会【丢弃 \vbox 开头的胶】,用 \vskip 给的顶距静默消失 % (实际「事项描述:」给 10.53 只落到 5.38,等于只剩字高)。 % \kern 不受这条约束,且照样计入盒高。 % % 【坑三】必须允许负的 \kern。 % 相邻行的目标距可能小于「上盒深度 + 本盒高度」(如年月日行 % 12 pt 字目标 14.04,而 2.99 + 12.06 = 15.05),差值是 −1.01。 % 最初加了 `\ifdim>0` 守卫,负值被吞 → 该行退回自然距 15.05, % 整块错位 10 bp。负 \kern 在 TeX 里完全合法,不该挡。 % % 【坑四】多行段落的 \ht 参照的是**末行**基线,不是首行。 % \vbox 的 \ht = 首行高度 + (n−1)·行距,它的参考点是末行基线。 % 所以「上一行基线 → 本段首行基线」的距离不是 pd + kern + ht, % 而是 pd + kern + ht − (n−1)·行距。漏掉这一项, % 多行段自己会被推下一整行,其后所有行跟着错(实际0.48 而非 14.04)。 % ⇒ 用 \prevgraf 取段内行数,把 (n−1)·行距加回 kern。 % ⚠️ \dp 不用改:\vbox 的 \dp 就是末行的真实深度。 % % 【坑五】\offinterlineskip 会继承进段落内部。 % 它把 \lineskiplimit 设成极小值,段内多行改走 \lineskip(=0), % \baselineskip 又被架空(行距只剩 10.81 而非 13.56)。 % ⇒ 段落内部必须显式恢复 \lineskiplimit / \lineskip。 %====================================================================== \newbox\sx@boxa \newbox\sx@boxb \newbox\sx@boxc \newdimen\sx@pd % 上一行的真实末行深度 \newdimen\sx@tmp \newdimen\sx@boxd \newdimen\sx@pgd % 段内中间各行推进总量(\prevgraf 必须先存出来) \newif\ifsx@first % 是否块内第一行 \newcommand{\sx@blstart}{% \offinterlineskip \topskip=\z@ \sx@pd=\z@ \sx@firsttrue} % \sx@bl[底深]{与上一行基线的距离}{行内容} % % #1(可选)= 本行盒的最小深度。块末行用它留出「基线 → 格底」的空白 % —— TeX 丢弃 \vbox 末尾的胶,不能用 \kern 补。 % #2 = 与上一行基线的距离;块第一行则是「块顶 → 首行基线」。 % #3 = 行内容(水平模式),参照点是单元格内容左界。 % #2 = 与上一行基线的距离;块第一行则是「块顶 → 首行基线」, % 给 0 表示「首行自然贴块顶、只留字高」。 % 后者用于 R0 下半块:那块是贴格底的,全部位置由 % 「末行深度 + 逐行行距」反推出来,再给绝对顶距就重复 % 定位了(实际多给 208.89,整块下移 66.90)。 \newcommand{\sx@bl}[3][\z@]{% \setbox\sx@boxc=\hbox to \sxboxw{\hskip\sxpad #3\hss}% \ifsx@first \sx@firstfalse \kern\dimexpr\ifdim#2>\z@#2-\fi\ht\sx@boxc\relax \else \kern\dimexpr#2-\sx@pd-\ht\sx@boxc\relax \fi \ifdim\dp\sx@boxc<#1 \dp\sx@boxc=#1\relax \fi \sx@pd=\dp\sx@boxc \box\sx@boxc} % \sx@blp[底深]{与上一行基线的距离}{段内行距}{段落内容} % % 与 \sx@bl 同一套定位规则,但内容是可折行的段落(用于那两句长话)。 % % ⚠️⚠️ \vbox 的 \ht 参考点是**末行基线**,不是首行(坑四)。 % 故 kern 里要把 (n−1)·行距 加回去,否则整个多行段被推下一整行。 % \dp 不用改 —— \vbox 的 \dp 就是末行的真实深度。 \newcommand{\sx@blp}[4][\z@]{% \setbox\sx@boxc=\vbox{% \hsize=\sxboxw \leftskip=\sxpad \rightskip=\sxbodypad \parindent=\z@ \parskip=\z@ \lineskiplimit=\z@ % ← 抵消外层 \offinterlineskip(坑五) \lineskip=\z@ \baselineskip=#3\relax \noindent #4\par % ⚠️⚠️ \prevgraf 有两道坎: % ① 必须在 vbox **内部**取 —— 它是「当前正在排的段落行数」, % vbox 一关闭就恢复成外层值(实际把 2 读成 0)。 % ② 必须在 \par **之后**取 —— \prevgraf 是在段落断行那一步 % 才被写入的,\par 之前读到的还是旧值(实际仍为 0)。 \global\sx@pgd=\dimexpr\numexpr\prevgraf-1\relax\dimexpr#3\relax\relax}% % 中间各行的推进总量 \sx@tmp=\sx@pgd \ifsx@first \sx@firstfalse % 块首行的 #2 直接是「块顶 → 首行基线」,不需要再扣多行推进量: % 多行段的 \ht 已经包含了「首行基线 → 末行基线」的全部推进, % 而首行基线本身与段有几行无关。加回 pgd 会把首行推下一整行 % (实际描述两行偏 +10.39)。 \kern\dimexpr\ifdim#2>\z@#2-\fi\ht\sx@boxc\relax \else \kern\dimexpr #2+\sx@tmp-\sx@pd-\ht\sx@boxc\relax \fi \ifdim\dp\sx@boxc<#1 \dp\sx@boxc=#1\relax \fi \sx@pd=\dp\sx@boxc \box\sx@boxc} % 签名下划线:长 #1、线宽 0.4 pt(Word underline,比表格线细) \newcommand{\sx@rule}[1]{% \rule[-0.55mm]{#1}{0.4pt}} %---------------------------------------------------------------------- % \sx@put{偏移}{内容} —— 在「内容左界 + 偏移」处放置内容 % % 原件的签名行、年月日全靠敲空格凑位置(R0 签名前是 30 个 14 pt 空格), % 换台机器字号一改就散架。这里按实际x 坐标绝对定位,不随字体漂移。 % % ⚠️⚠️ 用 \rlap(= \hbox to 0pt{...\hss})而非 \makebox[0pt][l]: % 两者都是零宽盒左对齐,但 \makebox 内容超宽会报 Overfull \hbox % (签名下划线 84 bp 必然超),\rlap 末尾有 \hss 吸收,静默通过。 % 因零宽,一行串多个 \sx@put 时共用同一原点,偏移各自独立。 % % 偏移 = 「Word 导出 PDF 实际x」− 52.08(内容左界) %---------------------------------------------------------------------- \newcommand{\sx@put}[2]{% \rlap{\hspace*{#1}#2}} %---------------------------------------------------------------------- % 单元格装配 % % \sx@cellbl{高度}{块内容} 内容贴顶,不足高度补在底部(= trHeight atLeast) \newcommand{\sx@cellbl}[2]{% \setbox\sx@boxa=\vbox{\sx@blstart #2}% \ifdim\dimexpr\ht\sx@boxa+\dp\sx@boxa\relax<#1 \vbox to #1{\box\sx@boxa\vfil}% \else \box\sx@boxa \fi} % \sx@cellvf{高度}{上半}{下半} 中间 \vfil 撑开 ⇒ 下半贴格底 % % ⚠️⚠️ 非直觉之处: % 最初写「先 \setbox 量内容,再 \vbox to <高>{\box\sx@box\vfil}」, % 结果 R0 的「兹证明」跑到描述正下方(y=261.95,原件 382.13), % 整块偏高 120 bp。 % 原因:\vbox{...\vfil} **被测量的那一刻** \vfil 就塌成 0 % (vbox 无目标高度,末端胶只能为 0)。再套壳时剩余胶只能加在 % 整体之后 → 变成「内容贴顶、空白在底」,与想要的正好相反。 % 正解:让 \vfil 与上下两半【同处一个有目标高度的 \vbox 里】。 \newcommand{\sx@cellvf}[3]{% \setbox\sx@boxa=\vbox{% \hsize=\sxboxw \leftskip=\sxpad \rightskip=\sxpad \parindent=\z@ \parskip=\z@ #2}% \setbox\sx@boxb=\vbox{\sx@blstart #3}% % ⚠️⚠️ 末尾那个 \vskip\z@ 不能省。 % \vbox to N 设定的是**高度**,深度另计:若最后一项是 \box\sx@boxb % 且它自带深度(本表末行深 3.11),则 vbox 的 \dp = 3.11, % 总高变成 N + 3.11,整行高三点一一,四条横线全部下移 % (实际R0 = 287.11 而非 284.00)。 % 补一条零高胶让末项变成胶(胶无深度),\dp 归零, % 总高才正好等于 N。 \ifdim\dimexpr\ht\sx@boxa+\ht\sx@boxb+\dp\sx@boxb\relax<#1 \vbox to #1{\box\sx@boxa\vfil\box\sx@boxb\vskip\z@}% \else \vbox{\box\sx@boxa\vfil\box\sx@boxb}% \fi} %====================================================================== % 5. 标题 % % :22 pt 小标宋(→ 宋体真粗体),居中,标题段行距 25 pt。 % 文字中心 x = 300.41 bp,基线 y = 147.65。 % % ⚠️⚠️ 为什么不能直接 \centering: % 本包版心 16.47~186.01 mm,中心 287.03 bp; % 标题要居中的是 docx 版心 28.01~184.01 mm,中心 300.41 bp。 % 两者差 13.4 bp,直接居中会左偏 4.7 mm。 % 正解:先 \hspace* 推到 docx 版心左界,再用一个正好等于 % docx 版心宽的 \makebox 居中。右边不会溢出: % 11.54 + 156 = 167.54 mm < 169.54 mm。 %====================================================================== \newlength{\sxtitleindent} \setlength{\sxtitleindent}{\dimexpr\sxofficialleft-\sxtblleft\relax} \newlength{\sxtitlewidth} \setlength{\sxtitlewidth}{156mm} % 微调:标题中心原偏右 0.60 bp(字形宽度差所致) \newlength{\sxtitlefix} \setlength{\sxtitlefix}{-0.60bp} % 标题前/后竖直距离(由 PDF 实际反推,见 README「实际记录」) % ⚠️ 这两个值必须成对调:\sxprespace 在标题前、\sxpostspace 在标题后, % 单独改一个会把标题与表格的间距一起改掉。标定见 README。 \newlength{\sxprespace} \setlength{\sxprespace}{10.07bp} \newlength{\sxpostspace} \setlength{\sxpostspace}{21.09bp} \newcommand{\sxtitle}[1]{% \par\begingroup \vspace*{\sxprespace}% \noindent \hspace*{\dimexpr\sxtitleindent+\sxtitlefix\relax}% \makebox[\sxtitlewidth][c]{% \sxfonttitle\songti\bfseries #1}% \par\vspace*{\sxpostspace}% \endgroup} %====================================================================== % 6. 表格主体 % % 原表是**单列 3 行**(tblGrid 只有一个 gridCol),即三行整宽方框上下叠。 % 没有合并单元格、没有多列,不需要 tabularray —— 手工 \vbox 叠三块 % 反而更可控:行高精确、内线不重复、内容可用 \vfil 撑。 % 外框 \framebox,两条内线 \hrule(各占 \sxrule)。 %====================================================================== \newcommand{\sxtable}{% \par\noindent \begingroup \setlength{\fboxsep}{0pt}% \setlength{\fboxrule}{\sxrule}% \framebox[\sxtblw]{% \vbox{% \hsize=\sxboxw \sx@rowa@box \hrule height \sxrule \sx@cellbl{\sxrowb}{\sx@rowB}% \hrule height \sxrule \sx@cellbl{\sxrowc}{\sx@rowC}% }% }% \par\endgroup} %====================================================================== % 7. 三行内容的装配 % % 三行里的固定话术(「兹证明该事项真实有效……」等)是学校规定原文, % **不要在 .tex 里改**;它们在这里装配好,.tex 只提供要人填的几项: % \sxdesc 事项描述正文(必填) % \sxdateA 项目负责人签字处日期(留空则印「 年 月 日」) % \sxdateB 单位负责人签字处日期 % \sxdateC 科技管理部门签字处日期 % % ⚠️ 为什么不让 .tex 改整行:原件里这些行全靠敲空格对齐,一旦让 % 用户自己写,每人写出来都不一样,模板就失去意义。这里按实际 % x 坐标把固定部分钉死,.tex 只需填描述与日期。 % % ------------------------------------------------------------------ % R0 纵向结构(全表最麻烦的一处) % % R0 共 19 段:1「事项描述:」/ 2~3 空 / 4 描述正文 / % 5~12 八个空段(给手写留白)/ 13 空 / 14「兹证明…」/ 15 签名 / % 16 年月日 / 17「项目负责人是…」/ 18「非科研经费…」 % % 那 8 个空段是**手写留白**。本模板把描述改成排字(\sxdesc), % 它们就成了死间距:描述写短了下面一大片空白,写长了把签名区顶到下一行。 % ⇒ 删掉,改用「上下两半 + 中间 \vfil」: % 描述短 → 空白落在两半之间,签名区不动 % 描述长 → 空白被吃掉,签名区仍然不动 % 这是本模板比原件更稳的地方。 % ⚠️ 但 \vfil 不能无限压:描述特别长时签名区会挤出行外。 % 这是内容超量的正常表现(Word 里也一样),不是 bug。 % % ------------------------------------------------------------------ % 实际基线(PDF 绝对 y;Δ 为与上一行的基线距) % % R0(顶线 172.99,内容顶 173.24) % 事项描述 183.77 (10.53) % 描述首行 227.81 (54.57) ← 段内行距 13.68 % 兹证明 382.13 (208.89) % 项目负责人 397.37 (Δ15.24) % 年月日 412.85 (Δ15.48) % 项目负责人是 426.89 (Δ14.04) ← 段内行距 13.56 % 责任。 440.45 (Δ13.56) % 非科研经费 454.13 (Δ13.68) 末行深 3.11 % % R1(顶线 457.49,内容顶 457.74) % 本人证明 468.29 (10.55) % 单位负责人 483.41 (Δ15.12) % 年月日 498.89 (Δ15.48) % 学院 512.93 (Δ14.04) 末行深 3.16 % % R2(顶线 516.34,内容顶 516.59) % 科技管理 527.09 (10.50) % 负责人签字 554.33 (Δ27.24) ← 原件一个空段,留写字空间 % 年月日 569.93 (Δ15.60) 末行深 3.46 %====================================================================== %---------------------------------------------------------------------- % 日期行 % % 原件「 年 月 日」,三字间隔**各处不同**: % R0 370.08 / 412.08 / 454.08 步长 42 / 42 % R1 400.08 / 442.08 / 484.08 步长 42 / 42 % R2 424.08 / 454.08 / 478.08 步长 30 / 24 ← 这格右边距紧 % % ⚠️⚠️ 两个坑: % ① 原来用 \makebox[12pt][l] + \hspace{步长−12pt} 拼步长, % 12 pt(12.045 bp)与 42 pt(42.157 bp)混减,每字累积 % 0.16 bp,第三个字偏出 1.6 bp。 % ② 原来年份用 \makebox[12pt][l]{#1},即使 #1 为空**仍占 12 pt**, % 把「年」推出 30 pt,整组右移 28.67 bp。 % ⇒ 三字全用 \sx@put 绝对定位,不积累、不占位;年份用右对齐 % \makebox 挂在「年」左边,空着就整块不出。 % % \sx@dateline{年份}{年 x}{月 x}{日 x} %---------------------------------------------------------------------- \newcommand{\sx@ifempty}[1]{\if\relax\detokenize{#1}\relax} \newcommand{\sx@dateline}[4]{% \sx@ifempty{#1}\else \sx@put{\dimexpr#2-26bp\relax}{\makebox[24bp][r]{#1}}% \fi \sx@put{#2}{年}% \sx@put{#3}{月}% \sx@put{#4}{日}} %---------------------------------------------------------------------- % R0 —— 事项描述 + 项目负责人签字 %---------------------------------------------------------------------- \newcommand{\sx@rowa@box}{% \sx@cellvf{\sxrowa}% {\sxfontbody\songti \sx@blstart \sx@bl{10.53bp}{事项描述:}% \sx@blp{44.04bp}{13.68bp}{\sxdesc}}% {\sxfontbody\songti \sx@blstart \sx@bl{0bp}{\sx@put{31.56bp}{兹证明该事项真实有效,本人愿意为此承担责任。}}% \sx@bl{15.24bp}{% \sx@put{210.00bp}{\sxfontsign\songti 项目负责人(签名):}% \sx@put{323.97bp}{\sx@rule{84bp}}}% \sx@bl{15.48bp}{% \sx@put{318.00bp}{\sxfontsign\songti}% \sx@dateline{\sxdateA}{318.00bp}{360.00bp}{402.00bp}}% \sx@blp{14.04bp}{13.56bp}{% \hspace*{21.00bp}项目负责人是科研经费使用的直接责任人,对经费使用的真实性、合理性及有效性承担经济与法律责任。}% \sx@bl[3.11bp]{13.68bp}{\sx@put{21.00bp}{非科研经费亦适用本表格。}}}} %---------------------------------------------------------------------- % R1 —— 单位负责人签字 + 单位公章 % 实际下划线 x 187.05~253.05(长 66 bp);「单位公章:」后不画线。 %---------------------------------------------------------------------- \newcommand{\sx@rowB}{% \sxfontbody\songti \sx@bl{10.55bp}{本人证明以上事项属实,并愿意承担相应责任。}% \sx@bl{15.12bp}{% \sx@put{21.00bp}{\sxfontsign\songti 单位负责人(签名):}% \sx@put{134.97bp}{\sx@rule{66bp}}% \sx@put{309.00bp}{\sxfontsign\songti 单位公章:}}% \sx@bl{15.48bp}{% \sx@put{348.00bp}{\sxfontsign\songti}% \sx@dateline{\sxdateB}{348.00bp}{390.00bp}{432.00bp}}% \sx@bl[3.16bp]{14.04bp}{\sx@put{15.72bp}{学院对本单位科研经费使用承担监督和管理责任。}}} %---------------------------------------------------------------------- % R2 —— 科技管理部门审批意见 % 「科技管理」→「负责人签字」差 27.24 bp,比正常行距 15.6 多 11.64, % 对应原件这一个空段(审批意见要留写字空间)。 %---------------------------------------------------------------------- \newcommand{\sx@rowC}{% \sxfontbody\songti \sx@bl{10.50bp}{科技管理部门审批意见:}% \sx@bl{27.24bp}{% \sx@put{26.28bp}{\sxfontsign\songti 负责人签字:}% \sx@put{314.28bp}{\sxfontsign\songti 单位公章:}}% \sx@bl[3.46bp]{15.60bp}{% \sx@put{372.00bp}{\sxfontsign\songti}% \sx@dateline{\sxdateC}{372.00bp}{402.00bp}{426.00bp}}} %====================================================================== % 8. 备注区 % % 三条备注是「annotation text」样式 + 自动编号(decimal "%1."), % 行距 15 pt。实际基线 585.89 / 600.89 / 615.89 / 630.89(间距 15)。 % 实际x: 「备注:」79.44,编号「1.」95.16~103.05,正文 113.16 % ⇒ 减内容左界 52.08:27.36 / 50.97 / 61.08 % % ⚠️ 四条同样不能用 \baselineskip —— 各自独立成段(同第 4 节坑一)。 % % ⚠️ 第 3 条在里是**手打的**「 3. 」(没有 numPr), % 比前两条多两个空格、位置差 0.36 bp。本模板统一排齐, % 这是与原件唯一的有意差异(README「与原件差异」已列明)。 %====================================================================== \newlength{\sxnotebody} \setlength{\sxnotebody}{61.08bp} % 正文左端 \newlength{\sxnotenum} \setlength{\sxnotenum}{50.97bp} % 编号右端 \newlength{\sxnotelab} \setlength{\sxnotelab}{27.36bp} % 「备注:」左端 % #1 = 编号 #2 = 正文 % % ⚠️ 偏移用「相对内容左界」的值,不要再减 \sxpad。 % \sx@bl 的行盒是 \hbox to \sxboxw{\hskip\sxpad 内容\hss}, % \rlap 的参照原点就在那 \hskip 之后 —— 也就是内容左界本身。 \newcommand{\sxnoteitem}[2]{% \sx@bl{15bp}{% \rlap{\hspace*{\sxnotenum}\makebox[0bp][r]{#1}}% \rlap{\hspace*{\sxnotebody}#2}}} %---------------------------------------------------------------------- % 备注区四条(引言 + 三条),原文照录 —— 学校规定文字,不要改 % ⚠️ 引言「备注:使用科研经费报销时……」是**连排的一句话**, % 「备注:」不是悬挂标签,整行从 79.44 起排,故只需一个 \sx@put。 %---------------------------------------------------------------------- % 第一行的「块顶 → 首行基线」:实际585.89 − 表格底 573.89 = 12.00 \newcommand{\sxnotes}{% \par\nointerlineskip \vbox{% \sxfontbody\songti \sx@blstart \sx@bl{12.00bp}{\sx@put{\sxnotelab}{备注:使用科研经费报销时,本表需要相关负责人签字审批的情形和要求如下:}}% \sxnoteitem{1.}{符合《办法》第十八条第八款、第二十三条情形的,需项目负责人、单位负责人签字;}% \sxnoteitem{2.}{符合《办法》第二十二条的情形,需项目负责人、单位负责人和科技部门负责人签字;}% \sxnoteitem{3.}{除以上两种情形外,其他均由项目负责人签字。}}% \par} %====================================================================== % 9. 页脚 % % 页脚:右对齐「— 1 —」,宋体 14 pt,右缩进 180 twips = 9 pt。 % 实际整串左端 463.56、右端 512.65。本包版心右界 527.02, % 故整串需再左移 527.02 − 512.65 = 14.37 bp。 % % 负 \hspace 放**开头** —— 完全没效果(实际偏右 24.94 bp)。 % 原因:fancyhdr 的 [R] 位把内容放进 \hbox to \textwidth 并前置 % \hfil,靠「内容块整体贴右」对齐。开头加负 \hspace 只把块起点 % 左移,块宽没变,右边界仍贴版心右界。 % 正解:把内容装进**零宽盒**,让它的右缘成为对齐基准, % 再用末尾的 \hspace 把基准往里推。 %====================================================================== \newlength{\sxfootinset} \setlength{\sxfootinset}{24.94bp} \newcommand{\sxfootfont}{\sxfontfoot\songti} \newcommand{\sxfootcontent}{% \makebox[0pt][r]{\sxfootfont — \thepage\ —}% \hspace*{\sxfootinset}} \pagestyle{fancy} \fancyhf{} \renewcommand{\headrulewidth}{0pt} \renewcommand{\footrulewidth}{0pt} \fancyfoot[R]{\sxfootcontent} \fancypagestyle{plain}{% \fancyhf{}% \renewcommand{\headrulewidth}{0pt}% \renewcommand{\footrulewidth}{0pt}% \fancyfoot[R]{\sxfootcontent}% } %====================================================================== % 10. 一句话入口 % % \sxform —— 在 .tex 里只调这一个,整张表就出来了。 % 标题、表格、备注、页脚全在里面。 %====================================================================== \newcommand{\sxform}{% \sxtitle{中国海洋大学特殊事项说明表}% \sxtable \sxnotes} \AtBeginDocument{\sxfontbody\songti} \endinput