#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
```
