\startenvironment doc-env \usemodule[zhfonts] \definefont[kaiti][name:kaiti] %\setupalign[granular] \usecolors[svg] %\showgrid \setupinteraction[state=start,focus=standard,color=darkblue] % 书签 \setupinteractionscreen[option=bookmark] \placebookmarks[title,chapter,section][chapter] % 版式 \setuppapersize[A4][A4] \setuplayout[backspace=3cm,width=15cm, topspace=1.5cm,header=1.5cm, height=27.2cm,footer=1cm] % 双面对开 %\setuppagenumbering[alternative=doublesided] %\showframe % 段落首行缩进、行间距 \setupindenting[first,always,2em] \setupinterlinespace[line=1.5\bodyfontsize] % 关闭页码,后面会在页眉设置页码 \setuppagenumbering[location=] % 丑度 %\setuptolerance[horizontal,stretch] % 图片目录 \setupexternalfigures[directory=figures] % 标题设置 \setupheads[indentnext=yes] \setuphead[title][incrementnumber=list] \setuphead [title,chapter] [style=\bfb,header=empty,footer=empty,before=,after={\blank[2*line]},align=center] \setuphead[chapter][alternative=inmargin] \setuphead[subject,section][style=\bfa,before={\blank},after={\blank}] \setuphead[subsubject,subsection][style=\bf,before={\blank},after={\blank}] \definehead[TOC][title] \setuphead[TOC][before={\blank[quarterline]},after={\blank[quarterline]}] % 若各章首页前页是空白页,禁止页眉和页脚 \definepagebreak [mychapterpagebreak] [yes,header,footer,right] \setuphead [chapter,title] [page=mychapterpagebreak] % 若使用了以下文档结构化环境,需要将其分页设定清空 % 方能满足下面的页眉和页脚的断页规则。 %\setupsectionblock [frontpart] [page=] %\setupsectionblock [bodypart] [page=] %\setupsectionblock [appendix] [page=] %\setupsectionblock [backmatter] [page=] % 目录列表 \setupcombinedlist[content][list={title,chapter,section},criterium=text] \def\PageNumber#1{\underbars{#1}.} % 给页码增加下划线 \setuplist [title] [alternative=a, before={\blank[halfline]}, after={\blank[halfline]}, style=bold, pagecommand=\PageNumber, pagestyle=smallitalic, width=fit] %\def\ChapterNumber#1{\doiftext{#1}{第 #1 章\quad}} % 若 #1 是存在,则将其中文化 \def\ChapterNumber#1{第 #1 章\quad} \setuplist [chapter] [alternative=a, before={\blank[halfline]}, after={\blank[halfline]}, style=bold, width=fit, pagenumber=no, numbercommand=\ChapterNumber] \def\PageNumber#1{\underbars{#1}.} \setuplist [section] [alternative=d, style=normal, numberstyle=normal, pagecommand=\PageNumber, pagestyle=smallitalic] % 目录强制分页 \setinjector[list][13][\page] % 页眉:通用 \startsetups HeaderFooter \setupheadertexts[][pagenumber][pagenumber][] \setupheader[style=\tfx] \stopsetups % 页眉:body 部分 \startsetups BodyHeaderFooter \def\CurrentChapter{% 第 \headnumber[chapter]\ 章\kern 1em\getmarking[chapter]% } \def\CurrentSection{% \headnumber[section][current]% \quad% \getmarking[section][current]% } \setupheadertexts[\CurrentChapter][pagenumber][pagenumber][\CurrentSection] \setupheader[style=\tfx] \stopsetups % 页眉:清空 \startsetups HeaderEmpty \setupheadertexts[][][][] \stopsetups % 脚注里的中文断行 \startsetups footnote:hanzi \setscript[hanzi] \stopsetups \setupnote[footnote][textstyle=bold,setups={footnote:hanzi}] \setupnotation[footnote][way=bypage] % 来自 wolfgang 的 tip % 索引 \def\cmdindex#1{\index[#1]{\tex{#1}}} %---- 列表 ---- \setupfloats[indentnext=yes] \setupcaptions[style=\tfx, headstyle=\rm, align=center] %\setupitemize[each][packed,serried,inmargin][margin=2em] \setupitemize[each][distance=.4em] \setupinmargin[left,right][style=\tfx] \definedescription [definition] [location=top,hang=20,width=broad,indenting=always,style=\ss,headstyle=\bf] % 表格标题(为了第 6 章表格的演示,这部分内容需要在介绍 \placetable 之后才出现, % 见 06.tex %\setupcaption % [table] % [headstyle=normal,style=small,location=top] % 抄录 \setuplinenumbering[style=small] %\setuptyping[option=color,palet=graypretty, % before={\blank[.5em]\setupinterlinespace[line=1.2em]}, % after={\blank[.5em]}] \startuniqueMPgraphic{box quote} path p, q; numeric w, h, u; u := .7BodyFontSize; w := OverlayWidth; h := .8OverlayHeight; color framecolor; framecolor := white randomized (.7, .7, .7); pickup pencircle scaled 1pt; % upper left corner p := ((0, h) -- (u, h)) shifted (-.1u, 0); q := ((0, h) -- (0, h - .75u)) shifted (0, .1u); draw p withcolor framecolor; draw q withcolor framecolor; % lower right corner p := ((w - u, 0) -- (w, 0)) shifted (.1u, 0); q := ((w, 0) -- (w, .75u)) shifted (0, -.1u); draw p withcolor framecolor; draw q withcolor framecolor; \stopuniqueMPgraphic \defineoverlay[boxquotebg][\uniqueMPgraphic{box quote}] \def\boxquote#1{% \kern.25em% \inframed[frame=off, background=boxquotebg, offset=0pt, loffset=.25em, roffset=.25em]{#1}% \kern.25em% } \startMPinclusions def fancybox(expr u) = numeric w, h; w := OverlayWidth; h := OverlayHeight; color framecolor; framecolor := white randomized (.7, .7, .7); drawoptions(withpen pencircle scaled 1.25pt withcolor .3[framecolor, white]); path p, q; % 左上角 p := ((0, h) -- (2u, h)); q := ((0, h) -- (0, h - 1.25u)); draw p; draw q; % 左下角 p := ((0, 0) -- (2u, 0)); q := ((0, 0) -- (0, 1.25u)); draw p; draw q; % 右上角 p := ((w - 2u, h) -- (w, h)); q := ((w, h) -- (w, h - 1.25u)); draw p; draw q; % 右下角 p := ((w - 2u, 0) -- (w, 0)); q := ((w, 0) -- (w, 1.25u)); draw p; draw q; enddef; \stopMPinclusions \startuseMPgraphic{strange box} fancybox(.35BodyFontSize); \stopuseMPgraphic \defineoverlay[strangeboxbg][\uniqueMPgraphic{strange box}] \defineframedtext [strangebox] [frame=off,background=strangeboxbg, offset=0pt,loffset=.5em,roffset=.5em,before={\blank},after={\blank[.95em]}] \setuptype[color=darkred] \definetyping[mycmd] \setuptyping[mycmd] [before={\setupinterlinespace[line=3ex]\startstrangebox[width=\textwidth]}, after={\stopstrangebox\setupinterlinespace[line=3.75ex]}, style=\switchtobodyfont[tt,10pt], escape=yes] \setuptyping [before={\startstrangebox[width=\textwidth]}, after={\stopstrangebox}, style=\switchtobodyfont[tt,10pt], escape=yes] % 抄录环境里的单引号,会被替换为汉字单引号,我需要定义一个 % 西文等宽字体,将其修正回来,即 /BTEX{\Qt'}/ETEX \definefont[Qt][lmmono10regular at 11pt] % ---------- example ---------------------- \definebuffer[example] \definefloat[Example][Examples] \setuplabeltext[cn][Example={例 }] \newdimen\LeftExampleWidth \newdimen\RightResultWidth \def\defineLeftExampleWidth#1{% \LeftExampleWidth=\textwidth \RightResultWidth=\wd#1 \ifdim\RightResultWidth>0pt \advance\LeftExampleWidth by -\RightResultWidth \advance\LeftExampleWidth by -1em \fi } \def\example[#1][#2]#3#4{% \setbox\scratchbox\hbox{#4}% \defineLeftExampleWidth{\scratchbox}% \placeExample[force][#2]{#3}{% \hbox to \textwidth{% \hbox{\typeexample[#1, before={\startstrangebox[width=\LeftExampleWidth]}, after={\stopstrangebox}]}\hss\unhbox\scratchbox}% }% } \def\simpleexample[#1]#2{% \setbox\scratchbox\hbox{#2}% \defineLeftExampleWidth{\scratchbox}% \placeExample[force,none][]{}{% \hbox to \textwidth{% \hbox{\typeexample[#1, before={\startstrangebox[width=\LeftExampleWidth]}, after={\stopstrangebox}]}\hss\unhbox\scratchbox}% }% \blank[back] } % 修改 MPcode 代码部分高亮颜色 \definestartstop [MetapostSnippetName] [color=darkblue, style=boldface] \definestartstop [MetapostSnippetNamePrimitive] [color=darkgreen, style=boldface] \def\BibTeX{B\scale[height=.5em]{IB}\TeX} \stopenvironment