delete content
This commit is contained in:
		
							parent
							
								
									a9f1cd6a67
								
							
						
					
					
						commit
						9e4ccb992c
					
				
					 6 changed files with 895 additions and 0 deletions
				
			
		
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							|  | @ -316,3 +316,5 @@ cython_debug/ | |||
| #  option (not recommended) you can uncomment the following to ignore the entire idea folder. | ||||
| #.idea/ | ||||
| 
 | ||||
| #VScode | ||||
| .vscode/ | ||||
|  |  | |||
							
								
								
									
										66
									
								
								typesetting/a.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								typesetting/a.md
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,66 @@ | |||
| 這个程式借Knuth ê排版理論,但是為著欲予列位知影所以mā是佇tsia介紹: | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| 
 | ||||
| ### 2.2 一个盒仔ê結構 | ||||
|  #### 2.2.1 咱這馬來看一个盒仔ê (Box) 結構,ē當分做若以上ê圖講ê部件: | ||||
|   | ||||
| `Box is a subtype of Element` | ||||
| 
 | ||||
| |屬性英語名|型別|臺語解說| | ||||
| |-----|----|-----| | ||||
| |  basePoint | Position| 定義安khǹg盒仔ê基點。 | | ||||
| | baseLineDirection | Rection | 定義基線(安khǹg元素ê基準線)ê方向| | ||||
| | width | float | 基線ê長度(pt) | ||||
| | height |float| BaseLine 射出去ê方向ê「倒pîng」ê長度 (pt)(m̄是kui个ê懸度 totalHeight) | ||||
| | depth | float | BaseLine 射出去ê方向ê「正pîng」ê長度 (pt) | ||||
| | elements | Element List | 所有內底收囥ê元素ê列單(list),照baseLineDirection ê 方向,沿 baseLine 排in ê基點 | ||||
| | elementsBaseSkip | float | `elementsSpaging[i] == elements[i] 基點之間ê距離 (BaseSkip)` (px) | ||||
| | pageNo | PageNo |  所屬佇ê頁數 | | ||||
| 
 | ||||
| 
 | ||||
| 其中 | ||||
| ```OCaml | ||||
| Position = struct {x: Float, y : Float} | ||||
| Direction = Up | Down | Left | Right | ||||
| ``` | ||||
| #### 2.2.2相關ê函數: | ||||
| 
 | ||||
| |英語名|型別|臺語解說| | ||||
| |-----|---|-------| | ||||
| |len_of_elements | box ->  int | len_of_elements box = length (box.elements) | ||||
| | totalHeight | box -> float | `totalHeight box  =  box.height + box.depth` | ||||
| | insert_element | box ->  element List -> Option | 插入一个`element List`內底ê逐个元素kàu一个Box,逐个baseSkip是固定ê float,轉來`Result Box` 猶是`Exception`(that滿ê時)。(例見下kha) | | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| ```OCaml | ||||
| let a_box = Box{ | ||||
| basePoint = (70.0,50.0), | ||||
| baseLineDirection = DOWN, | ||||
| width = 400.0, | ||||
| height = 700.0, | ||||
| depth = 0.0, | ||||
| elements = [], | ||||
| elementsBaseSkip = [], | ||||
| pageNo	 = 3 | ||||
| }; | ||||
| 
 | ||||
| let a_char_list = List.map [天, 地, 儂] fun x -> CharToBox     x | ||||
|     12.0 (*font-size*) | ||||
|     "AR PL New Sung" (*font-family*) | ||||
|     300 (*font weight*) | ||||
| 	  Normal (*font style*);; | ||||
| 
 | ||||
| let new_a_box = insert_element a_box a_char_list | ||||
|  new_a_box : Option Box | ||||
| ``` | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 其中 | ||||
| ```OCaml | ||||
| Option = Result a | Exception str | ||||
| ``` | ||||
							
								
								
									
										
											BIN
										
									
								
								typesetting/a.pdf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								typesetting/a.pdf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										707
									
								
								typesetting/a.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										707
									
								
								typesetting/a.svg
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,707 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||||
| <svg | ||||
|    version="1.1" | ||||
|    id="svg40" | ||||
|    sodipodi:docname="a.svg" | ||||
|    width="609.64789" | ||||
|    height="408" | ||||
|    inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)" | ||||
|    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||||
|    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||||
|    xmlns="http://www.w3.org/2000/svg" | ||||
|    xmlns:svg="http://www.w3.org/2000/svg"> | ||||
|   <defs | ||||
|      id="defs44"> | ||||
|     <marker | ||||
|        style="overflow:visible" | ||||
|        id="Arrow2Mstart" | ||||
|        refX="0.0" | ||||
|        refY="0.0" | ||||
|        orient="auto" | ||||
|        inkscape:stockid="Arrow2Mstart" | ||||
|        inkscape:isstock="true"> | ||||
|       <path | ||||
|          transform="scale(0.6) translate(0,0)" | ||||
|          d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " | ||||
|          style="stroke:context-stroke;fill-rule:evenodd;fill:context-stroke;stroke-width:0.62500000;stroke-linejoin:round" | ||||
|          id="path5984" /> | ||||
|     </marker> | ||||
|     <marker | ||||
|        style="overflow:visible" | ||||
|        id="marker6255" | ||||
|        refX="0.0" | ||||
|        refY="0.0" | ||||
|        orient="auto" | ||||
|        inkscape:stockid="Arrow1Sstart" | ||||
|        inkscape:isstock="true"> | ||||
|       <path | ||||
|          transform="scale(0.2) translate(6,0)" | ||||
|          style="fill-rule:evenodd;fill:context-stroke;stroke:context-stroke;stroke-width:1.0pt" | ||||
|          d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " | ||||
|          id="path6253" /> | ||||
|     </marker> | ||||
|     <marker | ||||
|        style="overflow:visible" | ||||
|        id="Arrow1Sstart" | ||||
|        refX="0.0" | ||||
|        refY="0.0" | ||||
|        orient="auto" | ||||
|        inkscape:stockid="Arrow1Sstart" | ||||
|        inkscape:isstock="true"> | ||||
|       <path | ||||
|          transform="scale(0.2) translate(6,0)" | ||||
|          style="fill-rule:evenodd;fill:context-stroke;stroke:context-stroke;stroke-width:1.0pt" | ||||
|          d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " | ||||
|          id="path5972" /> | ||||
|     </marker> | ||||
|     <marker | ||||
|        style="overflow:visible;" | ||||
|        id="Arrow1Mend" | ||||
|        refX="0.0" | ||||
|        refY="0.0" | ||||
|        orient="auto" | ||||
|        inkscape:stockid="Arrow1Mend" | ||||
|        inkscape:isstock="true"> | ||||
|       <path | ||||
|          transform="scale(0.4) rotate(180) translate(10,0)" | ||||
|          style="fill-rule:evenodd;fill:context-stroke;stroke:context-stroke;stroke-width:1.0pt;" | ||||
|          d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " | ||||
|          id="path5969" /> | ||||
|     </marker> | ||||
|     <marker | ||||
|        style="overflow:visible;" | ||||
|        id="Arrow1Send" | ||||
|        refX="0.0" | ||||
|        refY="0.0" | ||||
|        orient="auto" | ||||
|        inkscape:stockid="Arrow1Send" | ||||
|        inkscape:isstock="true"> | ||||
|       <path | ||||
|          transform="scale(0.2) rotate(180) translate(6,0)" | ||||
|          style="fill-rule:evenodd;fill:context-stroke;stroke:context-stroke;stroke-width:1.0pt;" | ||||
|          d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " | ||||
|          id="path5975" /> | ||||
|     </marker> | ||||
|     <marker | ||||
|        style="overflow:visible" | ||||
|        id="marker6221" | ||||
|        refX="0.0" | ||||
|        refY="0.0" | ||||
|        orient="auto" | ||||
|        inkscape:stockid="Arrow1Lstart" | ||||
|        inkscape:isstock="true"> | ||||
|       <path | ||||
|          transform="scale(0.8) translate(12.5,0)" | ||||
|          style="fill-rule:evenodd;fill:context-stroke;stroke:context-stroke;stroke-width:1.0pt" | ||||
|          d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " | ||||
|          id="path5960" /> | ||||
|     </marker> | ||||
|     <marker | ||||
|        style="overflow:visible" | ||||
|        id="Arrow1Lstart" | ||||
|        refX="0.0" | ||||
|        refY="0.0" | ||||
|        orient="auto" | ||||
|        inkscape:stockid="Arrow1Lstart" | ||||
|        inkscape:isstock="true"> | ||||
|       <path | ||||
|          transform="scale(0.8) translate(12.5,0)" | ||||
|          style="fill-rule:evenodd;fill:context-stroke;stroke:context-stroke;stroke-width:1.0pt" | ||||
|          d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " | ||||
|          id="path890" /> | ||||
|     </marker> | ||||
|     <marker | ||||
|        style="overflow:visible;" | ||||
|        id="Arrow1Lend" | ||||
|        refX="0.0" | ||||
|        refY="0.0" | ||||
|        orient="auto" | ||||
|        inkscape:stockid="Arrow1Lend" | ||||
|        inkscape:isstock="true"> | ||||
|       <path | ||||
|          transform="scale(0.8) rotate(180) translate(12.5,0)" | ||||
|          style="fill-rule:evenodd;fill:context-stroke;stroke:context-stroke;stroke-width:1.0pt;" | ||||
|          d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " | ||||
|          id="path893" /> | ||||
|     </marker> | ||||
|   </defs> | ||||
|   <sodipodi:namedview | ||||
|      id="namedview42" | ||||
|      pagecolor="#ffffff" | ||||
|      bordercolor="#666666" | ||||
|      borderopacity="1.0" | ||||
|      inkscape:pageshadow="2" | ||||
|      inkscape:pageopacity="0.0" | ||||
|      inkscape:pagecheckerboard="0" | ||||
|      showgrid="false" | ||||
|      fit-margin-top="0" | ||||
|      fit-margin-left="0" | ||||
|      fit-margin-right="0" | ||||
|      fit-margin-bottom="0" | ||||
|      inkscape:zoom="1.6946993" | ||||
|      inkscape:cx="261.69834" | ||||
|      inkscape:cy="212.42707" | ||||
|      inkscape:window-width="1920" | ||||
|      inkscape:window-height="980" | ||||
|      inkscape:window-x="0" | ||||
|      inkscape:window-y="28" | ||||
|      inkscape:window-maximized="1" | ||||
|      inkscape:current-layer="g12565" /> | ||||
|   <marker | ||||
|      id="arrow" | ||||
|      viewBox="0 0 10 10" | ||||
|      refX="5" | ||||
|      refY="5" | ||||
|      markerWidth="6" | ||||
|      markerHeight="6" | ||||
|      orient="auto-start-reverse" | ||||
|      transform="translate(-21.576153,-17.500023)"> | ||||
|     <path | ||||
|        d="M 0,0 10,5 0,10 Z" | ||||
|        id="path2" /> | ||||
|   </marker> | ||||
|   <g | ||||
|      class="layer" | ||||
|      id="g38" | ||||
|      transform="matrix(0.90499103,0,0,0.90499103,-16.07055,7.3611918)" | ||||
|      style="stroke-width:1.10498"> | ||||
|     <title | ||||
|        opacity="0.33" | ||||
|        id="title5">Layer 1</title> | ||||
|     <g | ||||
|        id="svg_31" | ||||
|        style="stroke-width:1.10498"> | ||||
|       <g | ||||
|          id="g12565"> | ||||
|         <rect | ||||
|            fill="#ffd4aa" | ||||
|            stroke="#7f3f00" | ||||
|            stroke-dasharray="none" | ||||
|            stroke-linejoin="null" | ||||
|            stroke-linecap="null" | ||||
|            x="73.341515" | ||||
|            y="35" | ||||
|            width="457.85565" | ||||
|            height="390.00003" | ||||
|            id="svg_4" | ||||
|            style="fill:#80e5ff;stroke:#004455;stroke-width:1.22099" /> | ||||
|         <rect | ||||
|            fill="#aad4ff" | ||||
|            stroke="#000000" | ||||
|            stroke-dasharray="none" | ||||
|            stroke-linejoin="null" | ||||
|            stroke-linecap="null" | ||||
|            x="76" | ||||
|            y="321.62988" | ||||
|            width="451" | ||||
|            height="101.22398" | ||||
|            id="svg_6" | ||||
|            stroke-width="0" | ||||
|            style="fill:#cccccc" /> | ||||
|         <rect | ||||
|            fill="#aaffaa" | ||||
|            stroke="#000000" | ||||
|            stroke-dasharray="none" | ||||
|            stroke-linejoin="null" | ||||
|            stroke-linecap="null" | ||||
|            x="76.017204" | ||||
|            y="36.488998" | ||||
|            width="452.92438" | ||||
|            height="281.1409" | ||||
|            id="svg_5" | ||||
|            stroke-width="0" | ||||
|            style="fill:#f9f9f9" /> | ||||
|         <text | ||||
|            fill="#000000" | ||||
|            stroke="#000000" | ||||
|            x="78" | ||||
|            y="359" | ||||
|            id="svg_2" | ||||
|            stroke-width="0" | ||||
|            font-size="24px" | ||||
|            font-family="Serif" | ||||
|            text-anchor="middle" | ||||
|            xml:space="preserve">BasePoint</text> | ||||
|         <line | ||||
|            fill="none" | ||||
|            stroke="#000000" | ||||
|            x1="72" | ||||
|            y1="318" | ||||
|            x2="525" | ||||
|            y2="319" | ||||
|            id="svg_1" | ||||
|            stroke-width="5.52492" | ||||
|            marker-end="url(#mkr_end_svg_1)" /> | ||||
|         <text | ||||
|            fill="#000000" | ||||
|            stroke="#000000" | ||||
|            stroke-dasharray="none" | ||||
|            stroke-linejoin="null" | ||||
|            stroke-linecap="null" | ||||
|            stroke-opacity="null" | ||||
|            fill-opacity="null" | ||||
|            x="268" | ||||
|            y="357" | ||||
|            id="svg_7" | ||||
|            stroke-width="0" | ||||
|            font-size="24px" | ||||
|            font-family="Serif" | ||||
|            text-anchor="middle" | ||||
|            xml:space="preserve">baseline</text> | ||||
|         <line | ||||
|            fill="none" | ||||
|            stroke="#000000" | ||||
|            stroke-dasharray="none" | ||||
|            stroke-linejoin="null" | ||||
|            stroke-linecap="null" | ||||
|            stroke-opacity="null" | ||||
|            fill-opacity="null" | ||||
|            x1="552" | ||||
|            y1="45.5" | ||||
|            x2="550" | ||||
|            y2="304.5" | ||||
|            id="svg_9" | ||||
|            stroke-width="5.52492" | ||||
|            marker-start="url(#mkr_start_svg_9)" | ||||
|            marker-end="url(#mkr_end_svg_9)" | ||||
|            style="stroke-width:2.32046499;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Lend);marker-start:url(#Arrow1Lstart)" /> | ||||
|         <line | ||||
|            fill="none" | ||||
|            stroke="#000000" | ||||
|            stroke-dasharray="none" | ||||
|            stroke-linejoin="null" | ||||
|            stroke-linecap="null" | ||||
|            stroke-opacity="null" | ||||
|            fill-opacity="null" | ||||
|            x1="550" | ||||
|            y1="336.5" | ||||
|            x2="548" | ||||
|            y2="419.5" | ||||
|            id="svg_10" | ||||
|            stroke-width="5.52492" | ||||
|            marker-start="url(#mkr_start_svg_10)" | ||||
|            marker-end="url(#mkr_end_svg_10)" | ||||
|            points="null" | ||||
|            style="stroke-width:2.32046499;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Lend);marker-start:url(#Arrow1Lstart)" /> | ||||
|         <text | ||||
|            fill="#000000" | ||||
|            stroke="#000000" | ||||
|            stroke-dasharray="none" | ||||
|            stroke-linejoin="null" | ||||
|            stroke-linecap="null" | ||||
|            stroke-opacity="null" | ||||
|            fill-opacity="null" | ||||
|            x="-130.66095" | ||||
|            y="580.26727" | ||||
|            id="svg_11" | ||||
|            stroke-width="0" | ||||
|            font-size="24px" | ||||
|            font-family="Serif" | ||||
|            text-anchor="middle" | ||||
|            xml:space="preserve" | ||||
|            transform="rotate(-89.8542)">Height</text> | ||||
|         <text | ||||
|            fill="#000000" | ||||
|            stroke="#000000" | ||||
|            stroke-dasharray="none" | ||||
|            stroke-linejoin="null" | ||||
|            stroke-linecap="null" | ||||
|            stroke-opacity="null" | ||||
|            fill-opacity="null" | ||||
|            x="-378.24261" | ||||
|            y="575.53882" | ||||
|            id="svg_12" | ||||
|            stroke-width="0" | ||||
|            font-size="24.663px" | ||||
|            font-family="Serif" | ||||
|            text-anchor="middle" | ||||
|            xml:space="preserve" | ||||
|            transform="matrix(0.00212976,-0.98966842,1.0104348,0.00217445,0,0)">Depth</text> | ||||
|         <rect | ||||
|            fill="#ffaaaa" | ||||
|            stroke="#000000" | ||||
|            stroke-dasharray="none" | ||||
|            stroke-linejoin="null" | ||||
|            stroke-linecap="null" | ||||
|            stroke-opacity="null" | ||||
|            fill-opacity="1" | ||||
|            x="76" | ||||
|            y="123.47569" | ||||
|            width="48.728134" | ||||
|            height="191.52432" | ||||
|            id="svg_13" | ||||
|            stroke-width="1.22099" | ||||
|            style="fill:#999999" /> | ||||
|         <rect | ||||
|            fill="#ffaaaa" | ||||
|            stroke="#000000" | ||||
|            stroke-dasharray="none" | ||||
|            stroke-linejoin="null" | ||||
|            stroke-linecap="null" | ||||
|            stroke-opacity="null" | ||||
|            fill-opacity="1" | ||||
|            x="158" | ||||
|            y="38.000008" | ||||
|            width="54" | ||||
|            height="279" | ||||
|            stroke-width="1.22099" | ||||
|            id="svg_14" | ||||
|            opacity="0.9" | ||||
|            style="fill:#999999" /> | ||||
|         <rect | ||||
|            fill="#ffaaaa" | ||||
|            stroke="#000000" | ||||
|            stroke-dasharray="none" | ||||
|            stroke-linejoin="null" | ||||
|            stroke-linecap="null" | ||||
|            stroke-opacity="null" | ||||
|            fill-opacity="1" | ||||
|            x="251.65202" | ||||
|            y="123.97606" | ||||
|            width="53.347977" | ||||
|            height="193.02394" | ||||
|            stroke-width="1.22099" | ||||
|            id="svg_15" | ||||
|            opacity="0.8" | ||||
|            ry="0" | ||||
|            style="fill:#999999" /> | ||||
|         <rect | ||||
|            fill="#ffaaaa" | ||||
|            stroke="#000000" | ||||
|            stroke-dasharray="none" | ||||
|            stroke-linejoin="null" | ||||
|            stroke-linecap="null" | ||||
|            stroke-opacity="null" | ||||
|            fill-opacity="1" | ||||
|            x="343" | ||||
|            y="37.000008" | ||||
|            width="54" | ||||
|            height="279" | ||||
|            stroke-width="1.22099" | ||||
|            id="svg_16" | ||||
|            opacity="0.7" | ||||
|            style="fill:#999999" /> | ||||
|         <text | ||||
|            fill="#000000" | ||||
|            stroke="#000000" | ||||
|            stroke-dasharray="none" | ||||
|            stroke-linejoin="null" | ||||
|            stroke-linecap="null" | ||||
|            stroke-opacity="null" | ||||
|            opacity="0.6" | ||||
|            x="463.15213" | ||||
|            y="207.70723" | ||||
|            id="svg_18" | ||||
|            stroke-width="0" | ||||
|            font-size="24px" | ||||
|            font-family="Serif" | ||||
|            text-anchor="middle" | ||||
|            xml:space="preserve" | ||||
|            style="fill:#112b00;opacity:1">........</text> | ||||
|         <text | ||||
|            fill="#000000" | ||||
|            stroke="#000000" | ||||
|            stroke-dasharray="none" | ||||
|            stroke-linejoin="null" | ||||
|            stroke-linecap="null" | ||||
|            opacity="0.6" | ||||
|            x="104.44923" | ||||
|            y="256.72067" | ||||
|            id="svg_19" | ||||
|            stroke-width="0" | ||||
|            font-size="24px" | ||||
|            font-family="Serif" | ||||
|            text-anchor="middle" | ||||
|            xml:space="preserve" | ||||
|            style="opacity:1;fill:#112b00"><tspan | ||||
|              style="font-weight:bold" | ||||
|              id="tspan15178">elements[0]</tspan></text> | ||||
|         <text | ||||
|            fill="#000000" | ||||
|            stroke="#000000" | ||||
|            stroke-dasharray="none" | ||||
|            stroke-linejoin="null" | ||||
|            stroke-linecap="null" | ||||
|            opacity="0.6" | ||||
|            x="188.83765" | ||||
|            y="214.46722" | ||||
|            stroke-width="0" | ||||
|            font-size="24px" | ||||
|            font-family="Serif" | ||||
|            text-anchor="middle" | ||||
|            xml:space="preserve" | ||||
|            id="svg_20" | ||||
|            style="opacity:1;fill:#112b00"><tspan | ||||
|              style="font-weight:bold" | ||||
|              id="tspan16020">elements[1]</tspan></text> | ||||
|         <text | ||||
|            fill="#000000" | ||||
|            stroke="#000000" | ||||
|            stroke-dasharray="none" | ||||
|            stroke-linejoin="null" | ||||
|            stroke-linecap="null" | ||||
|            opacity="0.6" | ||||
|            x="267.2164" | ||||
|            y="239.60681" | ||||
|            stroke-width="0" | ||||
|            font-size="24px" | ||||
|            font-family="Serif" | ||||
|            text-anchor="middle" | ||||
|            xml:space="preserve" | ||||
|            id="svg_21" | ||||
|            style="opacity:1;fill:#112b00"><tspan | ||||
|              style="font-weight:bold" | ||||
|              id="tspan16544">elements[2]</tspan></text> | ||||
|         <text | ||||
|            fill="#000000" | ||||
|            stroke="#000000" | ||||
|            stroke-dasharray="none" | ||||
|            stroke-linejoin="null" | ||||
|            stroke-linecap="null" | ||||
|            opacity="0.6" | ||||
|            x="389.68384" | ||||
|            y="213.11049" | ||||
|            stroke-width="0" | ||||
|            font-size="24px" | ||||
|            font-family="Serif" | ||||
|            text-anchor="middle" | ||||
|            xml:space="preserve" | ||||
|            id="svg_22" | ||||
|            style="opacity:1;fill:#112b00"><tspan | ||||
|              style="font-weight:bold" | ||||
|              id="tspan17138">elements[3]</tspan></text> | ||||
|         <text | ||||
|            fill="#000000" | ||||
|            stroke="#000000" | ||||
|            stroke-dasharray="none" | ||||
|            stroke-linejoin="null" | ||||
|            stroke-linecap="null" | ||||
|            stroke-opacity="null" | ||||
|            opacity="1" | ||||
|            x="228" | ||||
|            y="119" | ||||
|            id="svg_24" | ||||
|            stroke-width="0" | ||||
|            font-size="24px" | ||||
|            font-family="Serif" | ||||
|            text-anchor="middle" | ||||
|            xml:space="preserve">elements</text> | ||||
|         <line | ||||
|            fill="none" | ||||
|            stroke="#000000" | ||||
|            stroke-dasharray="none" | ||||
|            stroke-linejoin="null" | ||||
|            stroke-linecap="null" | ||||
|            stroke-opacity="null" | ||||
|            fill-opacity="null" | ||||
|            opacity="1" | ||||
|            x1="591" | ||||
|            y1="39" | ||||
|            x2="595" | ||||
|            y2="425" | ||||
|            id="svg_27" | ||||
|            marker-start="url(#mkr_start_svg_27)" | ||||
|            marker-end="url(#mkr_end_svg_27)" | ||||
|            stroke-width="5.52492" | ||||
|            style="stroke-width:2.32046499;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Lend);marker-start:url(#Arrow1Lstart)" /> | ||||
|         <text | ||||
|            fill="#000000" | ||||
|            stroke="#000000" | ||||
|            stroke-dasharray="none" | ||||
|            stroke-linejoin="null" | ||||
|            stroke-linecap="null" | ||||
|            stroke-opacity="null" | ||||
|            fill-opacity="null" | ||||
|            opacity="1" | ||||
|            x="-256.40897" | ||||
|            y="620.12408" | ||||
|            id="svg_28" | ||||
|            stroke-width="0" | ||||
|            font-size="24px" | ||||
|            font-family="Serif" | ||||
|            text-anchor="middle" | ||||
|            xml:space="preserve" | ||||
|            transform="rotate(-90.8669)">TotalHeight = Depth + Height</text> | ||||
|         <text | ||||
|            fill="#000000" | ||||
|            stroke="#000000" | ||||
|            stroke-dasharray="none" | ||||
|            stroke-linejoin="null" | ||||
|            stroke-linecap="null" | ||||
|            stroke-opacity="null" | ||||
|            fill-opacity="null" | ||||
|            x="474.92035" | ||||
|            y="260.01868" | ||||
|            id="svg_29" | ||||
|            stroke-width="0" | ||||
|            font-size="24px" | ||||
|            font-family="Serif" | ||||
|            text-anchor="middle" | ||||
|            xml:space="preserve" | ||||
|            style="fill:#000000"><tspan | ||||
|              sodipodi:role="line" | ||||
|              id="tspan2301" | ||||
|              x="474.92035" | ||||
|              y="260.01868"><tspan | ||||
|                style="font-weight:bold;fill:#000000" | ||||
|                id="tspan1192">Upper</tspan></tspan><tspan | ||||
|              sodipodi:role="line" | ||||
|              id="tspan2303" | ||||
|              x="474.92035" | ||||
|              y="290.01868"><tspan | ||||
|                style="font-weight:bold;fill:#000000" | ||||
|                id="tspan2305">Block</tspan></tspan></text> | ||||
|         <text | ||||
|            fill="#000000" | ||||
|            stroke="#000000" | ||||
|            stroke-dasharray="none" | ||||
|            stroke-linejoin="null" | ||||
|            stroke-linecap="null" | ||||
|            stroke-opacity="null" | ||||
|            fill-opacity="null" | ||||
|            x="464.3504" | ||||
|            y="379.0249" | ||||
|            id="svg_30" | ||||
|            stroke-width="0" | ||||
|            font-size="24px" | ||||
|            font-family="Serif" | ||||
|            text-anchor="middle" | ||||
|            xml:space="preserve" | ||||
|            style="fill:#000000"><tspan | ||||
|              sodipodi:role="line" | ||||
|              id="tspan4736" | ||||
|              x="464.3504" | ||||
|              y="379.0249" | ||||
|              style="font-weight:bold">Lower</tspan><tspan | ||||
|              sodipodi:role="line" | ||||
|              id="tspan4738" | ||||
|              x="464.3504" | ||||
|              y="409.0249" | ||||
|              style="font-weight:bold">Block</tspan></text> | ||||
|         <line | ||||
|            fill="none" | ||||
|            stroke="#000000" | ||||
|            x1="72" | ||||
|            y1="318" | ||||
|            x2="525" | ||||
|            y2="319" | ||||
|            id="line1166" | ||||
|            stroke-width="5.52492" | ||||
|            marker-end="url(#mkr_end_svg_1)" /> | ||||
|         <line | ||||
|            fill="none" | ||||
|            stroke="#000000" | ||||
|            x1="72" | ||||
|            y1="318" | ||||
|            x2="525" | ||||
|            y2="319" | ||||
|            id="line1168" | ||||
|            stroke-width="5.52492" | ||||
|            marker-end="url(#mkr_end_svg_1)" | ||||
|            style="marker-end:url(#Arrow1Lend);stroke-width:3.53594665;stroke-miterlimit:4;stroke-dasharray:none" /> | ||||
|         <text | ||||
|            fill="#000000" | ||||
|            stroke="#000000" | ||||
|            stroke-dasharray="none" | ||||
|            stroke-linejoin="null" | ||||
|            stroke-linecap="null" | ||||
|            stroke-opacity="null" | ||||
|            opacity="0.6" | ||||
|            x="391.39377" | ||||
|            y="348.20901" | ||||
|            id="svg_25" | ||||
|            stroke-width="0" | ||||
|            font-size="24px" | ||||
|            font-family="Serif" | ||||
|            text-anchor="middle" | ||||
|            xml:space="preserve"><tspan | ||||
|              style="font-weight:bold" | ||||
|              id="tspan10065">DIRECTION</tspan></text> | ||||
|         <ellipse | ||||
|            fill="#000000" | ||||
|            stroke="#000000" | ||||
|            stroke-dasharray="none" | ||||
|            stroke-linejoin="null" | ||||
|            stroke-linecap="null" | ||||
|            stroke-opacity="null" | ||||
|            fill-opacity="null" | ||||
|            cx="70" | ||||
|            cy="315" | ||||
|            rx="11" | ||||
|            ry="10" | ||||
|            id="svg_3" | ||||
|            style="stroke-width:1.22099" /> | ||||
|         <path | ||||
|            style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.10498px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | ||||
|            d="M 90.674137,191.47466 223.67621,129.24703 495.83797,188.90636" | ||||
|            id="path17787" /> | ||||
|         <line | ||||
|            fill="none" | ||||
|            stroke="#000000" | ||||
|            stroke-dasharray="none" | ||||
|            stroke-linejoin="null" | ||||
|            stroke-linecap="null" | ||||
|            stroke-opacity="null" | ||||
|            fill-opacity="null" | ||||
|            x1="73.030869" | ||||
|            y1="94.787674" | ||||
|            x2="530.2196" | ||||
|            y2="96.787674" | ||||
|            id="svg_8" | ||||
|            stroke-width="5.52492" | ||||
|            marker-start="url(#mkr_start_svg_8)" | ||||
|            marker-end="url(#mkr_end_svg_8)" | ||||
|            style="stroke-width:2.32047;stroke-miterlimit:4;stroke-dasharray:none;marker-start:url(#Arrow1Lstart);marker-end:url(#Arrow1Lend)" /> | ||||
|         <text | ||||
|            fill="#000000" | ||||
|            stroke="#000000" | ||||
|            stroke-dasharray="none" | ||||
|            stroke-linejoin="null" | ||||
|            stroke-linecap="null" | ||||
|            stroke-opacity="null" | ||||
|            opacity="1" | ||||
|            x="365.38895" | ||||
|            y="78.041893" | ||||
|            id="svg_26" | ||||
|            stroke-width="0" | ||||
|            font-size="24px" | ||||
|            font-family="Serif" | ||||
|            text-anchor="middle" | ||||
|            xml:space="preserve">width = length of baseline</text> | ||||
|         <path | ||||
|            style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.10498px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow2Mstart);marker-end:url(#Arrow1Mend)" | ||||
|            d="m 78.893257,297.2524 c 25.335103,-0.29637 77.594233,-2.69285 77.594233,-2.69285 v 0" | ||||
|            id="path5958" | ||||
|            sodipodi:nodetypes="ccc" /> | ||||
|         <path | ||||
|            style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.10498px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | ||||
|            d="m 143.11924,291.10504 34.21072,-5.69531" | ||||
|            id="path10114" | ||||
|            sodipodi:nodetypes="cc" /> | ||||
|         <text | ||||
|            xml:space="preserve" | ||||
|            style="font-size:20.6264px;line-height:125%;font-family:'芫荽';-inkscape-font-specification:'芫荽';letter-spacing:0px;word-spacing:0px;fill:none;stroke:#000000;stroke-width:1.10498px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | ||||
|            x="178.12022" | ||||
|            y="295.83621" | ||||
|            id="text13364"><tspan | ||||
|              sodipodi:role="line" | ||||
|              id="tspan13362" | ||||
|              style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20.6264px;font-family:Serif;-inkscape-font-specification:Serif;fill:#000000;stroke:none;stroke-width:1.10498px" | ||||
|              x="178.12022" | ||||
|              y="295.83621">elementBaseSkip[0]</tspan></text> | ||||
|         <text | ||||
|            xml:space="preserve" | ||||
|            style="font-size:52.0404px;line-height:125%;font-family:'芫荽';-inkscape-font-specification:'芫荽';letter-spacing:0px;word-spacing:0px;fill:#d45500;stroke:#000000;stroke-width:1.10498px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | ||||
|            x="79.299843" | ||||
|            y="29.337093" | ||||
|            id="text8038" | ||||
|            transform="scale(1.0388624,0.9625914)"><tspan | ||||
|              sodipodi:role="line" | ||||
|              id="tspan8036" | ||||
|              style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:FreeSerif;-inkscape-font-specification:FreeSerif;fill:#004455;stroke:none;stroke-width:1.10498px" | ||||
|              x="79.299843" | ||||
|              y="29.337093">Box</tspan></text> | ||||
|       </g> | ||||
|     </g> | ||||
|   </g> | ||||
| </svg> | ||||
| After Width: | Height: | Size: 22 KiB | 
							
								
								
									
										120
									
								
								typesetting/a.typ
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								typesetting/a.typ
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,120 @@ | |||
| #set text( | ||||
|     size: 12pt, | ||||
|     font: ("Linux Libertine", "Noto Serif CJK TC"),// "Linux Libertine Mono O" | ||||
|     ) | ||||
| 
 | ||||
| #let hd1(txt) = box[ | ||||
|     #set text( | ||||
|     font: ("FreeSans", "Noto Sans CJK TC"),// "Linux Libertine Mono O" | ||||
|     ) | ||||
|     = #txt ] | ||||
| 
 | ||||
| #let hd2(txt) = box[ | ||||
|     #set text( | ||||
|     font: ("FreeSans", "Noto Sans CJK TC"),// "Linux Libertine Mono O" | ||||
|     ) | ||||
|     == #txt ] | ||||
| 
 | ||||
| 這个程式借Knuth ê排版理論,但是為著beh予列位知影所以mā是佇tsia介紹: | ||||
| 
 | ||||
| #figure([#image("a.svg")], | ||||
|   caption: [ | ||||
|     a.svg | ||||
|   ] | ||||
| ) | ||||
| 
 | ||||
| === 2.2 一个盒仔ê結構 | ||||
| <一个盒仔ê結構> | ||||
| 
 | ||||
| ==== 2.2.1 咱tsit-má來看一个盒仔(Box) ê 結構,ē當分做若以上ê圖講ê部件: | ||||
| 
 | ||||
| `Box is a subtype of Element` | ||||
| 
 | ||||
| #align(center)[#table( | ||||
|   columns: 3, | ||||
|   align: (col, row) => (auto,auto,auto,).at(col), | ||||
|   inset: 6pt, | ||||
|   [屬性英語名], [型別], [臺語解說], | ||||
|   [basePoint], | ||||
|   [Position], | ||||
|   [定義安khǹg盒仔ê基點。], | ||||
|   [baseLineDirection], | ||||
|   [Rection], | ||||
|   [定義基線(安khǹg元素ê基準線)ê方向], | ||||
|   [width], | ||||
|   [float], | ||||
|   [基線ê長度(pt)], | ||||
|   [height], | ||||
|   [float], | ||||
|   [BaseLine 射出去ê方向ê「倒pîng」ê長度 (pt)(m̄是kui个ê懸度 | ||||
|   totalHeight)], | ||||
|   [depth], | ||||
|   [float], | ||||
|   [BaseLine 射出去ê方向ê「正pîng」 ê 長度 (pt)], | ||||
|   [elements], | ||||
|   [Element List], | ||||
|   [所有內底收囥ê元素ê列單(list),照baseLineDirection ê 方向,沿 baseLine | ||||
|   排in ê基點], | ||||
|   [elementsBaseSkip], | ||||
|   [float List], | ||||
|   [`elementsSpaging[i] == elements[i] 基點之間ê距離 (BaseSkip)` (px)], | ||||
|   [pageNo], | ||||
|   [Int], | ||||
|   [所屬佇ê頁數], | ||||
| ) | ||||
| ] | ||||
| 
 | ||||
| 其中 | ||||
| 
 | ||||
| ```ocaml | ||||
| Position = struct {x: Float, y : Float} | ||||
| Direction = Up | Down | Left | Right | ||||
| ``` | ||||
| 
 | ||||
| ==== 2.2.2相關ê函數: | ||||
| <相關ê函數> | ||||
| #align(center)[#table( | ||||
|   columns: 3, | ||||
|   align: (col, row) => (auto,auto,auto,).at(col), | ||||
|   inset: 6pt, | ||||
|   [英語名], [型別], [臺語解說], | ||||
|   [len\_of\_elements], | ||||
|   [box -\> int], | ||||
|   [len\_of\_elements box \= length (box.elements)], | ||||
|   [totalHeight], | ||||
|   [box -\> float], | ||||
|   [`totalHeight box  =  box.height + box.depth`], | ||||
|   [insert\_element], | ||||
|   [box -\> element List -\> float -\> Option], | ||||
|   [插入一个`element List`內底ê逐个元素kàu一个Box,逐个baseSkip是固定ê | ||||
|   float,轉來`Result Box` á是`Exception`(that滿ê時)。(例見下kha)], | ||||
| ) | ||||
| ] | ||||
| 
 | ||||
| ```ocaml | ||||
| let a_box = Box{ | ||||
| basePoint = (70.0,50.0), | ||||
| baseLineDirection = DOWN, | ||||
| width = 400.0, | ||||
| height = 700.0, | ||||
| depth = 0.0, | ||||
| elements = [], | ||||
| elementsBaseSkip = [], | ||||
| pageNo   = 3 | ||||
| }; | ||||
| 
 | ||||
| let a_char_list = List.map [天, 地, 儂] fun x -> CharToBox     x | ||||
|     12.0 (*font-size*) | ||||
|     "AR PL New Sung" (*font-family*) | ||||
|     300 (*font weight*) | ||||
|       Normal (*font style*);; | ||||
| 
 | ||||
| let new_a_box = insert_element a_box a_char_list 15 | ||||
| (* new_a_box : Option Box *) | ||||
| ``` | ||||
| 
 | ||||
| 其中 | ||||
| 
 | ||||
| ```ocaml | ||||
| Option = Result a | Exception str | ||||
| ``` | ||||
							
								
								
									
										
											BIN
										
									
								
								typesetting/雜記.odt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								typesetting/雜記.odt
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
		Loading…
	
		Reference in a new issue