Mochi0622 commited on
Commit
d5d9742
·
1 Parent(s): 34df248

update files

Browse files
Files changed (43) hide show
  1. .gitattributes +1 -0
  2. TaipeiSansTCBeta-Regular.ttf +3 -0
  3. assets/Ch14_6_contour_curve_gradient_2D.svg +3 -0
  4. assets/Ch14_6_curve_tangent_plane_gradient_3D.svg +3 -0
  5. assets/Ch14_6_directional_derivative_3D.svg +3 -0
  6. assets/Ch14_6_directional_derivative_formula.svg +3 -0
  7. assets/Ch14_6_directional_derivative_gradient.svg +3 -0
  8. assets/Ch14_6_directional_derivative_gradient_3D.svg +3 -0
  9. assets/Ch14_6_directional_derivative_idea.svg +3 -0
  10. assets/Ch14_6_ex1.png +3 -0
  11. assets/Ch14_6_ex7.png +3 -0
  12. assets/Ch14_6_ex_compute_directional_direction.svg +3 -0
  13. assets/Ch14_6_ex_compute_directional_direction_not_normalized.svg +3 -0
  14. assets/Ch14_6_ex_max_directional_direction.svg +3 -0
  15. assets/Ch14_6_ex_tangent_contour_curve.svg +3 -0
  16. assets/Ch14_6_level_surface_gradient_3D.svg +3 -0
  17. assets/Ch14_6_max_directional_derivative_gradient_3D.svg +3 -0
  18. assets/Ch14_6_max_directional_direction.svg +3 -0
  19. assets/Ch14_6_max_directional_direction_gradient.svg +3 -0
  20. assets/Ch14_6_normal_line_gradient_3D.svg +3 -0
  21. assets/Ch14_6_partial_exist_directional_not.svg +3 -0
  22. assets/Ch14_6_tangent_plane_gradient_3D.svg +3 -0
  23. assets/Hant.svg +3 -0
  24. assets/SaddlePoint.png +3 -0
  25. assets/The_Directional_Derivative.png +3 -0
  26. assets/logo.png +3 -0
  27. assets/maximum.png +3 -0
  28. assets/partial_derivative.png +3 -0
  29. assets/—Pngtree—smiling emoji face giving thumbs_21439833.png +3 -0
  30. assets/—Pngtree—smiling face with thumbs up_17920558.png +3 -0
  31. assets/—Pngtree—thinking and smiling face emoji_17269046.png +3 -0
  32. layout/page/sections.py +0 -1
  33. layout/renderer/dt_callbacks.py +2 -65
  34. layout/renderer/dt_quiz.py +0 -8
  35. layout/renderer/dt_render_blocks.py +60 -51
  36. layout/shell/callbacks.py +0 -15
  37. layout/shell/header.py +4 -22
  38. pages/Ch14/C14_6/Md_14_6.md +0 -0
  39. pages/Ch14/C14_6/exported_result_14_6.json +0 -0
  40. pages/Ch14/C14_7/exported_result_14_7.json +201 -201
  41. pages/Ch14/C14_8/exported_result_14_8.json +126 -126
  42. pages/home.py +12 -19
  43. 中文.tex +11 -0
.gitattributes CHANGED
@@ -38,3 +38,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
38
  *.jpeg filter=lfs diff=lfs merge=lfs -text
39
  *.svg filter=lfs diff=lfs merge=lfs -text
40
  *.gif filter=lfs diff=lfs merge=lfs -text
 
 
38
  *.jpeg filter=lfs diff=lfs merge=lfs -text
39
  *.svg filter=lfs diff=lfs merge=lfs -text
40
  *.gif filter=lfs diff=lfs merge=lfs -text
41
+ *.ttf filter=lfs diff=lfs merge=lfs -text
TaipeiSansTCBeta-Regular.ttf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8cc967e1e428c552701c461e8169e6ae76c7a23694ea1a6a786d6746adec53c4
3
+ size 20659344
assets/Ch14_6_contour_curve_gradient_2D.svg ADDED

Git LFS Details

  • SHA256: 117f73cb97d92a1d57999a8b5e78209965b124df8e5fd7f39e3d041b63c7ca1d
  • Pointer size: 131 Bytes
  • Size of remote file: 520 kB
assets/Ch14_6_curve_tangent_plane_gradient_3D.svg ADDED

Git LFS Details

  • SHA256: 272eb1805ff76369c71d14d62fcb7dbdba850120412e46175039685d33aa66c4
  • Pointer size: 131 Bytes
  • Size of remote file: 642 kB
assets/Ch14_6_directional_derivative_3D.svg ADDED

Git LFS Details

  • SHA256: 8b087b4124f7d87be616c6497ceb3c12824c68f800c327cc8a28a209f47041c7
  • Pointer size: 131 Bytes
  • Size of remote file: 365 kB
assets/Ch14_6_directional_derivative_formula.svg ADDED

Git LFS Details

  • SHA256: 84433abbee24b2f8e6075c3d839fb740b467bde02f577478b6fc31f028936d0b
  • Pointer size: 132 Bytes
  • Size of remote file: 4.92 MB
assets/Ch14_6_directional_derivative_gradient.svg ADDED

Git LFS Details

  • SHA256: 555329534c05e92cc9ca920c7a4bda44b98a062240d39a596e217d0a9ddd2cf5
  • Pointer size: 133 Bytes
  • Size of remote file: 25.8 MB
assets/Ch14_6_directional_derivative_gradient_3D.svg ADDED

Git LFS Details

  • SHA256: 236f886418208c44e7817fbfe1fc8b2edfaa13ce6b9684db7c0d87e08b6567f9
  • Pointer size: 132 Bytes
  • Size of remote file: 7.14 MB
assets/Ch14_6_directional_derivative_idea.svg ADDED

Git LFS Details

  • SHA256: 856a9e0f49590af8e500dd2e9c9cd631c255dc78fe2cca0341223f649f64ccab
  • Pointer size: 132 Bytes
  • Size of remote file: 6.4 MB
assets/Ch14_6_ex1.png ADDED

Git LFS Details

  • SHA256: 84a8c16dc1433e65d545bd1a732fafeeaaba4fa2ff6b2809ee9ccdf003438251
  • Pointer size: 131 Bytes
  • Size of remote file: 134 kB
assets/Ch14_6_ex7.png ADDED

Git LFS Details

  • SHA256: 155a905a1e3841fd765fa6e15d7a3a019279eac3e61b9e899c44c768732b18a5
  • Pointer size: 131 Bytes
  • Size of remote file: 271 kB
assets/Ch14_6_ex_compute_directional_direction.svg ADDED

Git LFS Details

  • SHA256: 0ad1121139e7ae64bb8260abd42525b385d70b5cbedacb245c5eea0fdc449b4a
  • Pointer size: 131 Bytes
  • Size of remote file: 712 kB
assets/Ch14_6_ex_compute_directional_direction_not_normalized.svg ADDED

Git LFS Details

  • SHA256: 0b1fb9f5f288b4fdffca3825c7153a54b935caa848ed5862d5ede9b2c60ae1bb
  • Pointer size: 131 Bytes
  • Size of remote file: 711 kB
assets/Ch14_6_ex_max_directional_direction.svg ADDED

Git LFS Details

  • SHA256: 640ada520c783e8527810768c9bb9fea3101300b5adf51fc4b8b072485f63f1b
  • Pointer size: 132 Bytes
  • Size of remote file: 1.12 MB
assets/Ch14_6_ex_tangent_contour_curve.svg ADDED

Git LFS Details

  • SHA256: 5524314550a03ff8db00b70503cbcf8f4420236e5cc554de196e14e182ccc42e
  • Pointer size: 131 Bytes
  • Size of remote file: 249 kB
assets/Ch14_6_level_surface_gradient_3D.svg ADDED

Git LFS Details

  • SHA256: 043a57bd19ce09b9e447e7f04c61d79eb3f017bea5d09f110551423867d3c247
  • Pointer size: 132 Bytes
  • Size of remote file: 3.52 MB
assets/Ch14_6_max_directional_derivative_gradient_3D.svg ADDED

Git LFS Details

  • SHA256: 78c9cfc66fb747aa1d38c4fc00cb70cef51cd01feb47c323f5172b5a8a418479
  • Pointer size: 132 Bytes
  • Size of remote file: 9.17 MB
assets/Ch14_6_max_directional_direction.svg ADDED

Git LFS Details

  • SHA256: 5112b7069dc71d961df182830e9a2e872a7f1af8dc063c3c2bd5c3a7c3329501
  • Pointer size: 132 Bytes
  • Size of remote file: 3.29 MB
assets/Ch14_6_max_directional_direction_gradient.svg ADDED

Git LFS Details

  • SHA256: dd72b11d1731b018fa40d5fdb13166cddd83c54c91b213ca0fabaeb79147625b
  • Pointer size: 132 Bytes
  • Size of remote file: 7.2 MB
assets/Ch14_6_normal_line_gradient_3D.svg ADDED

Git LFS Details

  • SHA256: 43b1c8d2af7652cd2ddb8ab53aac67a606c574740af5e2d247d79b30706b0fa9
  • Pointer size: 131 Bytes
  • Size of remote file: 661 kB
assets/Ch14_6_partial_exist_directional_not.svg ADDED

Git LFS Details

  • SHA256: 3f691b97032f17e31f7b53c3198dbada0a1967a2db783f0cb53b02320a3d2db3
  • Pointer size: 131 Bytes
  • Size of remote file: 738 kB
assets/Ch14_6_tangent_plane_gradient_3D.svg ADDED

Git LFS Details

  • SHA256: 40183ee714bdd0e1b5b1772878ff95a7755238eae73202fa6ef503c9b62ec829
  • Pointer size: 131 Bytes
  • Size of remote file: 649 kB
assets/Hant.svg ADDED

Git LFS Details

  • SHA256: ef3a3e28bc05d1d1f18353927a8c0cb093e6d54d001b76158a270d5c738d8c4a
  • Pointer size: 131 Bytes
  • Size of remote file: 374 kB
assets/SaddlePoint.png ADDED

Git LFS Details

  • SHA256: eea8d1030ab11bf454919629bd8218481431d09cc1ff2d53bd88152cb3abec3e
  • Pointer size: 131 Bytes
  • Size of remote file: 401 kB
assets/The_Directional_Derivative.png ADDED

Git LFS Details

  • SHA256: aa3704e30d8fc89c8fe77ada1942c37d0116a9e3ab4a7f79f8bc163c63922c3a
  • Pointer size: 131 Bytes
  • Size of remote file: 302 kB
assets/logo.png ADDED

Git LFS Details

  • SHA256: 707b84a897eab763b23fb21cf1e88796f6b4fa9464b31d228891ab84ac1cb90e
  • Pointer size: 132 Bytes
  • Size of remote file: 2.35 MB
assets/maximum.png ADDED

Git LFS Details

  • SHA256: 1964905e9c59afeed2245f89352c172c3510877087cc7c1439941d263fac6c73
  • Pointer size: 131 Bytes
  • Size of remote file: 369 kB
assets/partial_derivative.png ADDED

Git LFS Details

  • SHA256: 47c62f20128fe180efd74a3ab9147e85532de0ed2cac4c5ec38726d6de41db99
  • Pointer size: 131 Bytes
  • Size of remote file: 115 kB
assets/—Pngtree—smiling emoji face giving thumbs_21439833.png ADDED

Git LFS Details

  • SHA256: 803d288cdd69ccacbe5539785a1317f18d34387e81b2a08d4c7d098dcfa618be
  • Pointer size: 133 Bytes
  • Size of remote file: 14.7 MB
assets/—Pngtree—smiling face with thumbs up_17920558.png ADDED

Git LFS Details

  • SHA256: 4eee46df0e252f68545e8f7deba89a0102d8f346073af2859b83864b242b8e74
  • Pointer size: 132 Bytes
  • Size of remote file: 2.87 MB
assets/—Pngtree—thinking and smiling face emoji_17269046.png ADDED

Git LFS Details

  • SHA256: e830bba706d1391863354650bdb66edb2ba50dadcb2b1d3b82edcfdc2bf1ea17
  • Pointer size: 132 Bytes
  • Size of remote file: 3.97 MB
layout/page/sections.py CHANGED
@@ -101,7 +101,6 @@ def make_section_control(
101
  variant="filled" if sid == active_id else "light",
102
  size="sm",
103
  style={"flex": "0 0 auto"},
104
- **{"data-sid": sid},
105
  )
106
  )
107
 
 
101
  variant="filled" if sid == active_id else "light",
102
  size="sm",
103
  style={"flex": "0 0 auto"},
 
104
  )
105
  )
106
 
layout/renderer/dt_callbacks.py CHANGED
@@ -54,11 +54,9 @@ def _as_set(v) -> set:
54
  State({"type": "quiz-input", "qid": MATCH}, "value"),
55
  State({"type": "quiz-ans", "qid": MATCH}, "data"),
56
  State({"type": "quiz-pass-fill", "qid": MATCH}, "data"),
57
- State("student-id-store", "data"),
58
- State("page-url", "pathname"),
59
  prevent_initial_call=True,
60
  )
61
- def _cb_check_fill(n_check, n_hint, user_input, meta, prev_pass, student_id, pathname):
62
  missing, msg = _quiz_missing_answer_notice({"kind": "fill", **(meta or {})})
63
  if missing:
64
  return _feedback_child(msg), "yellow", "light", {"display": "block"}, False
@@ -87,38 +85,8 @@ def _cb_check_fill(n_check, n_hint, user_input, meta, prev_pass, student_id, pat
87
  return _feedback_child("(此題未開啟 AI 提示)"), "gray", "light", {}, (prev_pass or False)
88
 
89
  ok = eq_answer(user_input or "", meta.get("answers", []), ops, tol)
90
- trig = ctx.triggered_id
91
- is_check = isinstance(trig, dict) and trig.get("type") == "quiz-check"
92
  if ok:
93
- if is_check and student_id:
94
- qid = trig.get("qid", "")
95
- unit = (pathname or "").strip("/").replace("/", "_") or "unknown"
96
- try:
97
- from firebase_progress import log_quiz_result, log_quiz_question_stat, register_question
98
- _meta = meta or {}
99
- if qid:
100
- register_question(unit, qid, "fill",
101
- prompt_runs=_meta.get("prompt_runs"),
102
- prompt_md=_meta.get("prompt_md", ""))
103
- log_quiz_result(student_id, unit, qid, True, answer=user_input or "")
104
- log_quiz_question_stat(unit, qid, True)
105
- except Exception as e:
106
- print(f"[Firebase] fill correct 失敗:{e}")
107
  return _feedback_child(right_msg), "green", "light", {}, True
108
- if is_check and student_id:
109
- qid = trig.get("qid", "")
110
- unit = (pathname or "").strip("/").replace("/", "_") or "unknown"
111
- try:
112
- from firebase_progress import log_quiz_result, log_quiz_question_stat, register_question
113
- _meta = meta or {}
114
- if qid:
115
- register_question(unit, qid, "fill",
116
- prompt_runs=_meta.get("prompt_runs"),
117
- prompt_md=_meta.get("prompt_md", ""))
118
- log_quiz_result(student_id, unit, qid, False, answer=user_input or "")
119
- log_quiz_question_stat(unit, qid, False)
120
- except Exception as e:
121
- print(f"[Firebase] fill wrong 失敗:{e}")
122
  return _feedback_child(wrong_msg), "red", "light", {}, False
123
 
124
 
@@ -153,11 +121,9 @@ def _fill_hint_loading_off(_children):
153
  Input( {"type": "quiz-hint-choice", "qid": MATCH}, "n_clicks"),
154
  State( {"type": "quiz-choice", "qid": MATCH}, "value"),
155
  State( {"type": "quiz-ans", "qid": MATCH}, "data"),
156
- State("student-id-store", "data"),
157
- State("page-url", "pathname"),
158
  prevent_initial_call=True,
159
  )
160
- def _cb_check_choice(n_submit, n_hint, val, meta, student_id, pathname):
161
  missing, msg = _quiz_missing_answer_notice(meta or {})
162
  if missing:
163
  return _feedback_child(msg), "yellow", "light", {"display": "block"}, False
@@ -252,35 +218,6 @@ def _cb_check_choice(n_submit, n_hint, val, meta, student_id, pathname):
252
  ok = (selected == correct)
253
  else:
254
  ok = (val == (meta.get("answer") or ""))
255
-
256
- # Firebase 記錄
257
- if student_id and is_submit:
258
- qid = trig.get("qid", "") if isinstance(trig, dict) else ""
259
- unit = (pathname or "").strip("/").replace("/", "_") or "unknown"
260
- try:
261
- from firebase_progress import log_quiz_result, log_quiz_question_stat, log_choice_option, register_question
262
- _meta = meta or {}
263
- options = _meta.get("options", [])
264
- if qid:
265
- _correct = _meta.get("answers") if qtype == "multi" else _meta.get("answer")
266
- register_question(unit, qid, qtype,
267
- prompt_runs=_meta.get("prompt_runs"),
268
- prompt_md=_meta.get("prompt_md", ""),
269
- options=options or None,
270
- correct_answer=_correct or None)
271
- # 記錄答題結果(含答案)
272
- selected_answer = ",".join(sorted(selected)) if qtype == "multi" else (val or "")
273
- log_quiz_result(student_id, unit, qid, ok, answer=selected_answer)
274
- log_quiz_question_stat(unit, qid, ok)
275
- # 記錄各選項被選次數(選擇題)
276
- if qtype == "choice" and val:
277
- log_choice_option(unit, qid, str(val))
278
- elif qtype == "multi":
279
- for sel_key in selected:
280
- log_choice_option(unit, qid, str(sel_key))
281
- except Exception as e:
282
- print(f"[Firebase] choice 失敗:{e}")
283
-
284
  if ok:
285
  msg = (meta.get("msg_right") or "✔ 正確!")
286
  if meta.get("explain"): msg += " " + meta["explain"]
 
54
  State({"type": "quiz-input", "qid": MATCH}, "value"),
55
  State({"type": "quiz-ans", "qid": MATCH}, "data"),
56
  State({"type": "quiz-pass-fill", "qid": MATCH}, "data"),
 
 
57
  prevent_initial_call=True,
58
  )
59
+ def _cb_check_fill(n_check, n_hint, user_input, meta, prev_pass):
60
  missing, msg = _quiz_missing_answer_notice({"kind": "fill", **(meta or {})})
61
  if missing:
62
  return _feedback_child(msg), "yellow", "light", {"display": "block"}, False
 
85
  return _feedback_child("(此題未開啟 AI 提示)"), "gray", "light", {}, (prev_pass or False)
86
 
87
  ok = eq_answer(user_input or "", meta.get("answers", []), ops, tol)
 
 
88
  if ok:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
  return _feedback_child(right_msg), "green", "light", {}, True
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90
  return _feedback_child(wrong_msg), "red", "light", {}, False
91
 
92
 
 
121
  Input( {"type": "quiz-hint-choice", "qid": MATCH}, "n_clicks"),
122
  State( {"type": "quiz-choice", "qid": MATCH}, "value"),
123
  State( {"type": "quiz-ans", "qid": MATCH}, "data"),
 
 
124
  prevent_initial_call=True,
125
  )
126
+ def _cb_check_choice(n_submit, n_hint, val, meta):
127
  missing, msg = _quiz_missing_answer_notice(meta or {})
128
  if missing:
129
  return _feedback_child(msg), "yellow", "light", {"display": "block"}, False
 
218
  ok = (selected == correct)
219
  else:
220
  ok = (val == (meta.get("answer") or ""))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
221
  if ok:
222
  msg = (meta.get("msg_right") or "✔ 正確!")
223
  if meta.get("explain"): msg += " " + meta["explain"]
layout/renderer/dt_quiz.py CHANGED
@@ -160,8 +160,6 @@ def render_quiz(node: dict):
160
 
161
  meta = {
162
  "qtype": qtype, "prompt_text": full_prompt_text,
163
- "prompt_runs": prompt_runs,
164
- "prompt_md": prompt_md,
165
  "options": opts, "answer": q.get("answer", ""),
166
  "answers": q.get("answers", []), "explain": q.get("explain", ""),
167
  "msg_right": q.get("msg_right", "✔ 正確!"),
@@ -224,8 +222,6 @@ def render_quiz(node: dict):
224
  "normalize": q.get("normalize", []),
225
  "msg_right": node.get("right_msg", ""), "msg_wrong": node.get("wrong_msg", ""),
226
  "prompt_text": full_prompt_text,
227
- "prompt_runs": prompt_runs,
228
- "prompt_md": prompt_md,
229
  "ai": {
230
  "enabled": str(node.get("ai", "1")).lower() not in ("0", "false", "no", "off"),
231
  "provider": node.get("ai_provider") or "gemini",
@@ -294,12 +290,8 @@ def render_quiz(node: dict):
294
  ["分數 a/b", "a/b"],
295
  ["π", "pi"],
296
  ["e(自然數)", "e"],
297
- ["sin(x)", "sin(x)"],
298
- ["cos(x)", "cos(x)"],
299
- ["ln(x)", "ln(x)"],
300
  ["絕對值 |x|", "abs(x)"],
301
  ["無限大 ∞", "oo"],
302
- ["不存在", "DNE"],
303
  ["乘號", "* 或直接省略"],
304
  ],
305
  },
 
160
 
161
  meta = {
162
  "qtype": qtype, "prompt_text": full_prompt_text,
 
 
163
  "options": opts, "answer": q.get("answer", ""),
164
  "answers": q.get("answers", []), "explain": q.get("explain", ""),
165
  "msg_right": q.get("msg_right", "✔ 正確!"),
 
222
  "normalize": q.get("normalize", []),
223
  "msg_right": node.get("right_msg", ""), "msg_wrong": node.get("wrong_msg", ""),
224
  "prompt_text": full_prompt_text,
 
 
225
  "ai": {
226
  "enabled": str(node.get("ai", "1")).lower() not in ("0", "false", "no", "off"),
227
  "provider": node.get("ai_provider") or "gemini",
 
290
  ["分數 a/b", "a/b"],
291
  ["π", "pi"],
292
  ["e(自然數)", "e"],
 
 
 
293
  ["絕對值 |x|", "abs(x)"],
294
  ["無限大 ∞", "oo"],
 
295
  ["乘號", "* 或直接省略"],
296
  ],
297
  },
layout/renderer/dt_render_blocks.py CHANGED
@@ -81,86 +81,93 @@ def _px_or_raw(v: str | None, fallback_px: int) -> tuple:
81
 
82
  def render_geogebra(node: dict):
83
  """
84
- 響應式 GeoGebra 嵌入。
85
 
86
  用法(JSON / ggb comment):
87
- width / w : 最大顯示寬度,預設 "100%"(填滿容器)
88
- height / h : GeoGebra 原始設計高度(px),用來計算寬高比,預設 480
89
- border : "1" 顯示邊框
90
- caption : 圖說文字
91
- card : "1" 包 Card 裡
 
 
 
 
92
 
93
  原理:
94
- 用 padding-bottom aspect-ratio 技巧讓 iframe 自動填滿容器且保持寬高
95
- 再把 GeoGebra iframe 的 width/height 傳入一個大的固定尺寸(預 1200×900)
96
- GeoGebra 內部以高解析度渲染,CSS 再縮到容器大小
97
- 這樣文字/物件的相對位置完全由 GeoGebra 自行決定,不會因為尺寸不一致而跑位。
98
  """
99
  gid = (node.get("id") or "").strip()
100
  w_raw = node.get("width") or node.get("w") or "100%"
101
- h_raw = node.get("height") or node.get("h") or "480"
 
 
 
102
  border = str(node.get("border") or "0") == "1"
103
  caption = (node.get("caption") or "").strip()
104
  use_card = str(node.get("card", "0")) not in ("0", "false", "False", "")
 
 
 
 
105
 
106
  w_css, w_px = _px_or_raw(w_raw, 800)
107
- _, h_px = _px_or_raw(h_raw, 480)
108
 
109
- # 設計尺寸傳給 GeoGebra iframe 的內部解析度)
110
- # 用 JSON 的 width/height 當比例基準;百分比寬度時用 h_px 推算
111
  _, design_w = _px_or_raw(node.get("design_width") or node.get("dw") or "", 0)
112
  _, design_h = _px_or_raw(node.get("design_height") or node.get("dh") or "", 0)
113
 
114
- if design_w <= 0 or design_h <= 0:
115
- # 沒有明確指定設計尺寸:用 JSON width/height 推算比例
116
- base_w = w_px if not w_raw.endswith("%") else 800
117
- base_h = h_px
118
- # 放大到 1200 寬,高度等比例,讓 GeoGebra 渲染更清晰
119
- scale_up = 1200 / base_w if base_w > 0 else 1
120
- design_w = 1200
121
- design_h = round(base_h * scale_up)
122
 
123
- if not gid:
124
- return dmc.Alert(" GeoGebra:缺少 id url。", color="yellow", variant="light")
 
125
 
126
- # 額外補高(px):GeoGebra 底部有 slider/checkbox 時可能被裁,用 extra 補償
127
- _, extra_px = _px_or_raw(node.get("extra_height") or node.get("eh") or "0", 0)
128
- design_h_final = design_h + round(extra_px * (design_w / (w_px or 800)))
129
-
130
- # 寬高比(用設計尺寸計算,確保和原始一致)
131
- aspect_pct = f"{design_h_final / design_w * 100:.4f}%"
132
-
133
- # Aspect-ratio box:讓 iframe 自動跟著容器寬度縮放,高度保持比例
134
  iframe_src = (
135
  f"https://www.geogebra.org/material/iframe/id/{gid}"
 
136
  f"/width/{design_w}/height/{design_h_final}"
137
  f"/border/{'888888' if border else 'ffffff'}"
138
  f"/sfsb/true/smb/false/stb/false/stbh/false/ai/false/asb/false"
139
  f"/sri/false/rc/false/ld/false/sdz/false/ctl/false"
140
  )
141
 
142
- ratio_box = html.Div(
143
- html.Iframe(
144
- src=iframe_src,
145
- style={
146
- "position": "absolute",
147
- "top": "0", "left": "0",
148
- "width": "100%", "height": "100%",
149
- "border": "none",
150
- },
151
- allow="fullscreen",
152
- ),
 
 
 
153
  style={
154
- "position": "relative",
155
- "width": "100%",
156
- "paddingBottom": aspect_pct, # 撐出高度(aspect-ratio trick)
157
- "height": "0",
158
- "overflow": "hidden",
 
159
  },
160
  )
161
 
162
- outer_style = {"width": w_css, "maxWidth": "100%", "margin": "0 auto"}
163
- inner_children = [html.Div(ratio_box, style=outer_style)]
164
  if caption:
165
  inner_children.append(
166
  html.P(caption, style={"textAlign": "center", "fontSize": "0.9rem",
@@ -182,9 +189,11 @@ def maybe_render_paragraph_with_geogebra(item: dict):
182
  node = {
183
  "type": "geogebra", "id": gid,
184
  "width": attrs.get("w") or attrs.get("width") or "100%",
185
- "height": attrs.get("h") or attrs.get("height") or "480",
186
  "design_width": attrs.get("dw") or attrs.get("design_width") or "",
187
  "design_height": attrs.get("dh") or attrs.get("design_height") or "",
 
 
188
  "border": attrs.get("border") or "0",
189
  "caption": attrs.get("caption") or "",
190
  "card": attrs.get("card") or "0",
 
81
 
82
  def render_geogebra(node: dict):
83
  """
84
+ GeoGebra 嵌入。
85
 
86
  用法(JSON / ggb comment):
87
+ width / w : 外層容器最大寬度,預設 "100%"
88
+ height / h : GeoGebra 原始設計高度(px),預設 800
89
+ design_width / dw : GeoGebra 原始設計寬度(px);未填時同 width(百分比則預設 800)
90
+ design_height / dh : GeoGebra 原始設計高度(px);未填時同 height
91
+ extra_height / eh : 額外補高(px),直接加設計高度上
92
+ app : GeoGebra app 類型("3d" / "geometry" / "graphing" / "cas")
93
+ border : "1" 顯示邊框
94
+ caption : 圖說文字
95
+ card : "1" 包在 Card 裡
96
 
97
  原理:
98
+ iframe 以「設計尺寸」固定寬高(px)嵌入不再縮放。
99
+ 外層容器設 overflow: auto,當頁面容器比計寬度窄時可橫向/縱向捲動
100
+ 確保 GeoGebra 內部所有區塊(2D + 3D 並排、slider、文字)完整顯示,不被裁切
 
101
  """
102
  gid = (node.get("id") or "").strip()
103
  w_raw = node.get("width") or node.get("w") or "100%"
104
+ h_raw = node.get("height") or node.get("h") or "800"
105
+ # 把舊的預設值視為未設定
106
+ if h_raw in ("480", "480px"):
107
+ h_raw = "800"
108
  border = str(node.get("border") or "0") == "1"
109
  caption = (node.get("caption") or "").strip()
110
  use_card = str(node.get("card", "0")) not in ("0", "false", "False", "")
111
+ app = (node.get("app") or "").strip().lower()
112
+
113
+ if not gid:
114
+ return dmc.Alert("⚠ GeoGebra:缺少 id 或 url。", color="yellow", variant="light")
115
 
116
  w_css, w_px = _px_or_raw(w_raw, 800)
117
+ _, h_px = _px_or_raw(h_raw, 800)
118
 
119
+ # ── 設計尺寸:直接傳給 GeoGebra,決定 iframe 的真實像素大小 ──────────
 
120
  _, design_w = _px_or_raw(node.get("design_width") or node.get("dw") or "", 0)
121
  _, design_h = _px_or_raw(node.get("design_height") or node.get("dh") or "", 0)
122
 
123
+ if design_w <= 0:
124
+ # 指定設計:用夠大的固定值讓 GeoGebra 不需要縮放。
125
+ # 1400 可容納 2D+3D 並排的典型 Classic 作品;
126
+ # 如需更小或更大可在 JSON/Markdown 用 dw= 覆蓋。
127
+ design_w = w_px if not w_raw.endswith("%") else 1400
128
+ if design_h <= 0:
129
+ design_h = h_px
 
130
 
131
+ # ── 額外補高:直接加,不乘縮放比 ────────────────────────────────────
132
+ _, extra_px = _px_or_raw(node.get("extra_height") or node.get("eh") or "0", 0)
133
+ design_h_final = design_h + extra_px
134
 
135
+ # ── iframe URL ────────────────────────────────────────────────────────
136
+ app_segment = f"/app/{app}" if app else ""
 
 
 
 
 
 
137
  iframe_src = (
138
  f"https://www.geogebra.org/material/iframe/id/{gid}"
139
+ f"{app_segment}"
140
  f"/width/{design_w}/height/{design_h_final}"
141
  f"/border/{'888888' if border else 'ffffff'}"
142
  f"/sfsb/true/smb/false/stb/false/stbh/false/ai/false/asb/false"
143
  f"/sri/false/rc/false/ld/false/sdz/false/ctl/false"
144
  )
145
 
146
+ # ── iframe:className="ggb-iframe" 供 ggb_resize.js 偵測 ──────────────
147
+ iframe = html.Iframe(
148
+ src=iframe_src,
149
+ width=str(design_w),
150
+ height=str(design_h_final),
151
+ className="ggb-iframe",
152
+ style={"border": "none", "display": "block"},
153
+ allow="fullscreen",
154
+ )
155
+
156
+ # ── 捲動容器:className="ggb-wrap" 供 JS 調整 maxHeight ─────────────
157
+ scroll_box = html.Div(
158
+ iframe,
159
+ className="ggb-wrap",
160
  style={
161
+ "width": w_css,
162
+ "maxWidth": "100%",
163
+ "overflowX": "auto",
164
+ "overflowY": "auto",
165
+ "margin": "0 auto",
166
+ "maxHeight": f"{design_h_final}px",
167
  },
168
  )
169
 
170
+ inner_children = [scroll_box]
 
171
  if caption:
172
  inner_children.append(
173
  html.P(caption, style={"textAlign": "center", "fontSize": "0.9rem",
 
189
  node = {
190
  "type": "geogebra", "id": gid,
191
  "width": attrs.get("w") or attrs.get("width") or "100%",
192
+ "height": attrs.get("h") or attrs.get("height") or "800",
193
  "design_width": attrs.get("dw") or attrs.get("design_width") or "",
194
  "design_height": attrs.get("dh") or attrs.get("design_height") or "",
195
+ "extra_height": attrs.get("eh") or attrs.get("extra_height") or "0",
196
+ "app": attrs.get("app") or "",
197
  "border": attrs.get("border") or "0",
198
  "caption": attrs.get("caption") or "",
199
  "card": attrs.get("card") or "0",
layout/shell/callbacks.py CHANGED
@@ -140,21 +140,6 @@ def switch_light_dark():
140
  }
141
  });
142
 
143
- // === 專門處理 Mantine Card 背景色(根據 data-card-kind 套用對應顏色)===
144
- document.querySelectorAll('.mantine-Card-root[data-card-kind]').forEach(function(card) {
145
- var bodyColor = isDark ? card.dataset.bodyDark : card.dataset.bodyLight;
146
- if (bodyColor) {
147
- card.style.setProperty('background-color', bodyColor, 'important');
148
- }
149
- var header = card.querySelector('[data-card-header]');
150
- if (header) {
151
- var hColor = isDark ? header.dataset.headerDark : header.dataset.headerLight;
152
- var fgColor = isDark ? header.dataset.fgDark : header.dataset.fgLight;
153
- if (hColor) header.style.setProperty('background-color', hColor, 'important');
154
- if (fgColor) header.style.setProperty('color', fgColor, 'important');
155
- }
156
- });
157
-
158
  // 回傳字串避免 undefined(觸發 dash 更新)
159
  return desired + ':' + Date.now();
160
  }
 
140
  }
141
  });
142
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
143
  // 回傳字串避免 undefined(觸發 dash 更新)
144
  return desired + ':' + Date.now();
145
  }
layout/shell/header.py CHANGED
@@ -1,8 +1,6 @@
1
- from dash_iconify import DashIconify
2
  # header.py (或你專案中產生 header 的檔案)
3
  from dash import html
4
  import dash_mantine_components as dmc
5
- from student_login import create_student_badge
6
 
7
  HEADER_H = 50 # 想大一點改 72/80 即可
8
 
@@ -38,26 +36,10 @@ def generate_header():
38
 
39
  right = dmc.Group(
40
  align="center",
41
- children=[
42
- create_student_badge(),
43
- dmc.Anchor(
44
- href="/teacher",
45
- children=dmc.Tooltip(
46
- label="老師後台",
47
- children=dmc.ActionIcon(
48
- DashIconify(icon="tabler:layout-dashboard", height=18),
49
- size="md",
50
- variant="subtle",
51
- color="gray",
52
- ),
53
- ),
54
- style={"lineHeight": 0},
55
- ),
56
- dmc.Switch(
57
- id="color-scheme-switch", size="lg", color="gray",
58
- onLabel="🌙", offLabel="☀️", persistence=True
59
- ),
60
- ],
61
  style={"height": "100%"},
62
  )
63
 
 
 
1
  # header.py (或你專案中產生 header 的檔案)
2
  from dash import html
3
  import dash_mantine_components as dmc
 
4
 
5
  HEADER_H = 50 # 想大一點改 72/80 即可
6
 
 
36
 
37
  right = dmc.Group(
38
  align="center",
39
+ children=[dmc.Switch(
40
+ id="color-scheme-switch", size="lg", color="gray",
41
+ onLabel="🌙", offLabel="☀️", persistence=True
42
+ )],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  style={"height": "100%"},
44
  )
45
 
pages/Ch14/C14_6/Md_14_6.md CHANGED
The diff for this file is too large to render. See raw diff
 
pages/Ch14/C14_6/exported_result_14_6.json CHANGED
The diff for this file is too large to render. See raw diff
 
pages/Ch14/C14_7/exported_result_14_7.json CHANGED
@@ -567,7 +567,7 @@
567
  },
568
  {
569
  "type": "flow",
570
- "id": "flow-27",
571
  "persist": "",
572
  "steps": [
573
  {
@@ -578,7 +578,7 @@
578
  {
579
  "type": "quiz",
580
  "qtype": "choice",
581
- "id": "flow-27::step-1::q1",
582
  "prompt_runs": [
583
  {
584
  "text": "「函數 "
@@ -629,7 +629,7 @@
629
  "wrong_hints": {},
630
  "card": "0",
631
  "answer": "b",
632
- "flow": "flow-27",
633
  "step": "step-1"
634
  }
635
  ],
@@ -672,7 +672,7 @@
672
  ]
673
  }
674
  ],
675
- "gate_from": "flow-27::step-1::q1"
676
  }
677
  ]
678
  },
@@ -1305,7 +1305,7 @@
1305
  "body": [
1306
  {
1307
  "type": "flow",
1308
- "id": "flow-28",
1309
  "persist": "",
1310
  "steps": [
1311
  {
@@ -1316,7 +1316,7 @@
1316
  {
1317
  "type": "quiz",
1318
  "qtype": "choice",
1319
- "id": "flow-28::step-1::q1",
1320
  "prompt_runs": [
1321
  {
1322
  "text": "找臨界點的第一步是?"
@@ -1347,7 +1347,7 @@
1347
  "wrong_hints": {},
1348
  "card": "0",
1349
  "answer": "c",
1350
- "flow": "flow-28",
1351
  "step": "step-1"
1352
  }
1353
  ],
@@ -1361,7 +1361,7 @@
1361
  {
1362
  "type": "quiz",
1363
  "qtype": "fill",
1364
- "id": "flow-28::step-2::q2",
1365
  "prompt_runs": [
1366
  {
1367
  "latex": "$f_x = ?$",
@@ -1382,11 +1382,11 @@
1382
  "right_msg": "",
1383
  "wrong_msg": "",
1384
  "card": "0",
1385
- "flow": "flow-28",
1386
  "step": "step-2"
1387
  }
1388
  ],
1389
- "gate_from": "flow-28::step-1::q1"
1390
  },
1391
  {
1392
  "id": "step-3",
@@ -1396,7 +1396,7 @@
1396
  {
1397
  "type": "quiz",
1398
  "qtype": "fill",
1399
- "id": "flow-28::step-3::q3",
1400
  "prompt_runs": [
1401
  {
1402
  "latex": "$f_y = ?$",
@@ -1417,11 +1417,11 @@
1417
  "right_msg": "",
1418
  "wrong_msg": "",
1419
  "card": "0",
1420
- "flow": "flow-28",
1421
  "step": "step-3"
1422
  }
1423
  ],
1424
- "gate_from": "flow-28::step-2::q2"
1425
  },
1426
  {
1427
  "id": "step-4",
@@ -1431,7 +1431,7 @@
1431
  {
1432
  "type": "quiz",
1433
  "qtype": "choice",
1434
- "id": "flow-28::step-4::q4",
1435
  "prompt_runs": [
1436
  {
1437
  "text": "令 "
@@ -1469,11 +1469,11 @@
1469
  "wrong_hints": {},
1470
  "card": "0",
1471
  "answer": "a",
1472
- "flow": "flow-28",
1473
  "step": "step-4"
1474
  }
1475
  ],
1476
- "gate_from": "flow-28::step-3::q3"
1477
  }
1478
  ]
1479
  }
@@ -1639,7 +1639,7 @@
1639
  "body": [
1640
  {
1641
  "type": "flow",
1642
- "id": "flow-29",
1643
  "persist": "",
1644
  "steps": [
1645
  {
@@ -1650,7 +1650,7 @@
1650
  {
1651
  "type": "quiz",
1652
  "qtype": "choice",
1653
- "id": "flow-29::step-1::q1",
1654
  "prompt_runs": [
1655
  {
1656
  "latex": "$D(1,2) = 16$",
@@ -1688,7 +1688,7 @@
1688
  "wrong_hints": {},
1689
  "card": "0",
1690
  "answer": "b",
1691
- "flow": "flow-29",
1692
  "step": "step-1"
1693
  }
1694
  ],
@@ -1702,7 +1702,7 @@
1702
  {
1703
  "type": "quiz",
1704
  "qtype": "choice",
1705
- "id": "flow-29::step-2::q2",
1706
  "prompt_runs": [
1707
  {
1708
  "latex": "$f_{xx}(1,2) = -3$",
@@ -1740,11 +1740,11 @@
1740
  "wrong_hints": {},
1741
  "card": "0",
1742
  "answer": "a",
1743
- "flow": "flow-29",
1744
  "step": "step-2"
1745
  }
1746
  ],
1747
- "gate_from": "flow-29::step-1::q1"
1748
  },
1749
  {
1750
  "id": "step-3",
@@ -1754,7 +1754,7 @@
1754
  {
1755
  "type": "quiz",
1756
  "qtype": "choice",
1757
- "id": "flow-29::step-3::q3",
1758
  "prompt_runs": [
1759
  {
1760
  "text": "根據二階導數判別法,結果是?"
@@ -1785,11 +1785,11 @@
1785
  "wrong_hints": {},
1786
  "card": "0",
1787
  "answer": "a",
1788
- "flow": "flow-29",
1789
  "step": "step-3"
1790
  }
1791
  ],
1792
- "gate_from": "flow-29::step-2::q2"
1793
  }
1794
  ]
1795
  }
@@ -2198,7 +2198,7 @@
2198
  "body": [
2199
  {
2200
  "type": "flow",
2201
- "id": "flow-30",
2202
  "persist": "",
2203
  "steps": [
2204
  {
@@ -2209,7 +2209,7 @@
2209
  {
2210
  "type": "quiz",
2211
  "qtype": "fill",
2212
- "id": "flow-30::step-1::q1",
2213
  "prompt_runs": [
2214
  {
2215
  "text": "先計算一階偏導數("
@@ -2240,7 +2240,7 @@
2240
  "right_msg": "",
2241
  "wrong_msg": "",
2242
  "card": "0",
2243
- "flow": "flow-30",
2244
  "step": "step-1"
2245
  }
2246
  ],
@@ -2254,7 +2254,7 @@
2254
  {
2255
  "type": "quiz",
2256
  "qtype": "fill",
2257
- "id": "flow-30::step-2::q2",
2258
  "prompt_runs": [
2259
  {
2260
  "text": "再請問"
@@ -2278,11 +2278,11 @@
2278
  "right_msg": "",
2279
  "wrong_msg": "",
2280
  "card": "0",
2281
- "flow": "flow-30",
2282
  "step": "step-2"
2283
  }
2284
  ],
2285
- "gate_from": "flow-30::step-1::q1"
2286
  },
2287
  {
2288
  "id": "step-3",
@@ -2319,7 +2319,7 @@
2319
  {
2320
  "type": "quiz",
2321
  "qtype": "choice",
2322
- "id": "flow-30::step-3::q3",
2323
  "prompt_runs": [
2324
  {
2325
  "text": "所以 "
@@ -2349,11 +2349,11 @@
2349
  "wrong_hints": {},
2350
  "card": "0",
2351
  "answer": "a",
2352
- "flow": "flow-30",
2353
  "step": "step-3"
2354
  }
2355
  ],
2356
- "gate_from": "flow-30::step-2::q2"
2357
  },
2358
  {
2359
  "id": "step-4",
@@ -2386,7 +2386,7 @@
2386
  {
2387
  "type": "quiz",
2388
  "qtype": "fill",
2389
- "id": "flow-30::step-4::q4",
2390
  "prompt_runs": [
2391
  {
2392
  "latex": "$$\nf_{xx}=\\frac{\\partial}{\\partial x}(2x)=?\n$$",
@@ -2407,11 +2407,11 @@
2407
  "right_msg": "",
2408
  "wrong_msg": "",
2409
  "card": "0",
2410
- "flow": "flow-30",
2411
  "step": "step-4"
2412
  }
2413
  ],
2414
- "gate_from": "flow-30::step-3::q3"
2415
  },
2416
  {
2417
  "id": "step-5",
@@ -2421,7 +2421,7 @@
2421
  {
2422
  "type": "quiz",
2423
  "qtype": "fill",
2424
- "id": "flow-30::step-5::q5",
2425
  "prompt_runs": [
2426
  {
2427
  "latex": "$$\nf_{yy}=\\frac{\\partial}{\\partial y}(-2y)=?\n$$",
@@ -2442,11 +2442,11 @@
2442
  "right_msg": "",
2443
  "wrong_msg": "",
2444
  "card": "0",
2445
- "flow": "flow-30",
2446
  "step": "step-5"
2447
  }
2448
  ],
2449
- "gate_from": "flow-30::step-4::q4"
2450
  },
2451
  {
2452
  "id": "step-6",
@@ -2456,7 +2456,7 @@
2456
  {
2457
  "type": "quiz",
2458
  "qtype": "fill",
2459
- "id": "flow-30::step-6::q6",
2460
  "prompt_runs": [
2461
  {
2462
  "latex": "$$\nf_{xy}=\\frac{\\partial}{\\partial y}(2x)=?\n$$",
@@ -2477,11 +2477,11 @@
2477
  "right_msg": "",
2478
  "wrong_msg": "",
2479
  "card": "0",
2480
- "flow": "flow-30",
2481
  "step": "step-6"
2482
  }
2483
  ],
2484
- "gate_from": "flow-30::step-5::q5"
2485
  },
2486
  {
2487
  "id": "step-7",
@@ -2511,7 +2511,7 @@
2511
  {
2512
  "type": "quiz",
2513
  "qtype": "fill",
2514
- "id": "flow-30::step-7::q7",
2515
  "prompt_runs": [
2516
  {
2517
  "text": "因此"
@@ -2535,11 +2535,11 @@
2535
  "right_msg": "",
2536
  "wrong_msg": "",
2537
  "card": "0",
2538
- "flow": "flow-30",
2539
  "step": "step-7"
2540
  }
2541
  ],
2542
- "gate_from": "flow-30::step-6::q6"
2543
  },
2544
  {
2545
  "id": "step-8",
@@ -2549,7 +2549,7 @@
2549
  {
2550
  "type": "quiz",
2551
  "qtype": "choice",
2552
- "id": "flow-30::step-8::q8",
2553
  "prompt_runs": [
2554
  {
2555
  "text": "因為"
@@ -2594,11 +2594,11 @@
2594
  "wrong_hints": {},
2595
  "card": "0",
2596
  "answer": "c",
2597
- "flow": "flow-30",
2598
  "step": "step-8"
2599
  }
2600
  ],
2601
- "gate_from": "flow-30::step-7::q7"
2602
  },
2603
  {
2604
  "id": "step-9",
@@ -2637,7 +2637,7 @@
2637
  ]
2638
  }
2639
  ],
2640
- "gate_from": "flow-30::step-8::q8"
2641
  }
2642
  ]
2643
  }
@@ -3844,7 +3844,7 @@
3844
  "body": [
3845
  {
3846
  "type": "flow",
3847
- "id": "flow-31",
3848
  "persist": "",
3849
  "steps": [
3850
  {
@@ -3899,7 +3899,7 @@
3899
  {
3900
  "type": "quiz",
3901
  "qtype": "choice",
3902
- "id": "flow-31::step-1::q1",
3903
  "prompt_runs": [
3904
  {
3905
  "text": "此點是否在 "
@@ -3944,7 +3944,7 @@
3944
  "wrong_hints": {},
3945
  "card": "0",
3946
  "answer": "c",
3947
- "flow": "flow-31",
3948
  "step": "step-1"
3949
  }
3950
  ],
@@ -3995,7 +3995,7 @@
3995
  {
3996
  "type": "quiz",
3997
  "qtype": "fill",
3998
- "id": "flow-31::step-2::q2",
3999
  "prompt_runs": [
4000
  {
4001
  "text": "此邊界上的最大值:"
@@ -4015,11 +4015,11 @@
4015
  "right_msg": "",
4016
  "wrong_msg": "",
4017
  "card": "0",
4018
- "flow": "flow-31",
4019
  "step": "step-2"
4020
  }
4021
  ],
4022
- "gate_from": "flow-31::step-1::q1"
4023
  },
4024
  {
4025
  "id": "step-3",
@@ -4059,7 +4059,7 @@
4059
  {
4060
  "type": "quiz",
4061
  "qtype": "fill",
4062
- "id": "flow-31::step-3::q3",
4063
  "prompt_runs": [
4064
  {
4065
  "text": "此邊界上的最小值:"
@@ -4079,11 +4079,11 @@
4079
  "right_msg": "",
4080
  "wrong_msg": "",
4081
  "card": "0",
4082
- "flow": "flow-31",
4083
  "step": "step-3"
4084
  }
4085
  ],
4086
- "gate_from": "flow-31::step-2::q2"
4087
  },
4088
  {
4089
  "id": "step-4",
@@ -4093,7 +4093,7 @@
4093
  {
4094
  "type": "quiz",
4095
  "qtype": "fill",
4096
- "id": "flow-31::step-4::q4",
4097
  "prompt_runs": [
4098
  {
4099
  "text": "邊界 "
@@ -4134,11 +4134,11 @@
4134
  "right_msg": "",
4135
  "wrong_msg": "",
4136
  "card": "0",
4137
- "flow": "flow-31",
4138
  "step": "step-4"
4139
  }
4140
  ],
4141
- "gate_from": "flow-31::step-3::q3"
4142
  },
4143
  {
4144
  "id": "step-5",
@@ -4171,7 +4171,7 @@
4171
  {
4172
  "type": "quiz",
4173
  "qtype": "fill",
4174
- "id": "flow-31::step-5::q5",
4175
  "prompt_runs": [
4176
  {
4177
  "text": "絕對最大值:"
@@ -4191,7 +4191,7 @@
4191
  "right_msg": "",
4192
  "wrong_msg": "",
4193
  "card": "0",
4194
- "flow": "flow-31",
4195
  "step": "step-5"
4196
  },
4197
  {
@@ -4203,7 +4203,7 @@
4203
  {
4204
  "type": "quiz",
4205
  "qtype": "fill",
4206
- "id": "flow-31::step-5::q6",
4207
  "prompt_runs": [
4208
  {
4209
  "text": "絕對最小值:"
@@ -4223,7 +4223,7 @@
4223
  "right_msg": "",
4224
  "wrong_msg": "",
4225
  "card": "0",
4226
- "flow": "flow-31",
4227
  "step": "step-5"
4228
  },
4229
  {
@@ -4288,7 +4288,7 @@
4288
  ]
4289
  }
4290
  ],
4291
- "gate_from": "flow-31::step-4::q4"
4292
  }
4293
  ]
4294
  }
@@ -4810,7 +4810,7 @@
4810
  },
4811
  {
4812
  "type": "flow",
4813
- "id": "flow-27",
4814
  "persist": "",
4815
  "steps": [
4816
  {
@@ -4821,7 +4821,7 @@
4821
  {
4822
  "type": "quiz",
4823
  "qtype": "choice",
4824
- "id": "flow-27::step-1::q1",
4825
  "prompt_runs": [
4826
  {
4827
  "text": "「函數 "
@@ -4872,7 +4872,7 @@
4872
  "wrong_hints": {},
4873
  "card": "0",
4874
  "answer": "b",
4875
- "flow": "flow-27",
4876
  "step": "step-1"
4877
  }
4878
  ],
@@ -4915,7 +4915,7 @@
4915
  ]
4916
  }
4917
  ],
4918
- "gate_from": "flow-27::step-1::q1"
4919
  }
4920
  ]
4921
  },
@@ -5548,7 +5548,7 @@
5548
  "body": [
5549
  {
5550
  "type": "flow",
5551
- "id": "flow-28",
5552
  "persist": "",
5553
  "steps": [
5554
  {
@@ -5559,7 +5559,7 @@
5559
  {
5560
  "type": "quiz",
5561
  "qtype": "choice",
5562
- "id": "flow-28::step-1::q1",
5563
  "prompt_runs": [
5564
  {
5565
  "text": "找臨界點的第一步是?"
@@ -5590,7 +5590,7 @@
5590
  "wrong_hints": {},
5591
  "card": "0",
5592
  "answer": "c",
5593
- "flow": "flow-28",
5594
  "step": "step-1"
5595
  }
5596
  ],
@@ -5604,7 +5604,7 @@
5604
  {
5605
  "type": "quiz",
5606
  "qtype": "fill",
5607
- "id": "flow-28::step-2::q2",
5608
  "prompt_runs": [
5609
  {
5610
  "latex": "$f_x = ?$",
@@ -5625,11 +5625,11 @@
5625
  "right_msg": "",
5626
  "wrong_msg": "",
5627
  "card": "0",
5628
- "flow": "flow-28",
5629
  "step": "step-2"
5630
  }
5631
  ],
5632
- "gate_from": "flow-28::step-1::q1"
5633
  },
5634
  {
5635
  "id": "step-3",
@@ -5639,7 +5639,7 @@
5639
  {
5640
  "type": "quiz",
5641
  "qtype": "fill",
5642
- "id": "flow-28::step-3::q3",
5643
  "prompt_runs": [
5644
  {
5645
  "latex": "$f_y = ?$",
@@ -5660,11 +5660,11 @@
5660
  "right_msg": "",
5661
  "wrong_msg": "",
5662
  "card": "0",
5663
- "flow": "flow-28",
5664
  "step": "step-3"
5665
  }
5666
  ],
5667
- "gate_from": "flow-28::step-2::q2"
5668
  },
5669
  {
5670
  "id": "step-4",
@@ -5674,7 +5674,7 @@
5674
  {
5675
  "type": "quiz",
5676
  "qtype": "choice",
5677
- "id": "flow-28::step-4::q4",
5678
  "prompt_runs": [
5679
  {
5680
  "text": "令 "
@@ -5712,11 +5712,11 @@
5712
  "wrong_hints": {},
5713
  "card": "0",
5714
  "answer": "a",
5715
- "flow": "flow-28",
5716
  "step": "step-4"
5717
  }
5718
  ],
5719
- "gate_from": "flow-28::step-3::q3"
5720
  }
5721
  ]
5722
  }
@@ -5882,7 +5882,7 @@
5882
  "body": [
5883
  {
5884
  "type": "flow",
5885
- "id": "flow-29",
5886
  "persist": "",
5887
  "steps": [
5888
  {
@@ -5893,7 +5893,7 @@
5893
  {
5894
  "type": "quiz",
5895
  "qtype": "choice",
5896
- "id": "flow-29::step-1::q1",
5897
  "prompt_runs": [
5898
  {
5899
  "latex": "$D(1,2) = 16$",
@@ -5931,7 +5931,7 @@
5931
  "wrong_hints": {},
5932
  "card": "0",
5933
  "answer": "b",
5934
- "flow": "flow-29",
5935
  "step": "step-1"
5936
  }
5937
  ],
@@ -5945,7 +5945,7 @@
5945
  {
5946
  "type": "quiz",
5947
  "qtype": "choice",
5948
- "id": "flow-29::step-2::q2",
5949
  "prompt_runs": [
5950
  {
5951
  "latex": "$f_{xx}(1,2) = -3$",
@@ -5983,11 +5983,11 @@
5983
  "wrong_hints": {},
5984
  "card": "0",
5985
  "answer": "a",
5986
- "flow": "flow-29",
5987
  "step": "step-2"
5988
  }
5989
  ],
5990
- "gate_from": "flow-29::step-1::q1"
5991
  },
5992
  {
5993
  "id": "step-3",
@@ -5997,7 +5997,7 @@
5997
  {
5998
  "type": "quiz",
5999
  "qtype": "choice",
6000
- "id": "flow-29::step-3::q3",
6001
  "prompt_runs": [
6002
  {
6003
  "text": "根據二階導數判別法,結果是?"
@@ -6028,11 +6028,11 @@
6028
  "wrong_hints": {},
6029
  "card": "0",
6030
  "answer": "a",
6031
- "flow": "flow-29",
6032
  "step": "step-3"
6033
  }
6034
  ],
6035
- "gate_from": "flow-29::step-2::q2"
6036
  }
6037
  ]
6038
  }
@@ -6441,7 +6441,7 @@
6441
  "body": [
6442
  {
6443
  "type": "flow",
6444
- "id": "flow-30",
6445
  "persist": "",
6446
  "steps": [
6447
  {
@@ -6452,7 +6452,7 @@
6452
  {
6453
  "type": "quiz",
6454
  "qtype": "fill",
6455
- "id": "flow-30::step-1::q1",
6456
  "prompt_runs": [
6457
  {
6458
  "text": "先計算一階偏導數("
@@ -6483,7 +6483,7 @@
6483
  "right_msg": "",
6484
  "wrong_msg": "",
6485
  "card": "0",
6486
- "flow": "flow-30",
6487
  "step": "step-1"
6488
  }
6489
  ],
@@ -6497,7 +6497,7 @@
6497
  {
6498
  "type": "quiz",
6499
  "qtype": "fill",
6500
- "id": "flow-30::step-2::q2",
6501
  "prompt_runs": [
6502
  {
6503
  "text": "再請問"
@@ -6521,11 +6521,11 @@
6521
  "right_msg": "",
6522
  "wrong_msg": "",
6523
  "card": "0",
6524
- "flow": "flow-30",
6525
  "step": "step-2"
6526
  }
6527
  ],
6528
- "gate_from": "flow-30::step-1::q1"
6529
  },
6530
  {
6531
  "id": "step-3",
@@ -6562,7 +6562,7 @@
6562
  {
6563
  "type": "quiz",
6564
  "qtype": "choice",
6565
- "id": "flow-30::step-3::q3",
6566
  "prompt_runs": [
6567
  {
6568
  "text": "所以 "
@@ -6592,11 +6592,11 @@
6592
  "wrong_hints": {},
6593
  "card": "0",
6594
  "answer": "a",
6595
- "flow": "flow-30",
6596
  "step": "step-3"
6597
  }
6598
  ],
6599
- "gate_from": "flow-30::step-2::q2"
6600
  },
6601
  {
6602
  "id": "step-4",
@@ -6629,7 +6629,7 @@
6629
  {
6630
  "type": "quiz",
6631
  "qtype": "fill",
6632
- "id": "flow-30::step-4::q4",
6633
  "prompt_runs": [
6634
  {
6635
  "latex": "$$\nf_{xx}=\\frac{\\partial}{\\partial x}(2x)=?\n$$",
@@ -6650,11 +6650,11 @@
6650
  "right_msg": "",
6651
  "wrong_msg": "",
6652
  "card": "0",
6653
- "flow": "flow-30",
6654
  "step": "step-4"
6655
  }
6656
  ],
6657
- "gate_from": "flow-30::step-3::q3"
6658
  },
6659
  {
6660
  "id": "step-5",
@@ -6664,7 +6664,7 @@
6664
  {
6665
  "type": "quiz",
6666
  "qtype": "fill",
6667
- "id": "flow-30::step-5::q5",
6668
  "prompt_runs": [
6669
  {
6670
  "latex": "$$\nf_{yy}=\\frac{\\partial}{\\partial y}(-2y)=?\n$$",
@@ -6685,11 +6685,11 @@
6685
  "right_msg": "",
6686
  "wrong_msg": "",
6687
  "card": "0",
6688
- "flow": "flow-30",
6689
  "step": "step-5"
6690
  }
6691
  ],
6692
- "gate_from": "flow-30::step-4::q4"
6693
  },
6694
  {
6695
  "id": "step-6",
@@ -6699,7 +6699,7 @@
6699
  {
6700
  "type": "quiz",
6701
  "qtype": "fill",
6702
- "id": "flow-30::step-6::q6",
6703
  "prompt_runs": [
6704
  {
6705
  "latex": "$$\nf_{xy}=\\frac{\\partial}{\\partial y}(2x)=?\n$$",
@@ -6720,11 +6720,11 @@
6720
  "right_msg": "",
6721
  "wrong_msg": "",
6722
  "card": "0",
6723
- "flow": "flow-30",
6724
  "step": "step-6"
6725
  }
6726
  ],
6727
- "gate_from": "flow-30::step-5::q5"
6728
  },
6729
  {
6730
  "id": "step-7",
@@ -6754,7 +6754,7 @@
6754
  {
6755
  "type": "quiz",
6756
  "qtype": "fill",
6757
- "id": "flow-30::step-7::q7",
6758
  "prompt_runs": [
6759
  {
6760
  "text": "因此"
@@ -6778,11 +6778,11 @@
6778
  "right_msg": "",
6779
  "wrong_msg": "",
6780
  "card": "0",
6781
- "flow": "flow-30",
6782
  "step": "step-7"
6783
  }
6784
  ],
6785
- "gate_from": "flow-30::step-6::q6"
6786
  },
6787
  {
6788
  "id": "step-8",
@@ -6792,7 +6792,7 @@
6792
  {
6793
  "type": "quiz",
6794
  "qtype": "choice",
6795
- "id": "flow-30::step-8::q8",
6796
  "prompt_runs": [
6797
  {
6798
  "text": "因為"
@@ -6837,11 +6837,11 @@
6837
  "wrong_hints": {},
6838
  "card": "0",
6839
  "answer": "c",
6840
- "flow": "flow-30",
6841
  "step": "step-8"
6842
  }
6843
  ],
6844
- "gate_from": "flow-30::step-7::q7"
6845
  },
6846
  {
6847
  "id": "step-9",
@@ -6880,7 +6880,7 @@
6880
  ]
6881
  }
6882
  ],
6883
- "gate_from": "flow-30::step-8::q8"
6884
  }
6885
  ]
6886
  }
@@ -8087,7 +8087,7 @@
8087
  "body": [
8088
  {
8089
  "type": "flow",
8090
- "id": "flow-31",
8091
  "persist": "",
8092
  "steps": [
8093
  {
@@ -8142,7 +8142,7 @@
8142
  {
8143
  "type": "quiz",
8144
  "qtype": "choice",
8145
- "id": "flow-31::step-1::q1",
8146
  "prompt_runs": [
8147
  {
8148
  "text": "此點是否在 "
@@ -8187,7 +8187,7 @@
8187
  "wrong_hints": {},
8188
  "card": "0",
8189
  "answer": "c",
8190
- "flow": "flow-31",
8191
  "step": "step-1"
8192
  }
8193
  ],
@@ -8238,7 +8238,7 @@
8238
  {
8239
  "type": "quiz",
8240
  "qtype": "fill",
8241
- "id": "flow-31::step-2::q2",
8242
  "prompt_runs": [
8243
  {
8244
  "text": "此邊界上的最大值:"
@@ -8258,11 +8258,11 @@
8258
  "right_msg": "",
8259
  "wrong_msg": "",
8260
  "card": "0",
8261
- "flow": "flow-31",
8262
  "step": "step-2"
8263
  }
8264
  ],
8265
- "gate_from": "flow-31::step-1::q1"
8266
  },
8267
  {
8268
  "id": "step-3",
@@ -8302,7 +8302,7 @@
8302
  {
8303
  "type": "quiz",
8304
  "qtype": "fill",
8305
- "id": "flow-31::step-3::q3",
8306
  "prompt_runs": [
8307
  {
8308
  "text": "此邊界上的最小值:"
@@ -8322,11 +8322,11 @@
8322
  "right_msg": "",
8323
  "wrong_msg": "",
8324
  "card": "0",
8325
- "flow": "flow-31",
8326
  "step": "step-3"
8327
  }
8328
  ],
8329
- "gate_from": "flow-31::step-2::q2"
8330
  },
8331
  {
8332
  "id": "step-4",
@@ -8336,7 +8336,7 @@
8336
  {
8337
  "type": "quiz",
8338
  "qtype": "fill",
8339
- "id": "flow-31::step-4::q4",
8340
  "prompt_runs": [
8341
  {
8342
  "text": "邊界 "
@@ -8377,11 +8377,11 @@
8377
  "right_msg": "",
8378
  "wrong_msg": "",
8379
  "card": "0",
8380
- "flow": "flow-31",
8381
  "step": "step-4"
8382
  }
8383
  ],
8384
- "gate_from": "flow-31::step-3::q3"
8385
  },
8386
  {
8387
  "id": "step-5",
@@ -8414,7 +8414,7 @@
8414
  {
8415
  "type": "quiz",
8416
  "qtype": "fill",
8417
- "id": "flow-31::step-5::q5",
8418
  "prompt_runs": [
8419
  {
8420
  "text": "絕對最大值:"
@@ -8434,7 +8434,7 @@
8434
  "right_msg": "",
8435
  "wrong_msg": "",
8436
  "card": "0",
8437
- "flow": "flow-31",
8438
  "step": "step-5"
8439
  },
8440
  {
@@ -8446,7 +8446,7 @@
8446
  {
8447
  "type": "quiz",
8448
  "qtype": "fill",
8449
- "id": "flow-31::step-5::q6",
8450
  "prompt_runs": [
8451
  {
8452
  "text": "絕對最小值:"
@@ -8466,7 +8466,7 @@
8466
  "right_msg": "",
8467
  "wrong_msg": "",
8468
  "card": "0",
8469
- "flow": "flow-31",
8470
  "step": "step-5"
8471
  },
8472
  {
@@ -8531,7 +8531,7 @@
8531
  ]
8532
  }
8533
  ],
8534
- "gate_from": "flow-31::step-4::q4"
8535
  }
8536
  ]
8537
  }
@@ -8971,7 +8971,7 @@
8971
  },
8972
  {
8973
  "type": "flow",
8974
- "id": "flow-27",
8975
  "persist": "",
8976
  "steps": [
8977
  {
@@ -8982,7 +8982,7 @@
8982
  {
8983
  "type": "quiz",
8984
  "qtype": "choice",
8985
- "id": "flow-27::step-1::q1",
8986
  "prompt_runs": [
8987
  {
8988
  "text": "「函數 "
@@ -9033,7 +9033,7 @@
9033
  "wrong_hints": {},
9034
  "card": "0",
9035
  "answer": "b",
9036
- "flow": "flow-27",
9037
  "step": "step-1"
9038
  }
9039
  ],
@@ -9076,7 +9076,7 @@
9076
  ]
9077
  }
9078
  ],
9079
- "gate_from": "flow-27::step-1::q1"
9080
  }
9081
  ]
9082
  },
@@ -9721,7 +9721,7 @@
9721
  "body": [
9722
  {
9723
  "type": "flow",
9724
- "id": "flow-28",
9725
  "persist": "",
9726
  "steps": [
9727
  {
@@ -9732,7 +9732,7 @@
9732
  {
9733
  "type": "quiz",
9734
  "qtype": "choice",
9735
- "id": "flow-28::step-1::q1",
9736
  "prompt_runs": [
9737
  {
9738
  "text": "找臨界點的第一步是?"
@@ -9763,7 +9763,7 @@
9763
  "wrong_hints": {},
9764
  "card": "0",
9765
  "answer": "c",
9766
- "flow": "flow-28",
9767
  "step": "step-1"
9768
  }
9769
  ],
@@ -9777,7 +9777,7 @@
9777
  {
9778
  "type": "quiz",
9779
  "qtype": "fill",
9780
- "id": "flow-28::step-2::q2",
9781
  "prompt_runs": [
9782
  {
9783
  "latex": "$f_x = ?$",
@@ -9798,11 +9798,11 @@
9798
  "right_msg": "",
9799
  "wrong_msg": "",
9800
  "card": "0",
9801
- "flow": "flow-28",
9802
  "step": "step-2"
9803
  }
9804
  ],
9805
- "gate_from": "flow-28::step-1::q1"
9806
  },
9807
  {
9808
  "id": "step-3",
@@ -9812,7 +9812,7 @@
9812
  {
9813
  "type": "quiz",
9814
  "qtype": "fill",
9815
- "id": "flow-28::step-3::q3",
9816
  "prompt_runs": [
9817
  {
9818
  "latex": "$f_y = ?$",
@@ -9833,11 +9833,11 @@
9833
  "right_msg": "",
9834
  "wrong_msg": "",
9835
  "card": "0",
9836
- "flow": "flow-28",
9837
  "step": "step-3"
9838
  }
9839
  ],
9840
- "gate_from": "flow-28::step-2::q2"
9841
  },
9842
  {
9843
  "id": "step-4",
@@ -9847,7 +9847,7 @@
9847
  {
9848
  "type": "quiz",
9849
  "qtype": "choice",
9850
- "id": "flow-28::step-4::q4",
9851
  "prompt_runs": [
9852
  {
9853
  "text": "令 "
@@ -9885,11 +9885,11 @@
9885
  "wrong_hints": {},
9886
  "card": "0",
9887
  "answer": "a",
9888
- "flow": "flow-28",
9889
  "step": "step-4"
9890
  }
9891
  ],
9892
- "gate_from": "flow-28::step-3::q3"
9893
  }
9894
  ]
9895
  }
@@ -10055,7 +10055,7 @@
10055
  "body": [
10056
  {
10057
  "type": "flow",
10058
- "id": "flow-29",
10059
  "persist": "",
10060
  "steps": [
10061
  {
@@ -10066,7 +10066,7 @@
10066
  {
10067
  "type": "quiz",
10068
  "qtype": "choice",
10069
- "id": "flow-29::step-1::q1",
10070
  "prompt_runs": [
10071
  {
10072
  "latex": "$D(1,2) = 16$",
@@ -10104,7 +10104,7 @@
10104
  "wrong_hints": {},
10105
  "card": "0",
10106
  "answer": "b",
10107
- "flow": "flow-29",
10108
  "step": "step-1"
10109
  }
10110
  ],
@@ -10118,7 +10118,7 @@
10118
  {
10119
  "type": "quiz",
10120
  "qtype": "choice",
10121
- "id": "flow-29::step-2::q2",
10122
  "prompt_runs": [
10123
  {
10124
  "latex": "$f_{xx}(1,2) = -3$",
@@ -10156,11 +10156,11 @@
10156
  "wrong_hints": {},
10157
  "card": "0",
10158
  "answer": "a",
10159
- "flow": "flow-29",
10160
  "step": "step-2"
10161
  }
10162
  ],
10163
- "gate_from": "flow-29::step-1::q1"
10164
  },
10165
  {
10166
  "id": "step-3",
@@ -10170,7 +10170,7 @@
10170
  {
10171
  "type": "quiz",
10172
  "qtype": "choice",
10173
- "id": "flow-29::step-3::q3",
10174
  "prompt_runs": [
10175
  {
10176
  "text": "根據二階導數判別法,結果是?"
@@ -10201,11 +10201,11 @@
10201
  "wrong_hints": {},
10202
  "card": "0",
10203
  "answer": "a",
10204
- "flow": "flow-29",
10205
  "step": "step-3"
10206
  }
10207
  ],
10208
- "gate_from": "flow-29::step-2::q2"
10209
  }
10210
  ]
10211
  }
@@ -10614,7 +10614,7 @@
10614
  "body": [
10615
  {
10616
  "type": "flow",
10617
- "id": "flow-30",
10618
  "persist": "",
10619
  "steps": [
10620
  {
@@ -10625,7 +10625,7 @@
10625
  {
10626
  "type": "quiz",
10627
  "qtype": "fill",
10628
- "id": "flow-30::step-1::q1",
10629
  "prompt_runs": [
10630
  {
10631
  "text": "先計算一階偏導數("
@@ -10656,7 +10656,7 @@
10656
  "right_msg": "",
10657
  "wrong_msg": "",
10658
  "card": "0",
10659
- "flow": "flow-30",
10660
  "step": "step-1"
10661
  }
10662
  ],
@@ -10670,7 +10670,7 @@
10670
  {
10671
  "type": "quiz",
10672
  "qtype": "fill",
10673
- "id": "flow-30::step-2::q2",
10674
  "prompt_runs": [
10675
  {
10676
  "text": "再請問"
@@ -10694,11 +10694,11 @@
10694
  "right_msg": "",
10695
  "wrong_msg": "",
10696
  "card": "0",
10697
- "flow": "flow-30",
10698
  "step": "step-2"
10699
  }
10700
  ],
10701
- "gate_from": "flow-30::step-1::q1"
10702
  },
10703
  {
10704
  "id": "step-3",
@@ -10735,7 +10735,7 @@
10735
  {
10736
  "type": "quiz",
10737
  "qtype": "choice",
10738
- "id": "flow-30::step-3::q3",
10739
  "prompt_runs": [
10740
  {
10741
  "text": "所以 "
@@ -10765,11 +10765,11 @@
10765
  "wrong_hints": {},
10766
  "card": "0",
10767
  "answer": "a",
10768
- "flow": "flow-30",
10769
  "step": "step-3"
10770
  }
10771
  ],
10772
- "gate_from": "flow-30::step-2::q2"
10773
  },
10774
  {
10775
  "id": "step-4",
@@ -10802,7 +10802,7 @@
10802
  {
10803
  "type": "quiz",
10804
  "qtype": "fill",
10805
- "id": "flow-30::step-4::q4",
10806
  "prompt_runs": [
10807
  {
10808
  "latex": "$$\nf_{xx}=\\frac{\\partial}{\\partial x}(2x)=?\n$$",
@@ -10823,11 +10823,11 @@
10823
  "right_msg": "",
10824
  "wrong_msg": "",
10825
  "card": "0",
10826
- "flow": "flow-30",
10827
  "step": "step-4"
10828
  }
10829
  ],
10830
- "gate_from": "flow-30::step-3::q3"
10831
  },
10832
  {
10833
  "id": "step-5",
@@ -10837,7 +10837,7 @@
10837
  {
10838
  "type": "quiz",
10839
  "qtype": "fill",
10840
- "id": "flow-30::step-5::q5",
10841
  "prompt_runs": [
10842
  {
10843
  "latex": "$$\nf_{yy}=\\frac{\\partial}{\\partial y}(-2y)=?\n$$",
@@ -10858,11 +10858,11 @@
10858
  "right_msg": "",
10859
  "wrong_msg": "",
10860
  "card": "0",
10861
- "flow": "flow-30",
10862
  "step": "step-5"
10863
  }
10864
  ],
10865
- "gate_from": "flow-30::step-4::q4"
10866
  },
10867
  {
10868
  "id": "step-6",
@@ -10872,7 +10872,7 @@
10872
  {
10873
  "type": "quiz",
10874
  "qtype": "fill",
10875
- "id": "flow-30::step-6::q6",
10876
  "prompt_runs": [
10877
  {
10878
  "latex": "$$\nf_{xy}=\\frac{\\partial}{\\partial y}(2x)=?\n$$",
@@ -10893,11 +10893,11 @@
10893
  "right_msg": "",
10894
  "wrong_msg": "",
10895
  "card": "0",
10896
- "flow": "flow-30",
10897
  "step": "step-6"
10898
  }
10899
  ],
10900
- "gate_from": "flow-30::step-5::q5"
10901
  },
10902
  {
10903
  "id": "step-7",
@@ -10927,7 +10927,7 @@
10927
  {
10928
  "type": "quiz",
10929
  "qtype": "fill",
10930
- "id": "flow-30::step-7::q7",
10931
  "prompt_runs": [
10932
  {
10933
  "text": "因此"
@@ -10951,11 +10951,11 @@
10951
  "right_msg": "",
10952
  "wrong_msg": "",
10953
  "card": "0",
10954
- "flow": "flow-30",
10955
  "step": "step-7"
10956
  }
10957
  ],
10958
- "gate_from": "flow-30::step-6::q6"
10959
  },
10960
  {
10961
  "id": "step-8",
@@ -10965,7 +10965,7 @@
10965
  {
10966
  "type": "quiz",
10967
  "qtype": "choice",
10968
- "id": "flow-30::step-8::q8",
10969
  "prompt_runs": [
10970
  {
10971
  "text": "因為"
@@ -11010,11 +11010,11 @@
11010
  "wrong_hints": {},
11011
  "card": "0",
11012
  "answer": "c",
11013
- "flow": "flow-30",
11014
  "step": "step-8"
11015
  }
11016
  ],
11017
- "gate_from": "flow-30::step-7::q7"
11018
  },
11019
  {
11020
  "id": "step-9",
@@ -11053,7 +11053,7 @@
11053
  ]
11054
  }
11055
  ],
11056
- "gate_from": "flow-30::step-8::q8"
11057
  }
11058
  ]
11059
  }
@@ -12266,7 +12266,7 @@
12266
  "body": [
12267
  {
12268
  "type": "flow",
12269
- "id": "flow-31",
12270
  "persist": "",
12271
  "steps": [
12272
  {
@@ -12321,7 +12321,7 @@
12321
  {
12322
  "type": "quiz",
12323
  "qtype": "choice",
12324
- "id": "flow-31::step-1::q1",
12325
  "prompt_runs": [
12326
  {
12327
  "text": "此點是否在 "
@@ -12366,7 +12366,7 @@
12366
  "wrong_hints": {},
12367
  "card": "0",
12368
  "answer": "c",
12369
- "flow": "flow-31",
12370
  "step": "step-1"
12371
  }
12372
  ],
@@ -12417,7 +12417,7 @@
12417
  {
12418
  "type": "quiz",
12419
  "qtype": "fill",
12420
- "id": "flow-31::step-2::q2",
12421
  "prompt_runs": [
12422
  {
12423
  "text": "此邊界上的最大值:"
@@ -12437,11 +12437,11 @@
12437
  "right_msg": "",
12438
  "wrong_msg": "",
12439
  "card": "0",
12440
- "flow": "flow-31",
12441
  "step": "step-2"
12442
  }
12443
  ],
12444
- "gate_from": "flow-31::step-1::q1"
12445
  },
12446
  {
12447
  "id": "step-3",
@@ -12481,7 +12481,7 @@
12481
  {
12482
  "type": "quiz",
12483
  "qtype": "fill",
12484
- "id": "flow-31::step-3::q3",
12485
  "prompt_runs": [
12486
  {
12487
  "text": "此邊界上的最小值:"
@@ -12501,11 +12501,11 @@
12501
  "right_msg": "",
12502
  "wrong_msg": "",
12503
  "card": "0",
12504
- "flow": "flow-31",
12505
  "step": "step-3"
12506
  }
12507
  ],
12508
- "gate_from": "flow-31::step-2::q2"
12509
  },
12510
  {
12511
  "id": "step-4",
@@ -12515,7 +12515,7 @@
12515
  {
12516
  "type": "quiz",
12517
  "qtype": "fill",
12518
- "id": "flow-31::step-4::q4",
12519
  "prompt_runs": [
12520
  {
12521
  "text": "邊界 "
@@ -12556,11 +12556,11 @@
12556
  "right_msg": "",
12557
  "wrong_msg": "",
12558
  "card": "0",
12559
- "flow": "flow-31",
12560
  "step": "step-4"
12561
  }
12562
  ],
12563
- "gate_from": "flow-31::step-3::q3"
12564
  },
12565
  {
12566
  "id": "step-5",
@@ -12593,7 +12593,7 @@
12593
  {
12594
  "type": "quiz",
12595
  "qtype": "fill",
12596
- "id": "flow-31::step-5::q5",
12597
  "prompt_runs": [
12598
  {
12599
  "text": "絕對最大值:"
@@ -12613,7 +12613,7 @@
12613
  "right_msg": "",
12614
  "wrong_msg": "",
12615
  "card": "0",
12616
- "flow": "flow-31",
12617
  "step": "step-5"
12618
  },
12619
  {
@@ -12625,7 +12625,7 @@
12625
  {
12626
  "type": "quiz",
12627
  "qtype": "fill",
12628
- "id": "flow-31::step-5::q6",
12629
  "prompt_runs": [
12630
  {
12631
  "text": "絕對最小值:"
@@ -12645,7 +12645,7 @@
12645
  "right_msg": "",
12646
  "wrong_msg": "",
12647
  "card": "0",
12648
- "flow": "flow-31",
12649
  "step": "step-5"
12650
  },
12651
  {
@@ -12710,7 +12710,7 @@
12710
  ]
12711
  }
12712
  ],
12713
- "gate_from": "flow-31::step-4::q4"
12714
  }
12715
  ]
12716
  }
 
567
  },
568
  {
569
  "type": "flow",
570
+ "id": "flow-29",
571
  "persist": "",
572
  "steps": [
573
  {
 
578
  {
579
  "type": "quiz",
580
  "qtype": "choice",
581
+ "id": "flow-29::step-1::q1",
582
  "prompt_runs": [
583
  {
584
  "text": "「函數 "
 
629
  "wrong_hints": {},
630
  "card": "0",
631
  "answer": "b",
632
+ "flow": "flow-29",
633
  "step": "step-1"
634
  }
635
  ],
 
672
  ]
673
  }
674
  ],
675
+ "gate_from": "flow-29::step-1::q1"
676
  }
677
  ]
678
  },
 
1305
  "body": [
1306
  {
1307
  "type": "flow",
1308
+ "id": "flow-30",
1309
  "persist": "",
1310
  "steps": [
1311
  {
 
1316
  {
1317
  "type": "quiz",
1318
  "qtype": "choice",
1319
+ "id": "flow-30::step-1::q1",
1320
  "prompt_runs": [
1321
  {
1322
  "text": "找臨界點的第一步是?"
 
1347
  "wrong_hints": {},
1348
  "card": "0",
1349
  "answer": "c",
1350
+ "flow": "flow-30",
1351
  "step": "step-1"
1352
  }
1353
  ],
 
1361
  {
1362
  "type": "quiz",
1363
  "qtype": "fill",
1364
+ "id": "flow-30::step-2::q2",
1365
  "prompt_runs": [
1366
  {
1367
  "latex": "$f_x = ?$",
 
1382
  "right_msg": "",
1383
  "wrong_msg": "",
1384
  "card": "0",
1385
+ "flow": "flow-30",
1386
  "step": "step-2"
1387
  }
1388
  ],
1389
+ "gate_from": "flow-30::step-1::q1"
1390
  },
1391
  {
1392
  "id": "step-3",
 
1396
  {
1397
  "type": "quiz",
1398
  "qtype": "fill",
1399
+ "id": "flow-30::step-3::q3",
1400
  "prompt_runs": [
1401
  {
1402
  "latex": "$f_y = ?$",
 
1417
  "right_msg": "",
1418
  "wrong_msg": "",
1419
  "card": "0",
1420
+ "flow": "flow-30",
1421
  "step": "step-3"
1422
  }
1423
  ],
1424
+ "gate_from": "flow-30::step-2::q2"
1425
  },
1426
  {
1427
  "id": "step-4",
 
1431
  {
1432
  "type": "quiz",
1433
  "qtype": "choice",
1434
+ "id": "flow-30::step-4::q4",
1435
  "prompt_runs": [
1436
  {
1437
  "text": "令 "
 
1469
  "wrong_hints": {},
1470
  "card": "0",
1471
  "answer": "a",
1472
+ "flow": "flow-30",
1473
  "step": "step-4"
1474
  }
1475
  ],
1476
+ "gate_from": "flow-30::step-3::q3"
1477
  }
1478
  ]
1479
  }
 
1639
  "body": [
1640
  {
1641
  "type": "flow",
1642
+ "id": "flow-31",
1643
  "persist": "",
1644
  "steps": [
1645
  {
 
1650
  {
1651
  "type": "quiz",
1652
  "qtype": "choice",
1653
+ "id": "flow-31::step-1::q1",
1654
  "prompt_runs": [
1655
  {
1656
  "latex": "$D(1,2) = 16$",
 
1688
  "wrong_hints": {},
1689
  "card": "0",
1690
  "answer": "b",
1691
+ "flow": "flow-31",
1692
  "step": "step-1"
1693
  }
1694
  ],
 
1702
  {
1703
  "type": "quiz",
1704
  "qtype": "choice",
1705
+ "id": "flow-31::step-2::q2",
1706
  "prompt_runs": [
1707
  {
1708
  "latex": "$f_{xx}(1,2) = -3$",
 
1740
  "wrong_hints": {},
1741
  "card": "0",
1742
  "answer": "a",
1743
+ "flow": "flow-31",
1744
  "step": "step-2"
1745
  }
1746
  ],
1747
+ "gate_from": "flow-31::step-1::q1"
1748
  },
1749
  {
1750
  "id": "step-3",
 
1754
  {
1755
  "type": "quiz",
1756
  "qtype": "choice",
1757
+ "id": "flow-31::step-3::q3",
1758
  "prompt_runs": [
1759
  {
1760
  "text": "根據二階導數判別法,結果是?"
 
1785
  "wrong_hints": {},
1786
  "card": "0",
1787
  "answer": "a",
1788
+ "flow": "flow-31",
1789
  "step": "step-3"
1790
  }
1791
  ],
1792
+ "gate_from": "flow-31::step-2::q2"
1793
  }
1794
  ]
1795
  }
 
2198
  "body": [
2199
  {
2200
  "type": "flow",
2201
+ "id": "flow-32",
2202
  "persist": "",
2203
  "steps": [
2204
  {
 
2209
  {
2210
  "type": "quiz",
2211
  "qtype": "fill",
2212
+ "id": "flow-32::step-1::q1",
2213
  "prompt_runs": [
2214
  {
2215
  "text": "先計算一階偏導數("
 
2240
  "right_msg": "",
2241
  "wrong_msg": "",
2242
  "card": "0",
2243
+ "flow": "flow-32",
2244
  "step": "step-1"
2245
  }
2246
  ],
 
2254
  {
2255
  "type": "quiz",
2256
  "qtype": "fill",
2257
+ "id": "flow-32::step-2::q2",
2258
  "prompt_runs": [
2259
  {
2260
  "text": "再請問"
 
2278
  "right_msg": "",
2279
  "wrong_msg": "",
2280
  "card": "0",
2281
+ "flow": "flow-32",
2282
  "step": "step-2"
2283
  }
2284
  ],
2285
+ "gate_from": "flow-32::step-1::q1"
2286
  },
2287
  {
2288
  "id": "step-3",
 
2319
  {
2320
  "type": "quiz",
2321
  "qtype": "choice",
2322
+ "id": "flow-32::step-3::q3",
2323
  "prompt_runs": [
2324
  {
2325
  "text": "所以 "
 
2349
  "wrong_hints": {},
2350
  "card": "0",
2351
  "answer": "a",
2352
+ "flow": "flow-32",
2353
  "step": "step-3"
2354
  }
2355
  ],
2356
+ "gate_from": "flow-32::step-2::q2"
2357
  },
2358
  {
2359
  "id": "step-4",
 
2386
  {
2387
  "type": "quiz",
2388
  "qtype": "fill",
2389
+ "id": "flow-32::step-4::q4",
2390
  "prompt_runs": [
2391
  {
2392
  "latex": "$$\nf_{xx}=\\frac{\\partial}{\\partial x}(2x)=?\n$$",
 
2407
  "right_msg": "",
2408
  "wrong_msg": "",
2409
  "card": "0",
2410
+ "flow": "flow-32",
2411
  "step": "step-4"
2412
  }
2413
  ],
2414
+ "gate_from": "flow-32::step-3::q3"
2415
  },
2416
  {
2417
  "id": "step-5",
 
2421
  {
2422
  "type": "quiz",
2423
  "qtype": "fill",
2424
+ "id": "flow-32::step-5::q5",
2425
  "prompt_runs": [
2426
  {
2427
  "latex": "$$\nf_{yy}=\\frac{\\partial}{\\partial y}(-2y)=?\n$$",
 
2442
  "right_msg": "",
2443
  "wrong_msg": "",
2444
  "card": "0",
2445
+ "flow": "flow-32",
2446
  "step": "step-5"
2447
  }
2448
  ],
2449
+ "gate_from": "flow-32::step-4::q4"
2450
  },
2451
  {
2452
  "id": "step-6",
 
2456
  {
2457
  "type": "quiz",
2458
  "qtype": "fill",
2459
+ "id": "flow-32::step-6::q6",
2460
  "prompt_runs": [
2461
  {
2462
  "latex": "$$\nf_{xy}=\\frac{\\partial}{\\partial y}(2x)=?\n$$",
 
2477
  "right_msg": "",
2478
  "wrong_msg": "",
2479
  "card": "0",
2480
+ "flow": "flow-32",
2481
  "step": "step-6"
2482
  }
2483
  ],
2484
+ "gate_from": "flow-32::step-5::q5"
2485
  },
2486
  {
2487
  "id": "step-7",
 
2511
  {
2512
  "type": "quiz",
2513
  "qtype": "fill",
2514
+ "id": "flow-32::step-7::q7",
2515
  "prompt_runs": [
2516
  {
2517
  "text": "因此"
 
2535
  "right_msg": "",
2536
  "wrong_msg": "",
2537
  "card": "0",
2538
+ "flow": "flow-32",
2539
  "step": "step-7"
2540
  }
2541
  ],
2542
+ "gate_from": "flow-32::step-6::q6"
2543
  },
2544
  {
2545
  "id": "step-8",
 
2549
  {
2550
  "type": "quiz",
2551
  "qtype": "choice",
2552
+ "id": "flow-32::step-8::q8",
2553
  "prompt_runs": [
2554
  {
2555
  "text": "因為"
 
2594
  "wrong_hints": {},
2595
  "card": "0",
2596
  "answer": "c",
2597
+ "flow": "flow-32",
2598
  "step": "step-8"
2599
  }
2600
  ],
2601
+ "gate_from": "flow-32::step-7::q7"
2602
  },
2603
  {
2604
  "id": "step-9",
 
2637
  ]
2638
  }
2639
  ],
2640
+ "gate_from": "flow-32::step-8::q8"
2641
  }
2642
  ]
2643
  }
 
3844
  "body": [
3845
  {
3846
  "type": "flow",
3847
+ "id": "flow-33",
3848
  "persist": "",
3849
  "steps": [
3850
  {
 
3899
  {
3900
  "type": "quiz",
3901
  "qtype": "choice",
3902
+ "id": "flow-33::step-1::q1",
3903
  "prompt_runs": [
3904
  {
3905
  "text": "此點是否在 "
 
3944
  "wrong_hints": {},
3945
  "card": "0",
3946
  "answer": "c",
3947
+ "flow": "flow-33",
3948
  "step": "step-1"
3949
  }
3950
  ],
 
3995
  {
3996
  "type": "quiz",
3997
  "qtype": "fill",
3998
+ "id": "flow-33::step-2::q2",
3999
  "prompt_runs": [
4000
  {
4001
  "text": "此邊界上的最大值:"
 
4015
  "right_msg": "",
4016
  "wrong_msg": "",
4017
  "card": "0",
4018
+ "flow": "flow-33",
4019
  "step": "step-2"
4020
  }
4021
  ],
4022
+ "gate_from": "flow-33::step-1::q1"
4023
  },
4024
  {
4025
  "id": "step-3",
 
4059
  {
4060
  "type": "quiz",
4061
  "qtype": "fill",
4062
+ "id": "flow-33::step-3::q3",
4063
  "prompt_runs": [
4064
  {
4065
  "text": "此邊界上的最小值:"
 
4079
  "right_msg": "",
4080
  "wrong_msg": "",
4081
  "card": "0",
4082
+ "flow": "flow-33",
4083
  "step": "step-3"
4084
  }
4085
  ],
4086
+ "gate_from": "flow-33::step-2::q2"
4087
  },
4088
  {
4089
  "id": "step-4",
 
4093
  {
4094
  "type": "quiz",
4095
  "qtype": "fill",
4096
+ "id": "flow-33::step-4::q4",
4097
  "prompt_runs": [
4098
  {
4099
  "text": "邊界 "
 
4134
  "right_msg": "",
4135
  "wrong_msg": "",
4136
  "card": "0",
4137
+ "flow": "flow-33",
4138
  "step": "step-4"
4139
  }
4140
  ],
4141
+ "gate_from": "flow-33::step-3::q3"
4142
  },
4143
  {
4144
  "id": "step-5",
 
4171
  {
4172
  "type": "quiz",
4173
  "qtype": "fill",
4174
+ "id": "flow-33::step-5::q5",
4175
  "prompt_runs": [
4176
  {
4177
  "text": "絕對最大值:"
 
4191
  "right_msg": "",
4192
  "wrong_msg": "",
4193
  "card": "0",
4194
+ "flow": "flow-33",
4195
  "step": "step-5"
4196
  },
4197
  {
 
4203
  {
4204
  "type": "quiz",
4205
  "qtype": "fill",
4206
+ "id": "flow-33::step-5::q6",
4207
  "prompt_runs": [
4208
  {
4209
  "text": "絕對最小值:"
 
4223
  "right_msg": "",
4224
  "wrong_msg": "",
4225
  "card": "0",
4226
+ "flow": "flow-33",
4227
  "step": "step-5"
4228
  },
4229
  {
 
4288
  ]
4289
  }
4290
  ],
4291
+ "gate_from": "flow-33::step-4::q4"
4292
  }
4293
  ]
4294
  }
 
4810
  },
4811
  {
4812
  "type": "flow",
4813
+ "id": "flow-29",
4814
  "persist": "",
4815
  "steps": [
4816
  {
 
4821
  {
4822
  "type": "quiz",
4823
  "qtype": "choice",
4824
+ "id": "flow-29::step-1::q1",
4825
  "prompt_runs": [
4826
  {
4827
  "text": "「函數 "
 
4872
  "wrong_hints": {},
4873
  "card": "0",
4874
  "answer": "b",
4875
+ "flow": "flow-29",
4876
  "step": "step-1"
4877
  }
4878
  ],
 
4915
  ]
4916
  }
4917
  ],
4918
+ "gate_from": "flow-29::step-1::q1"
4919
  }
4920
  ]
4921
  },
 
5548
  "body": [
5549
  {
5550
  "type": "flow",
5551
+ "id": "flow-30",
5552
  "persist": "",
5553
  "steps": [
5554
  {
 
5559
  {
5560
  "type": "quiz",
5561
  "qtype": "choice",
5562
+ "id": "flow-30::step-1::q1",
5563
  "prompt_runs": [
5564
  {
5565
  "text": "找臨界點的第一步是?"
 
5590
  "wrong_hints": {},
5591
  "card": "0",
5592
  "answer": "c",
5593
+ "flow": "flow-30",
5594
  "step": "step-1"
5595
  }
5596
  ],
 
5604
  {
5605
  "type": "quiz",
5606
  "qtype": "fill",
5607
+ "id": "flow-30::step-2::q2",
5608
  "prompt_runs": [
5609
  {
5610
  "latex": "$f_x = ?$",
 
5625
  "right_msg": "",
5626
  "wrong_msg": "",
5627
  "card": "0",
5628
+ "flow": "flow-30",
5629
  "step": "step-2"
5630
  }
5631
  ],
5632
+ "gate_from": "flow-30::step-1::q1"
5633
  },
5634
  {
5635
  "id": "step-3",
 
5639
  {
5640
  "type": "quiz",
5641
  "qtype": "fill",
5642
+ "id": "flow-30::step-3::q3",
5643
  "prompt_runs": [
5644
  {
5645
  "latex": "$f_y = ?$",
 
5660
  "right_msg": "",
5661
  "wrong_msg": "",
5662
  "card": "0",
5663
+ "flow": "flow-30",
5664
  "step": "step-3"
5665
  }
5666
  ],
5667
+ "gate_from": "flow-30::step-2::q2"
5668
  },
5669
  {
5670
  "id": "step-4",
 
5674
  {
5675
  "type": "quiz",
5676
  "qtype": "choice",
5677
+ "id": "flow-30::step-4::q4",
5678
  "prompt_runs": [
5679
  {
5680
  "text": "令 "
 
5712
  "wrong_hints": {},
5713
  "card": "0",
5714
  "answer": "a",
5715
+ "flow": "flow-30",
5716
  "step": "step-4"
5717
  }
5718
  ],
5719
+ "gate_from": "flow-30::step-3::q3"
5720
  }
5721
  ]
5722
  }
 
5882
  "body": [
5883
  {
5884
  "type": "flow",
5885
+ "id": "flow-31",
5886
  "persist": "",
5887
  "steps": [
5888
  {
 
5893
  {
5894
  "type": "quiz",
5895
  "qtype": "choice",
5896
+ "id": "flow-31::step-1::q1",
5897
  "prompt_runs": [
5898
  {
5899
  "latex": "$D(1,2) = 16$",
 
5931
  "wrong_hints": {},
5932
  "card": "0",
5933
  "answer": "b",
5934
+ "flow": "flow-31",
5935
  "step": "step-1"
5936
  }
5937
  ],
 
5945
  {
5946
  "type": "quiz",
5947
  "qtype": "choice",
5948
+ "id": "flow-31::step-2::q2",
5949
  "prompt_runs": [
5950
  {
5951
  "latex": "$f_{xx}(1,2) = -3$",
 
5983
  "wrong_hints": {},
5984
  "card": "0",
5985
  "answer": "a",
5986
+ "flow": "flow-31",
5987
  "step": "step-2"
5988
  }
5989
  ],
5990
+ "gate_from": "flow-31::step-1::q1"
5991
  },
5992
  {
5993
  "id": "step-3",
 
5997
  {
5998
  "type": "quiz",
5999
  "qtype": "choice",
6000
+ "id": "flow-31::step-3::q3",
6001
  "prompt_runs": [
6002
  {
6003
  "text": "根據二階導數判別法,結果是?"
 
6028
  "wrong_hints": {},
6029
  "card": "0",
6030
  "answer": "a",
6031
+ "flow": "flow-31",
6032
  "step": "step-3"
6033
  }
6034
  ],
6035
+ "gate_from": "flow-31::step-2::q2"
6036
  }
6037
  ]
6038
  }
 
6441
  "body": [
6442
  {
6443
  "type": "flow",
6444
+ "id": "flow-32",
6445
  "persist": "",
6446
  "steps": [
6447
  {
 
6452
  {
6453
  "type": "quiz",
6454
  "qtype": "fill",
6455
+ "id": "flow-32::step-1::q1",
6456
  "prompt_runs": [
6457
  {
6458
  "text": "先計算一階偏導數("
 
6483
  "right_msg": "",
6484
  "wrong_msg": "",
6485
  "card": "0",
6486
+ "flow": "flow-32",
6487
  "step": "step-1"
6488
  }
6489
  ],
 
6497
  {
6498
  "type": "quiz",
6499
  "qtype": "fill",
6500
+ "id": "flow-32::step-2::q2",
6501
  "prompt_runs": [
6502
  {
6503
  "text": "再請問"
 
6521
  "right_msg": "",
6522
  "wrong_msg": "",
6523
  "card": "0",
6524
+ "flow": "flow-32",
6525
  "step": "step-2"
6526
  }
6527
  ],
6528
+ "gate_from": "flow-32::step-1::q1"
6529
  },
6530
  {
6531
  "id": "step-3",
 
6562
  {
6563
  "type": "quiz",
6564
  "qtype": "choice",
6565
+ "id": "flow-32::step-3::q3",
6566
  "prompt_runs": [
6567
  {
6568
  "text": "所以 "
 
6592
  "wrong_hints": {},
6593
  "card": "0",
6594
  "answer": "a",
6595
+ "flow": "flow-32",
6596
  "step": "step-3"
6597
  }
6598
  ],
6599
+ "gate_from": "flow-32::step-2::q2"
6600
  },
6601
  {
6602
  "id": "step-4",
 
6629
  {
6630
  "type": "quiz",
6631
  "qtype": "fill",
6632
+ "id": "flow-32::step-4::q4",
6633
  "prompt_runs": [
6634
  {
6635
  "latex": "$$\nf_{xx}=\\frac{\\partial}{\\partial x}(2x)=?\n$$",
 
6650
  "right_msg": "",
6651
  "wrong_msg": "",
6652
  "card": "0",
6653
+ "flow": "flow-32",
6654
  "step": "step-4"
6655
  }
6656
  ],
6657
+ "gate_from": "flow-32::step-3::q3"
6658
  },
6659
  {
6660
  "id": "step-5",
 
6664
  {
6665
  "type": "quiz",
6666
  "qtype": "fill",
6667
+ "id": "flow-32::step-5::q5",
6668
  "prompt_runs": [
6669
  {
6670
  "latex": "$$\nf_{yy}=\\frac{\\partial}{\\partial y}(-2y)=?\n$$",
 
6685
  "right_msg": "",
6686
  "wrong_msg": "",
6687
  "card": "0",
6688
+ "flow": "flow-32",
6689
  "step": "step-5"
6690
  }
6691
  ],
6692
+ "gate_from": "flow-32::step-4::q4"
6693
  },
6694
  {
6695
  "id": "step-6",
 
6699
  {
6700
  "type": "quiz",
6701
  "qtype": "fill",
6702
+ "id": "flow-32::step-6::q6",
6703
  "prompt_runs": [
6704
  {
6705
  "latex": "$$\nf_{xy}=\\frac{\\partial}{\\partial y}(2x)=?\n$$",
 
6720
  "right_msg": "",
6721
  "wrong_msg": "",
6722
  "card": "0",
6723
+ "flow": "flow-32",
6724
  "step": "step-6"
6725
  }
6726
  ],
6727
+ "gate_from": "flow-32::step-5::q5"
6728
  },
6729
  {
6730
  "id": "step-7",
 
6754
  {
6755
  "type": "quiz",
6756
  "qtype": "fill",
6757
+ "id": "flow-32::step-7::q7",
6758
  "prompt_runs": [
6759
  {
6760
  "text": "因此"
 
6778
  "right_msg": "",
6779
  "wrong_msg": "",
6780
  "card": "0",
6781
+ "flow": "flow-32",
6782
  "step": "step-7"
6783
  }
6784
  ],
6785
+ "gate_from": "flow-32::step-6::q6"
6786
  },
6787
  {
6788
  "id": "step-8",
 
6792
  {
6793
  "type": "quiz",
6794
  "qtype": "choice",
6795
+ "id": "flow-32::step-8::q8",
6796
  "prompt_runs": [
6797
  {
6798
  "text": "因為"
 
6837
  "wrong_hints": {},
6838
  "card": "0",
6839
  "answer": "c",
6840
+ "flow": "flow-32",
6841
  "step": "step-8"
6842
  }
6843
  ],
6844
+ "gate_from": "flow-32::step-7::q7"
6845
  },
6846
  {
6847
  "id": "step-9",
 
6880
  ]
6881
  }
6882
  ],
6883
+ "gate_from": "flow-32::step-8::q8"
6884
  }
6885
  ]
6886
  }
 
8087
  "body": [
8088
  {
8089
  "type": "flow",
8090
+ "id": "flow-33",
8091
  "persist": "",
8092
  "steps": [
8093
  {
 
8142
  {
8143
  "type": "quiz",
8144
  "qtype": "choice",
8145
+ "id": "flow-33::step-1::q1",
8146
  "prompt_runs": [
8147
  {
8148
  "text": "此點是否在 "
 
8187
  "wrong_hints": {},
8188
  "card": "0",
8189
  "answer": "c",
8190
+ "flow": "flow-33",
8191
  "step": "step-1"
8192
  }
8193
  ],
 
8238
  {
8239
  "type": "quiz",
8240
  "qtype": "fill",
8241
+ "id": "flow-33::step-2::q2",
8242
  "prompt_runs": [
8243
  {
8244
  "text": "此邊界上的最大值:"
 
8258
  "right_msg": "",
8259
  "wrong_msg": "",
8260
  "card": "0",
8261
+ "flow": "flow-33",
8262
  "step": "step-2"
8263
  }
8264
  ],
8265
+ "gate_from": "flow-33::step-1::q1"
8266
  },
8267
  {
8268
  "id": "step-3",
 
8302
  {
8303
  "type": "quiz",
8304
  "qtype": "fill",
8305
+ "id": "flow-33::step-3::q3",
8306
  "prompt_runs": [
8307
  {
8308
  "text": "此邊界上的最小值:"
 
8322
  "right_msg": "",
8323
  "wrong_msg": "",
8324
  "card": "0",
8325
+ "flow": "flow-33",
8326
  "step": "step-3"
8327
  }
8328
  ],
8329
+ "gate_from": "flow-33::step-2::q2"
8330
  },
8331
  {
8332
  "id": "step-4",
 
8336
  {
8337
  "type": "quiz",
8338
  "qtype": "fill",
8339
+ "id": "flow-33::step-4::q4",
8340
  "prompt_runs": [
8341
  {
8342
  "text": "邊界 "
 
8377
  "right_msg": "",
8378
  "wrong_msg": "",
8379
  "card": "0",
8380
+ "flow": "flow-33",
8381
  "step": "step-4"
8382
  }
8383
  ],
8384
+ "gate_from": "flow-33::step-3::q3"
8385
  },
8386
  {
8387
  "id": "step-5",
 
8414
  {
8415
  "type": "quiz",
8416
  "qtype": "fill",
8417
+ "id": "flow-33::step-5::q5",
8418
  "prompt_runs": [
8419
  {
8420
  "text": "絕對最大值:"
 
8434
  "right_msg": "",
8435
  "wrong_msg": "",
8436
  "card": "0",
8437
+ "flow": "flow-33",
8438
  "step": "step-5"
8439
  },
8440
  {
 
8446
  {
8447
  "type": "quiz",
8448
  "qtype": "fill",
8449
+ "id": "flow-33::step-5::q6",
8450
  "prompt_runs": [
8451
  {
8452
  "text": "絕對最小值:"
 
8466
  "right_msg": "",
8467
  "wrong_msg": "",
8468
  "card": "0",
8469
+ "flow": "flow-33",
8470
  "step": "step-5"
8471
  },
8472
  {
 
8531
  ]
8532
  }
8533
  ],
8534
+ "gate_from": "flow-33::step-4::q4"
8535
  }
8536
  ]
8537
  }
 
8971
  },
8972
  {
8973
  "type": "flow",
8974
+ "id": "flow-29",
8975
  "persist": "",
8976
  "steps": [
8977
  {
 
8982
  {
8983
  "type": "quiz",
8984
  "qtype": "choice",
8985
+ "id": "flow-29::step-1::q1",
8986
  "prompt_runs": [
8987
  {
8988
  "text": "「函數 "
 
9033
  "wrong_hints": {},
9034
  "card": "0",
9035
  "answer": "b",
9036
+ "flow": "flow-29",
9037
  "step": "step-1"
9038
  }
9039
  ],
 
9076
  ]
9077
  }
9078
  ],
9079
+ "gate_from": "flow-29::step-1::q1"
9080
  }
9081
  ]
9082
  },
 
9721
  "body": [
9722
  {
9723
  "type": "flow",
9724
+ "id": "flow-30",
9725
  "persist": "",
9726
  "steps": [
9727
  {
 
9732
  {
9733
  "type": "quiz",
9734
  "qtype": "choice",
9735
+ "id": "flow-30::step-1::q1",
9736
  "prompt_runs": [
9737
  {
9738
  "text": "找臨界點的第一步是?"
 
9763
  "wrong_hints": {},
9764
  "card": "0",
9765
  "answer": "c",
9766
+ "flow": "flow-30",
9767
  "step": "step-1"
9768
  }
9769
  ],
 
9777
  {
9778
  "type": "quiz",
9779
  "qtype": "fill",
9780
+ "id": "flow-30::step-2::q2",
9781
  "prompt_runs": [
9782
  {
9783
  "latex": "$f_x = ?$",
 
9798
  "right_msg": "",
9799
  "wrong_msg": "",
9800
  "card": "0",
9801
+ "flow": "flow-30",
9802
  "step": "step-2"
9803
  }
9804
  ],
9805
+ "gate_from": "flow-30::step-1::q1"
9806
  },
9807
  {
9808
  "id": "step-3",
 
9812
  {
9813
  "type": "quiz",
9814
  "qtype": "fill",
9815
+ "id": "flow-30::step-3::q3",
9816
  "prompt_runs": [
9817
  {
9818
  "latex": "$f_y = ?$",
 
9833
  "right_msg": "",
9834
  "wrong_msg": "",
9835
  "card": "0",
9836
+ "flow": "flow-30",
9837
  "step": "step-3"
9838
  }
9839
  ],
9840
+ "gate_from": "flow-30::step-2::q2"
9841
  },
9842
  {
9843
  "id": "step-4",
 
9847
  {
9848
  "type": "quiz",
9849
  "qtype": "choice",
9850
+ "id": "flow-30::step-4::q4",
9851
  "prompt_runs": [
9852
  {
9853
  "text": "令 "
 
9885
  "wrong_hints": {},
9886
  "card": "0",
9887
  "answer": "a",
9888
+ "flow": "flow-30",
9889
  "step": "step-4"
9890
  }
9891
  ],
9892
+ "gate_from": "flow-30::step-3::q3"
9893
  }
9894
  ]
9895
  }
 
10055
  "body": [
10056
  {
10057
  "type": "flow",
10058
+ "id": "flow-31",
10059
  "persist": "",
10060
  "steps": [
10061
  {
 
10066
  {
10067
  "type": "quiz",
10068
  "qtype": "choice",
10069
+ "id": "flow-31::step-1::q1",
10070
  "prompt_runs": [
10071
  {
10072
  "latex": "$D(1,2) = 16$",
 
10104
  "wrong_hints": {},
10105
  "card": "0",
10106
  "answer": "b",
10107
+ "flow": "flow-31",
10108
  "step": "step-1"
10109
  }
10110
  ],
 
10118
  {
10119
  "type": "quiz",
10120
  "qtype": "choice",
10121
+ "id": "flow-31::step-2::q2",
10122
  "prompt_runs": [
10123
  {
10124
  "latex": "$f_{xx}(1,2) = -3$",
 
10156
  "wrong_hints": {},
10157
  "card": "0",
10158
  "answer": "a",
10159
+ "flow": "flow-31",
10160
  "step": "step-2"
10161
  }
10162
  ],
10163
+ "gate_from": "flow-31::step-1::q1"
10164
  },
10165
  {
10166
  "id": "step-3",
 
10170
  {
10171
  "type": "quiz",
10172
  "qtype": "choice",
10173
+ "id": "flow-31::step-3::q3",
10174
  "prompt_runs": [
10175
  {
10176
  "text": "根據二階導數判別法,結果是?"
 
10201
  "wrong_hints": {},
10202
  "card": "0",
10203
  "answer": "a",
10204
+ "flow": "flow-31",
10205
  "step": "step-3"
10206
  }
10207
  ],
10208
+ "gate_from": "flow-31::step-2::q2"
10209
  }
10210
  ]
10211
  }
 
10614
  "body": [
10615
  {
10616
  "type": "flow",
10617
+ "id": "flow-32",
10618
  "persist": "",
10619
  "steps": [
10620
  {
 
10625
  {
10626
  "type": "quiz",
10627
  "qtype": "fill",
10628
+ "id": "flow-32::step-1::q1",
10629
  "prompt_runs": [
10630
  {
10631
  "text": "先計算一階偏導數("
 
10656
  "right_msg": "",
10657
  "wrong_msg": "",
10658
  "card": "0",
10659
+ "flow": "flow-32",
10660
  "step": "step-1"
10661
  }
10662
  ],
 
10670
  {
10671
  "type": "quiz",
10672
  "qtype": "fill",
10673
+ "id": "flow-32::step-2::q2",
10674
  "prompt_runs": [
10675
  {
10676
  "text": "再請問"
 
10694
  "right_msg": "",
10695
  "wrong_msg": "",
10696
  "card": "0",
10697
+ "flow": "flow-32",
10698
  "step": "step-2"
10699
  }
10700
  ],
10701
+ "gate_from": "flow-32::step-1::q1"
10702
  },
10703
  {
10704
  "id": "step-3",
 
10735
  {
10736
  "type": "quiz",
10737
  "qtype": "choice",
10738
+ "id": "flow-32::step-3::q3",
10739
  "prompt_runs": [
10740
  {
10741
  "text": "所以 "
 
10765
  "wrong_hints": {},
10766
  "card": "0",
10767
  "answer": "a",
10768
+ "flow": "flow-32",
10769
  "step": "step-3"
10770
  }
10771
  ],
10772
+ "gate_from": "flow-32::step-2::q2"
10773
  },
10774
  {
10775
  "id": "step-4",
 
10802
  {
10803
  "type": "quiz",
10804
  "qtype": "fill",
10805
+ "id": "flow-32::step-4::q4",
10806
  "prompt_runs": [
10807
  {
10808
  "latex": "$$\nf_{xx}=\\frac{\\partial}{\\partial x}(2x)=?\n$$",
 
10823
  "right_msg": "",
10824
  "wrong_msg": "",
10825
  "card": "0",
10826
+ "flow": "flow-32",
10827
  "step": "step-4"
10828
  }
10829
  ],
10830
+ "gate_from": "flow-32::step-3::q3"
10831
  },
10832
  {
10833
  "id": "step-5",
 
10837
  {
10838
  "type": "quiz",
10839
  "qtype": "fill",
10840
+ "id": "flow-32::step-5::q5",
10841
  "prompt_runs": [
10842
  {
10843
  "latex": "$$\nf_{yy}=\\frac{\\partial}{\\partial y}(-2y)=?\n$$",
 
10858
  "right_msg": "",
10859
  "wrong_msg": "",
10860
  "card": "0",
10861
+ "flow": "flow-32",
10862
  "step": "step-5"
10863
  }
10864
  ],
10865
+ "gate_from": "flow-32::step-4::q4"
10866
  },
10867
  {
10868
  "id": "step-6",
 
10872
  {
10873
  "type": "quiz",
10874
  "qtype": "fill",
10875
+ "id": "flow-32::step-6::q6",
10876
  "prompt_runs": [
10877
  {
10878
  "latex": "$$\nf_{xy}=\\frac{\\partial}{\\partial y}(2x)=?\n$$",
 
10893
  "right_msg": "",
10894
  "wrong_msg": "",
10895
  "card": "0",
10896
+ "flow": "flow-32",
10897
  "step": "step-6"
10898
  }
10899
  ],
10900
+ "gate_from": "flow-32::step-5::q5"
10901
  },
10902
  {
10903
  "id": "step-7",
 
10927
  {
10928
  "type": "quiz",
10929
  "qtype": "fill",
10930
+ "id": "flow-32::step-7::q7",
10931
  "prompt_runs": [
10932
  {
10933
  "text": "因此"
 
10951
  "right_msg": "",
10952
  "wrong_msg": "",
10953
  "card": "0",
10954
+ "flow": "flow-32",
10955
  "step": "step-7"
10956
  }
10957
  ],
10958
+ "gate_from": "flow-32::step-6::q6"
10959
  },
10960
  {
10961
  "id": "step-8",
 
10965
  {
10966
  "type": "quiz",
10967
  "qtype": "choice",
10968
+ "id": "flow-32::step-8::q8",
10969
  "prompt_runs": [
10970
  {
10971
  "text": "因為"
 
11010
  "wrong_hints": {},
11011
  "card": "0",
11012
  "answer": "c",
11013
+ "flow": "flow-32",
11014
  "step": "step-8"
11015
  }
11016
  ],
11017
+ "gate_from": "flow-32::step-7::q7"
11018
  },
11019
  {
11020
  "id": "step-9",
 
11053
  ]
11054
  }
11055
  ],
11056
+ "gate_from": "flow-32::step-8::q8"
11057
  }
11058
  ]
11059
  }
 
12266
  "body": [
12267
  {
12268
  "type": "flow",
12269
+ "id": "flow-33",
12270
  "persist": "",
12271
  "steps": [
12272
  {
 
12321
  {
12322
  "type": "quiz",
12323
  "qtype": "choice",
12324
+ "id": "flow-33::step-1::q1",
12325
  "prompt_runs": [
12326
  {
12327
  "text": "此點是否在 "
 
12366
  "wrong_hints": {},
12367
  "card": "0",
12368
  "answer": "c",
12369
+ "flow": "flow-33",
12370
  "step": "step-1"
12371
  }
12372
  ],
 
12417
  {
12418
  "type": "quiz",
12419
  "qtype": "fill",
12420
+ "id": "flow-33::step-2::q2",
12421
  "prompt_runs": [
12422
  {
12423
  "text": "此邊界上的最大值:"
 
12437
  "right_msg": "",
12438
  "wrong_msg": "",
12439
  "card": "0",
12440
+ "flow": "flow-33",
12441
  "step": "step-2"
12442
  }
12443
  ],
12444
+ "gate_from": "flow-33::step-1::q1"
12445
  },
12446
  {
12447
  "id": "step-3",
 
12481
  {
12482
  "type": "quiz",
12483
  "qtype": "fill",
12484
+ "id": "flow-33::step-3::q3",
12485
  "prompt_runs": [
12486
  {
12487
  "text": "此邊界上的最小值:"
 
12501
  "right_msg": "",
12502
  "wrong_msg": "",
12503
  "card": "0",
12504
+ "flow": "flow-33",
12505
  "step": "step-3"
12506
  }
12507
  ],
12508
+ "gate_from": "flow-33::step-2::q2"
12509
  },
12510
  {
12511
  "id": "step-4",
 
12515
  {
12516
  "type": "quiz",
12517
  "qtype": "fill",
12518
+ "id": "flow-33::step-4::q4",
12519
  "prompt_runs": [
12520
  {
12521
  "text": "邊界 "
 
12556
  "right_msg": "",
12557
  "wrong_msg": "",
12558
  "card": "0",
12559
+ "flow": "flow-33",
12560
  "step": "step-4"
12561
  }
12562
  ],
12563
+ "gate_from": "flow-33::step-3::q3"
12564
  },
12565
  {
12566
  "id": "step-5",
 
12593
  {
12594
  "type": "quiz",
12595
  "qtype": "fill",
12596
+ "id": "flow-33::step-5::q5",
12597
  "prompt_runs": [
12598
  {
12599
  "text": "絕對最大值:"
 
12613
  "right_msg": "",
12614
  "wrong_msg": "",
12615
  "card": "0",
12616
+ "flow": "flow-33",
12617
  "step": "step-5"
12618
  },
12619
  {
 
12625
  {
12626
  "type": "quiz",
12627
  "qtype": "fill",
12628
+ "id": "flow-33::step-5::q6",
12629
  "prompt_runs": [
12630
  {
12631
  "text": "絕對最小值:"
 
12645
  "right_msg": "",
12646
  "wrong_msg": "",
12647
  "card": "0",
12648
+ "flow": "flow-33",
12649
  "step": "step-5"
12650
  },
12651
  {
 
12710
  ]
12711
  }
12712
  ],
12713
+ "gate_from": "flow-33::step-4::q4"
12714
  }
12715
  ]
12716
  }
pages/Ch14/C14_8/exported_result_14_8.json CHANGED
@@ -420,7 +420,7 @@
420
  },
421
  {
422
  "type": "flow",
423
- "id": "flow-32",
424
  "persist": "",
425
  "steps": [
426
  {
@@ -431,7 +431,7 @@
431
  {
432
  "type": "quiz",
433
  "qtype": "choice",
434
- "id": "flow-32::step-1::q1",
435
  "prompt_runs": [],
436
  "options": [
437
  {
@@ -450,7 +450,7 @@
450
  "wrong_hints": {},
451
  "card": "0",
452
  "answer": "b",
453
- "flow": "flow-32",
454
  "step": "step-1"
455
  }
456
  ],
@@ -523,7 +523,7 @@
523
  ]
524
  }
525
  ],
526
- "gate_from": "flow-32::step-1::q1"
527
  }
528
  ]
529
  },
@@ -1255,7 +1255,7 @@
1255
  "body": [
1256
  {
1257
  "type": "flow",
1258
- "id": "flow-33",
1259
  "persist": "",
1260
  "steps": [
1261
  {
@@ -1307,7 +1307,7 @@
1307
  {
1308
  "type": "quiz",
1309
  "qtype": "choice",
1310
- "id": "flow-33::step-1::q1",
1311
  "prompt_runs": [
1312
  {
1313
  "latex": "$x$",
@@ -1349,7 +1349,7 @@
1349
  "wrong_hints": {},
1350
  "card": "0",
1351
  "answer": "a",
1352
- "flow": "flow-33",
1353
  "step": "step-1"
1354
  }
1355
  ],
@@ -1363,7 +1363,7 @@
1363
  {
1364
  "type": "quiz",
1365
  "qtype": "fill",
1366
- "id": "flow-33::step-2::q2",
1367
  "prompt_runs": [
1368
  {
1369
  "text": "代入 "
@@ -1404,11 +1404,11 @@
1404
  "right_msg": "",
1405
  "wrong_msg": "",
1406
  "card": "0",
1407
- "flow": "flow-33",
1408
  "step": "step-2"
1409
  }
1410
  ],
1411
- "gate_from": "flow-33::step-1::q1"
1412
  },
1413
  {
1414
  "id": "step-3",
@@ -1499,7 +1499,7 @@
1499
  ]
1500
  }
1501
  ],
1502
- "gate_from": "flow-33::step-2::q2"
1503
  }
1504
  ]
1505
  }
@@ -1956,7 +1956,7 @@
1956
  "body": [
1957
  {
1958
  "type": "flow",
1959
- "id": "flow-34",
1960
  "persist": "",
1961
  "steps": [
1962
  {
@@ -1967,7 +1967,7 @@
1967
  {
1968
  "type": "quiz",
1969
  "qtype": "fill",
1970
- "id": "flow-34::step-1::q1",
1971
  "prompt_runs": [
1972
  {
1973
  "latex": "$\\nabla f = \\langle f_x,f_y\\rangle =$",
@@ -1991,7 +1991,7 @@
1991
  "right_msg": "",
1992
  "wrong_msg": "",
1993
  "card": "0",
1994
- "flow": "flow-34",
1995
  "step": "step-1"
1996
  },
1997
  {
@@ -2003,7 +2003,7 @@
2003
  {
2004
  "type": "quiz",
2005
  "qtype": "fill",
2006
- "id": "flow-34::step-1::q2",
2007
  "prompt_runs": [
2008
  {
2009
  "latex": "$\\nabla g = \\langle g_x,g_y\\rangle =$",
@@ -2027,7 +2027,7 @@
2027
  "right_msg": "",
2028
  "wrong_msg": "",
2029
  "card": "0",
2030
- "flow": "flow-34",
2031
  "step": "step-1"
2032
  }
2033
  ],
@@ -2041,7 +2041,7 @@
2041
  {
2042
  "type": "quiz",
2043
  "qtype": "fill",
2044
- "id": "flow-34::step-2::q3",
2045
  "prompt_runs": [
2046
  {
2047
  "text": "由 "
@@ -2086,11 +2086,11 @@
2086
  "right_msg": "",
2087
  "wrong_msg": "",
2088
  "card": "0",
2089
- "flow": "flow-34",
2090
  "step": "step-2"
2091
  }
2092
  ],
2093
- "gate_from": "flow-34::step-1::q1"
2094
  },
2095
  {
2096
  "id": "step-3",
@@ -2100,7 +2100,7 @@
2100
  {
2101
  "type": "quiz",
2102
  "qtype": "fill",
2103
- "id": "flow-34::step-3::q4",
2104
  "prompt_runs": [
2105
  {
2106
  "text": "代入約束條件 "
@@ -2127,7 +2127,7 @@
2127
  "right_msg": "",
2128
  "wrong_msg": "",
2129
  "card": "0",
2130
- "flow": "flow-34",
2131
  "step": "step-3"
2132
  },
2133
  {
@@ -2139,7 +2139,7 @@
2139
  {
2140
  "type": "quiz",
2141
  "qtype": "fill",
2142
- "id": "flow-34::step-3::q5",
2143
  "prompt_runs": [
2144
  {
2145
  "latex": "$\\lambda = ?$",
@@ -2160,11 +2160,11 @@
2160
  "right_msg": "",
2161
  "wrong_msg": "",
2162
  "card": "0",
2163
- "flow": "flow-34",
2164
  "step": "step-3"
2165
  }
2166
  ],
2167
- "gate_from": "flow-34::step-2::q3"
2168
  }
2169
  ]
2170
  }
@@ -2543,7 +2543,7 @@
2543
  "body": [
2544
  {
2545
  "type": "flow",
2546
- "id": "flow-35",
2547
  "persist": "",
2548
  "steps": [
2549
  {
@@ -2554,7 +2554,7 @@
2554
  {
2555
  "type": "quiz",
2556
  "qtype": "fill",
2557
- "id": "flow-35::step-1::q1",
2558
  "prompt_runs": [
2559
  {
2560
  "text": "設定目標函數和約束條件:- 目標函數:"
@@ -2578,7 +2578,7 @@
2578
  "right_msg": "",
2579
  "wrong_msg": "",
2580
  "card": "0",
2581
- "flow": "flow-35",
2582
  "step": "step-1"
2583
  },
2584
  {
@@ -2609,7 +2609,7 @@
2609
  {
2610
  "type": "quiz",
2611
  "qtype": "fill",
2612
- "id": "flow-35::step-1::q2",
2613
  "prompt_runs": [],
2614
  "answers": [
2615
  "4*x+y=200"
@@ -2625,7 +2625,7 @@
2625
  "right_msg": "",
2626
  "wrong_msg": "",
2627
  "card": "0",
2628
- "flow": "flow-35",
2629
  "step": "step-1"
2630
  }
2631
  ],
@@ -2639,7 +2639,7 @@
2639
  {
2640
  "type": "quiz",
2641
  "qtype": "choice",
2642
- "id": "flow-35::step-2::q3",
2643
  "prompt_runs": [
2644
  {
2645
  "text": "由梯度方程得 "
@@ -2691,11 +2691,11 @@
2691
  "wrong_hints": {},
2692
  "card": "0",
2693
  "answer": "b",
2694
- "flow": "flow-35",
2695
  "step": "step-2"
2696
  }
2697
  ],
2698
- "gate_from": "flow-35::step-1::q1"
2699
  },
2700
  {
2701
  "id": "step-3",
@@ -2705,7 +2705,7 @@
2705
  {
2706
  "type": "quiz",
2707
  "qtype": "fill",
2708
- "id": "flow-35::step-3::q4",
2709
  "prompt_runs": [
2710
  {
2711
  "text": "代入約束條件,求最佳組合:"
@@ -2725,11 +2725,11 @@
2725
  "right_msg": "",
2726
  "wrong_msg": "",
2727
  "card": "0",
2728
- "flow": "flow-35",
2729
  "step": "step-3"
2730
  }
2731
  ],
2732
- "gate_from": "flow-35::step-2::q3"
2733
  },
2734
  {
2735
  "id": "step-4",
@@ -2739,7 +2739,7 @@
2739
  {
2740
  "type": "quiz",
2741
  "qtype": "fill",
2742
- "id": "flow-35::step-4::q5",
2743
  "prompt_runs": [
2744
  {
2745
  "text": "代入目標函數,最大產量:"
@@ -2759,11 +2759,11 @@
2759
  "right_msg": "",
2760
  "wrong_msg": "",
2761
  "card": "0",
2762
- "flow": "flow-35",
2763
  "step": "step-4"
2764
  }
2765
  ],
2766
- "gate_from": "flow-35::step-3::q4"
2767
  }
2768
  ]
2769
  }
@@ -3003,7 +3003,7 @@
3003
  },
3004
  {
3005
  "type": "flow",
3006
- "id": "flow-36",
3007
  "persist": "",
3008
  "steps": [
3009
  {
@@ -3014,7 +3014,7 @@
3014
  {
3015
  "type": "quiz",
3016
  "qtype": "choice",
3017
- "id": "flow-36::step-1::q1",
3018
  "prompt_runs": [],
3019
  "options": [
3020
  {
@@ -3033,7 +3033,7 @@
3033
  "wrong_hints": {},
3034
  "card": "0",
3035
  "answer": "b",
3036
- "flow": "flow-36",
3037
  "step": "step-1"
3038
  }
3039
  ],
@@ -3084,7 +3084,7 @@
3084
  ]
3085
  }
3086
  ],
3087
- "gate_from": "flow-36::step-1::q1"
3088
  }
3089
  ]
3090
  },
@@ -3816,7 +3816,7 @@
3816
  },
3817
  {
3818
  "type": "flow",
3819
- "id": "flow-32",
3820
  "persist": "",
3821
  "steps": [
3822
  {
@@ -3827,7 +3827,7 @@
3827
  {
3828
  "type": "quiz",
3829
  "qtype": "choice",
3830
- "id": "flow-32::step-1::q1",
3831
  "prompt_runs": [],
3832
  "options": [
3833
  {
@@ -3846,7 +3846,7 @@
3846
  "wrong_hints": {},
3847
  "card": "0",
3848
  "answer": "b",
3849
- "flow": "flow-32",
3850
  "step": "step-1"
3851
  }
3852
  ],
@@ -3919,7 +3919,7 @@
3919
  ]
3920
  }
3921
  ],
3922
- "gate_from": "flow-32::step-1::q1"
3923
  }
3924
  ]
3925
  },
@@ -4651,7 +4651,7 @@
4651
  "body": [
4652
  {
4653
  "type": "flow",
4654
- "id": "flow-33",
4655
  "persist": "",
4656
  "steps": [
4657
  {
@@ -4703,7 +4703,7 @@
4703
  {
4704
  "type": "quiz",
4705
  "qtype": "choice",
4706
- "id": "flow-33::step-1::q1",
4707
  "prompt_runs": [
4708
  {
4709
  "latex": "$x$",
@@ -4745,7 +4745,7 @@
4745
  "wrong_hints": {},
4746
  "card": "0",
4747
  "answer": "a",
4748
- "flow": "flow-33",
4749
  "step": "step-1"
4750
  }
4751
  ],
@@ -4759,7 +4759,7 @@
4759
  {
4760
  "type": "quiz",
4761
  "qtype": "fill",
4762
- "id": "flow-33::step-2::q2",
4763
  "prompt_runs": [
4764
  {
4765
  "text": "代入 "
@@ -4800,11 +4800,11 @@
4800
  "right_msg": "",
4801
  "wrong_msg": "",
4802
  "card": "0",
4803
- "flow": "flow-33",
4804
  "step": "step-2"
4805
  }
4806
  ],
4807
- "gate_from": "flow-33::step-1::q1"
4808
  },
4809
  {
4810
  "id": "step-3",
@@ -4895,7 +4895,7 @@
4895
  ]
4896
  }
4897
  ],
4898
- "gate_from": "flow-33::step-2::q2"
4899
  }
4900
  ]
4901
  }
@@ -5352,7 +5352,7 @@
5352
  "body": [
5353
  {
5354
  "type": "flow",
5355
- "id": "flow-34",
5356
  "persist": "",
5357
  "steps": [
5358
  {
@@ -5363,7 +5363,7 @@
5363
  {
5364
  "type": "quiz",
5365
  "qtype": "fill",
5366
- "id": "flow-34::step-1::q1",
5367
  "prompt_runs": [
5368
  {
5369
  "latex": "$\\nabla f = \\langle f_x,f_y\\rangle =$",
@@ -5387,7 +5387,7 @@
5387
  "right_msg": "",
5388
  "wrong_msg": "",
5389
  "card": "0",
5390
- "flow": "flow-34",
5391
  "step": "step-1"
5392
  },
5393
  {
@@ -5399,7 +5399,7 @@
5399
  {
5400
  "type": "quiz",
5401
  "qtype": "fill",
5402
- "id": "flow-34::step-1::q2",
5403
  "prompt_runs": [
5404
  {
5405
  "latex": "$\\nabla g = \\langle g_x,g_y\\rangle =$",
@@ -5423,7 +5423,7 @@
5423
  "right_msg": "",
5424
  "wrong_msg": "",
5425
  "card": "0",
5426
- "flow": "flow-34",
5427
  "step": "step-1"
5428
  }
5429
  ],
@@ -5437,7 +5437,7 @@
5437
  {
5438
  "type": "quiz",
5439
  "qtype": "fill",
5440
- "id": "flow-34::step-2::q3",
5441
  "prompt_runs": [
5442
  {
5443
  "text": "由 "
@@ -5482,11 +5482,11 @@
5482
  "right_msg": "",
5483
  "wrong_msg": "",
5484
  "card": "0",
5485
- "flow": "flow-34",
5486
  "step": "step-2"
5487
  }
5488
  ],
5489
- "gate_from": "flow-34::step-1::q1"
5490
  },
5491
  {
5492
  "id": "step-3",
@@ -5496,7 +5496,7 @@
5496
  {
5497
  "type": "quiz",
5498
  "qtype": "fill",
5499
- "id": "flow-34::step-3::q4",
5500
  "prompt_runs": [
5501
  {
5502
  "text": "代入約束條件 "
@@ -5523,7 +5523,7 @@
5523
  "right_msg": "",
5524
  "wrong_msg": "",
5525
  "card": "0",
5526
- "flow": "flow-34",
5527
  "step": "step-3"
5528
  },
5529
  {
@@ -5535,7 +5535,7 @@
5535
  {
5536
  "type": "quiz",
5537
  "qtype": "fill",
5538
- "id": "flow-34::step-3::q5",
5539
  "prompt_runs": [
5540
  {
5541
  "latex": "$\\lambda = ?$",
@@ -5556,11 +5556,11 @@
5556
  "right_msg": "",
5557
  "wrong_msg": "",
5558
  "card": "0",
5559
- "flow": "flow-34",
5560
  "step": "step-3"
5561
  }
5562
  ],
5563
- "gate_from": "flow-34::step-2::q3"
5564
  }
5565
  ]
5566
  }
@@ -5939,7 +5939,7 @@
5939
  "body": [
5940
  {
5941
  "type": "flow",
5942
- "id": "flow-35",
5943
  "persist": "",
5944
  "steps": [
5945
  {
@@ -5950,7 +5950,7 @@
5950
  {
5951
  "type": "quiz",
5952
  "qtype": "fill",
5953
- "id": "flow-35::step-1::q1",
5954
  "prompt_runs": [
5955
  {
5956
  "text": "設定目標函數和約束條件:- 目標函數:"
@@ -5974,7 +5974,7 @@
5974
  "right_msg": "",
5975
  "wrong_msg": "",
5976
  "card": "0",
5977
- "flow": "flow-35",
5978
  "step": "step-1"
5979
  },
5980
  {
@@ -6005,7 +6005,7 @@
6005
  {
6006
  "type": "quiz",
6007
  "qtype": "fill",
6008
- "id": "flow-35::step-1::q2",
6009
  "prompt_runs": [],
6010
  "answers": [
6011
  "4*x+y=200"
@@ -6021,7 +6021,7 @@
6021
  "right_msg": "",
6022
  "wrong_msg": "",
6023
  "card": "0",
6024
- "flow": "flow-35",
6025
  "step": "step-1"
6026
  }
6027
  ],
@@ -6035,7 +6035,7 @@
6035
  {
6036
  "type": "quiz",
6037
  "qtype": "choice",
6038
- "id": "flow-35::step-2::q3",
6039
  "prompt_runs": [
6040
  {
6041
  "text": "由梯度方程得 "
@@ -6087,11 +6087,11 @@
6087
  "wrong_hints": {},
6088
  "card": "0",
6089
  "answer": "b",
6090
- "flow": "flow-35",
6091
  "step": "step-2"
6092
  }
6093
  ],
6094
- "gate_from": "flow-35::step-1::q1"
6095
  },
6096
  {
6097
  "id": "step-3",
@@ -6101,7 +6101,7 @@
6101
  {
6102
  "type": "quiz",
6103
  "qtype": "fill",
6104
- "id": "flow-35::step-3::q4",
6105
  "prompt_runs": [
6106
  {
6107
  "text": "代入約束條件,求最佳組合:"
@@ -6121,11 +6121,11 @@
6121
  "right_msg": "",
6122
  "wrong_msg": "",
6123
  "card": "0",
6124
- "flow": "flow-35",
6125
  "step": "step-3"
6126
  }
6127
  ],
6128
- "gate_from": "flow-35::step-2::q3"
6129
  },
6130
  {
6131
  "id": "step-4",
@@ -6135,7 +6135,7 @@
6135
  {
6136
  "type": "quiz",
6137
  "qtype": "fill",
6138
- "id": "flow-35::step-4::q5",
6139
  "prompt_runs": [
6140
  {
6141
  "text": "代入目標函數,最大產量:"
@@ -6155,11 +6155,11 @@
6155
  "right_msg": "",
6156
  "wrong_msg": "",
6157
  "card": "0",
6158
- "flow": "flow-35",
6159
  "step": "step-4"
6160
  }
6161
  ],
6162
- "gate_from": "flow-35::step-3::q4"
6163
  }
6164
  ]
6165
  }
@@ -6399,7 +6399,7 @@
6399
  },
6400
  {
6401
  "type": "flow",
6402
- "id": "flow-36",
6403
  "persist": "",
6404
  "steps": [
6405
  {
@@ -6410,7 +6410,7 @@
6410
  {
6411
  "type": "quiz",
6412
  "qtype": "choice",
6413
- "id": "flow-36::step-1::q1",
6414
  "prompt_runs": [],
6415
  "options": [
6416
  {
@@ -6429,7 +6429,7 @@
6429
  "wrong_hints": {},
6430
  "card": "0",
6431
  "answer": "b",
6432
- "flow": "flow-36",
6433
  "step": "step-1"
6434
  }
6435
  ],
@@ -6480,7 +6480,7 @@
6480
  ]
6481
  }
6482
  ],
6483
- "gate_from": "flow-36::step-1::q1"
6484
  }
6485
  ]
6486
  },
@@ -7162,7 +7162,7 @@
7162
  },
7163
  {
7164
  "type": "flow",
7165
- "id": "flow-32",
7166
  "persist": "",
7167
  "steps": [
7168
  {
@@ -7173,7 +7173,7 @@
7173
  {
7174
  "type": "quiz",
7175
  "qtype": "choice",
7176
- "id": "flow-32::step-1::q1",
7177
  "prompt_runs": [],
7178
  "options": [
7179
  {
@@ -7192,7 +7192,7 @@
7192
  "wrong_hints": {},
7193
  "card": "0",
7194
  "answer": "b",
7195
- "flow": "flow-32",
7196
  "step": "step-1"
7197
  }
7198
  ],
@@ -7265,7 +7265,7 @@
7265
  ]
7266
  }
7267
  ],
7268
- "gate_from": "flow-32::step-1::q1"
7269
  }
7270
  ]
7271
  },
@@ -8003,7 +8003,7 @@
8003
  "body": [
8004
  {
8005
  "type": "flow",
8006
- "id": "flow-33",
8007
  "persist": "",
8008
  "steps": [
8009
  {
@@ -8055,7 +8055,7 @@
8055
  {
8056
  "type": "quiz",
8057
  "qtype": "choice",
8058
- "id": "flow-33::step-1::q1",
8059
  "prompt_runs": [
8060
  {
8061
  "latex": "$x$",
@@ -8097,7 +8097,7 @@
8097
  "wrong_hints": {},
8098
  "card": "0",
8099
  "answer": "a",
8100
- "flow": "flow-33",
8101
  "step": "step-1"
8102
  }
8103
  ],
@@ -8111,7 +8111,7 @@
8111
  {
8112
  "type": "quiz",
8113
  "qtype": "fill",
8114
- "id": "flow-33::step-2::q2",
8115
  "prompt_runs": [
8116
  {
8117
  "text": "代入 "
@@ -8152,11 +8152,11 @@
8152
  "right_msg": "",
8153
  "wrong_msg": "",
8154
  "card": "0",
8155
- "flow": "flow-33",
8156
  "step": "step-2"
8157
  }
8158
  ],
8159
- "gate_from": "flow-33::step-1::q1"
8160
  },
8161
  {
8162
  "id": "step-3",
@@ -8247,7 +8247,7 @@
8247
  ]
8248
  }
8249
  ],
8250
- "gate_from": "flow-33::step-2::q2"
8251
  }
8252
  ]
8253
  }
@@ -8704,7 +8704,7 @@
8704
  "body": [
8705
  {
8706
  "type": "flow",
8707
- "id": "flow-34",
8708
  "persist": "",
8709
  "steps": [
8710
  {
@@ -8715,7 +8715,7 @@
8715
  {
8716
  "type": "quiz",
8717
  "qtype": "fill",
8718
- "id": "flow-34::step-1::q1",
8719
  "prompt_runs": [
8720
  {
8721
  "latex": "$\\nabla f = \\langle f_x,f_y\\rangle =$",
@@ -8739,7 +8739,7 @@
8739
  "right_msg": "",
8740
  "wrong_msg": "",
8741
  "card": "0",
8742
- "flow": "flow-34",
8743
  "step": "step-1"
8744
  },
8745
  {
@@ -8751,7 +8751,7 @@
8751
  {
8752
  "type": "quiz",
8753
  "qtype": "fill",
8754
- "id": "flow-34::step-1::q2",
8755
  "prompt_runs": [
8756
  {
8757
  "latex": "$\\nabla g = \\langle g_x,g_y\\rangle =$",
@@ -8775,7 +8775,7 @@
8775
  "right_msg": "",
8776
  "wrong_msg": "",
8777
  "card": "0",
8778
- "flow": "flow-34",
8779
  "step": "step-1"
8780
  }
8781
  ],
@@ -8789,7 +8789,7 @@
8789
  {
8790
  "type": "quiz",
8791
  "qtype": "fill",
8792
- "id": "flow-34::step-2::q3",
8793
  "prompt_runs": [
8794
  {
8795
  "text": "由 "
@@ -8834,11 +8834,11 @@
8834
  "right_msg": "",
8835
  "wrong_msg": "",
8836
  "card": "0",
8837
- "flow": "flow-34",
8838
  "step": "step-2"
8839
  }
8840
  ],
8841
- "gate_from": "flow-34::step-1::q1"
8842
  },
8843
  {
8844
  "id": "step-3",
@@ -8848,7 +8848,7 @@
8848
  {
8849
  "type": "quiz",
8850
  "qtype": "fill",
8851
- "id": "flow-34::step-3::q4",
8852
  "prompt_runs": [
8853
  {
8854
  "text": "代入約束條件 "
@@ -8875,7 +8875,7 @@
8875
  "right_msg": "",
8876
  "wrong_msg": "",
8877
  "card": "0",
8878
- "flow": "flow-34",
8879
  "step": "step-3"
8880
  },
8881
  {
@@ -8887,7 +8887,7 @@
8887
  {
8888
  "type": "quiz",
8889
  "qtype": "fill",
8890
- "id": "flow-34::step-3::q5",
8891
  "prompt_runs": [
8892
  {
8893
  "latex": "$\\lambda = ?$",
@@ -8908,11 +8908,11 @@
8908
  "right_msg": "",
8909
  "wrong_msg": "",
8910
  "card": "0",
8911
- "flow": "flow-34",
8912
  "step": "step-3"
8913
  }
8914
  ],
8915
- "gate_from": "flow-34::step-2::q3"
8916
  }
8917
  ]
8918
  }
@@ -9291,7 +9291,7 @@
9291
  "body": [
9292
  {
9293
  "type": "flow",
9294
- "id": "flow-35",
9295
  "persist": "",
9296
  "steps": [
9297
  {
@@ -9302,7 +9302,7 @@
9302
  {
9303
  "type": "quiz",
9304
  "qtype": "fill",
9305
- "id": "flow-35::step-1::q1",
9306
  "prompt_runs": [
9307
  {
9308
  "text": "設定目標函數和約束條件:- 目標函數:"
@@ -9326,7 +9326,7 @@
9326
  "right_msg": "",
9327
  "wrong_msg": "",
9328
  "card": "0",
9329
- "flow": "flow-35",
9330
  "step": "step-1"
9331
  },
9332
  {
@@ -9357,7 +9357,7 @@
9357
  {
9358
  "type": "quiz",
9359
  "qtype": "fill",
9360
- "id": "flow-35::step-1::q2",
9361
  "prompt_runs": [],
9362
  "answers": [
9363
  "4*x+y=200"
@@ -9373,7 +9373,7 @@
9373
  "right_msg": "",
9374
  "wrong_msg": "",
9375
  "card": "0",
9376
- "flow": "flow-35",
9377
  "step": "step-1"
9378
  }
9379
  ],
@@ -9387,7 +9387,7 @@
9387
  {
9388
  "type": "quiz",
9389
  "qtype": "choice",
9390
- "id": "flow-35::step-2::q3",
9391
  "prompt_runs": [
9392
  {
9393
  "text": "由梯度方程得 "
@@ -9439,11 +9439,11 @@
9439
  "wrong_hints": {},
9440
  "card": "0",
9441
  "answer": "b",
9442
- "flow": "flow-35",
9443
  "step": "step-2"
9444
  }
9445
  ],
9446
- "gate_from": "flow-35::step-1::q1"
9447
  },
9448
  {
9449
  "id": "step-3",
@@ -9453,7 +9453,7 @@
9453
  {
9454
  "type": "quiz",
9455
  "qtype": "fill",
9456
- "id": "flow-35::step-3::q4",
9457
  "prompt_runs": [
9458
  {
9459
  "text": "代入約束條件,求最佳組合:"
@@ -9473,11 +9473,11 @@
9473
  "right_msg": "",
9474
  "wrong_msg": "",
9475
  "card": "0",
9476
- "flow": "flow-35",
9477
  "step": "step-3"
9478
  }
9479
  ],
9480
- "gate_from": "flow-35::step-2::q3"
9481
  },
9482
  {
9483
  "id": "step-4",
@@ -9487,7 +9487,7 @@
9487
  {
9488
  "type": "quiz",
9489
  "qtype": "fill",
9490
- "id": "flow-35::step-4::q5",
9491
  "prompt_runs": [
9492
  {
9493
  "text": "代入目標函數,最大產量:"
@@ -9507,11 +9507,11 @@
9507
  "right_msg": "",
9508
  "wrong_msg": "",
9509
  "card": "0",
9510
- "flow": "flow-35",
9511
  "step": "step-4"
9512
  }
9513
  ],
9514
- "gate_from": "flow-35::step-3::q4"
9515
  }
9516
  ]
9517
  }
@@ -9757,7 +9757,7 @@
9757
  },
9758
  {
9759
  "type": "flow",
9760
- "id": "flow-36",
9761
  "persist": "",
9762
  "steps": [
9763
  {
@@ -9768,7 +9768,7 @@
9768
  {
9769
  "type": "quiz",
9770
  "qtype": "choice",
9771
- "id": "flow-36::step-1::q1",
9772
  "prompt_runs": [],
9773
  "options": [
9774
  {
@@ -9787,7 +9787,7 @@
9787
  "wrong_hints": {},
9788
  "card": "0",
9789
  "answer": "b",
9790
- "flow": "flow-36",
9791
  "step": "step-1"
9792
  }
9793
  ],
@@ -9838,7 +9838,7 @@
9838
  ]
9839
  }
9840
  ],
9841
- "gate_from": "flow-36::step-1::q1"
9842
  }
9843
  ]
9844
  },
 
420
  },
421
  {
422
  "type": "flow",
423
+ "id": "flow-34",
424
  "persist": "",
425
  "steps": [
426
  {
 
431
  {
432
  "type": "quiz",
433
  "qtype": "choice",
434
+ "id": "flow-34::step-1::q1",
435
  "prompt_runs": [],
436
  "options": [
437
  {
 
450
  "wrong_hints": {},
451
  "card": "0",
452
  "answer": "b",
453
+ "flow": "flow-34",
454
  "step": "step-1"
455
  }
456
  ],
 
523
  ]
524
  }
525
  ],
526
+ "gate_from": "flow-34::step-1::q1"
527
  }
528
  ]
529
  },
 
1255
  "body": [
1256
  {
1257
  "type": "flow",
1258
+ "id": "flow-35",
1259
  "persist": "",
1260
  "steps": [
1261
  {
 
1307
  {
1308
  "type": "quiz",
1309
  "qtype": "choice",
1310
+ "id": "flow-35::step-1::q1",
1311
  "prompt_runs": [
1312
  {
1313
  "latex": "$x$",
 
1349
  "wrong_hints": {},
1350
  "card": "0",
1351
  "answer": "a",
1352
+ "flow": "flow-35",
1353
  "step": "step-1"
1354
  }
1355
  ],
 
1363
  {
1364
  "type": "quiz",
1365
  "qtype": "fill",
1366
+ "id": "flow-35::step-2::q2",
1367
  "prompt_runs": [
1368
  {
1369
  "text": "代入 "
 
1404
  "right_msg": "",
1405
  "wrong_msg": "",
1406
  "card": "0",
1407
+ "flow": "flow-35",
1408
  "step": "step-2"
1409
  }
1410
  ],
1411
+ "gate_from": "flow-35::step-1::q1"
1412
  },
1413
  {
1414
  "id": "step-3",
 
1499
  ]
1500
  }
1501
  ],
1502
+ "gate_from": "flow-35::step-2::q2"
1503
  }
1504
  ]
1505
  }
 
1956
  "body": [
1957
  {
1958
  "type": "flow",
1959
+ "id": "flow-36",
1960
  "persist": "",
1961
  "steps": [
1962
  {
 
1967
  {
1968
  "type": "quiz",
1969
  "qtype": "fill",
1970
+ "id": "flow-36::step-1::q1",
1971
  "prompt_runs": [
1972
  {
1973
  "latex": "$\\nabla f = \\langle f_x,f_y\\rangle =$",
 
1991
  "right_msg": "",
1992
  "wrong_msg": "",
1993
  "card": "0",
1994
+ "flow": "flow-36",
1995
  "step": "step-1"
1996
  },
1997
  {
 
2003
  {
2004
  "type": "quiz",
2005
  "qtype": "fill",
2006
+ "id": "flow-36::step-1::q2",
2007
  "prompt_runs": [
2008
  {
2009
  "latex": "$\\nabla g = \\langle g_x,g_y\\rangle =$",
 
2027
  "right_msg": "",
2028
  "wrong_msg": "",
2029
  "card": "0",
2030
+ "flow": "flow-36",
2031
  "step": "step-1"
2032
  }
2033
  ],
 
2041
  {
2042
  "type": "quiz",
2043
  "qtype": "fill",
2044
+ "id": "flow-36::step-2::q3",
2045
  "prompt_runs": [
2046
  {
2047
  "text": "由 "
 
2086
  "right_msg": "",
2087
  "wrong_msg": "",
2088
  "card": "0",
2089
+ "flow": "flow-36",
2090
  "step": "step-2"
2091
  }
2092
  ],
2093
+ "gate_from": "flow-36::step-1::q1"
2094
  },
2095
  {
2096
  "id": "step-3",
 
2100
  {
2101
  "type": "quiz",
2102
  "qtype": "fill",
2103
+ "id": "flow-36::step-3::q4",
2104
  "prompt_runs": [
2105
  {
2106
  "text": "代入約束條件 "
 
2127
  "right_msg": "",
2128
  "wrong_msg": "",
2129
  "card": "0",
2130
+ "flow": "flow-36",
2131
  "step": "step-3"
2132
  },
2133
  {
 
2139
  {
2140
  "type": "quiz",
2141
  "qtype": "fill",
2142
+ "id": "flow-36::step-3::q5",
2143
  "prompt_runs": [
2144
  {
2145
  "latex": "$\\lambda = ?$",
 
2160
  "right_msg": "",
2161
  "wrong_msg": "",
2162
  "card": "0",
2163
+ "flow": "flow-36",
2164
  "step": "step-3"
2165
  }
2166
  ],
2167
+ "gate_from": "flow-36::step-2::q3"
2168
  }
2169
  ]
2170
  }
 
2543
  "body": [
2544
  {
2545
  "type": "flow",
2546
+ "id": "flow-37",
2547
  "persist": "",
2548
  "steps": [
2549
  {
 
2554
  {
2555
  "type": "quiz",
2556
  "qtype": "fill",
2557
+ "id": "flow-37::step-1::q1",
2558
  "prompt_runs": [
2559
  {
2560
  "text": "設定目標函數和約束條件:- 目標函數:"
 
2578
  "right_msg": "",
2579
  "wrong_msg": "",
2580
  "card": "0",
2581
+ "flow": "flow-37",
2582
  "step": "step-1"
2583
  },
2584
  {
 
2609
  {
2610
  "type": "quiz",
2611
  "qtype": "fill",
2612
+ "id": "flow-37::step-1::q2",
2613
  "prompt_runs": [],
2614
  "answers": [
2615
  "4*x+y=200"
 
2625
  "right_msg": "",
2626
  "wrong_msg": "",
2627
  "card": "0",
2628
+ "flow": "flow-37",
2629
  "step": "step-1"
2630
  }
2631
  ],
 
2639
  {
2640
  "type": "quiz",
2641
  "qtype": "choice",
2642
+ "id": "flow-37::step-2::q3",
2643
  "prompt_runs": [
2644
  {
2645
  "text": "由梯度方程得 "
 
2691
  "wrong_hints": {},
2692
  "card": "0",
2693
  "answer": "b",
2694
+ "flow": "flow-37",
2695
  "step": "step-2"
2696
  }
2697
  ],
2698
+ "gate_from": "flow-37::step-1::q1"
2699
  },
2700
  {
2701
  "id": "step-3",
 
2705
  {
2706
  "type": "quiz",
2707
  "qtype": "fill",
2708
+ "id": "flow-37::step-3::q4",
2709
  "prompt_runs": [
2710
  {
2711
  "text": "代入約束條件,求最佳組合:"
 
2725
  "right_msg": "",
2726
  "wrong_msg": "",
2727
  "card": "0",
2728
+ "flow": "flow-37",
2729
  "step": "step-3"
2730
  }
2731
  ],
2732
+ "gate_from": "flow-37::step-2::q3"
2733
  },
2734
  {
2735
  "id": "step-4",
 
2739
  {
2740
  "type": "quiz",
2741
  "qtype": "fill",
2742
+ "id": "flow-37::step-4::q5",
2743
  "prompt_runs": [
2744
  {
2745
  "text": "代入目標函數,最大產量:"
 
2759
  "right_msg": "",
2760
  "wrong_msg": "",
2761
  "card": "0",
2762
+ "flow": "flow-37",
2763
  "step": "step-4"
2764
  }
2765
  ],
2766
+ "gate_from": "flow-37::step-3::q4"
2767
  }
2768
  ]
2769
  }
 
3003
  },
3004
  {
3005
  "type": "flow",
3006
+ "id": "flow-38",
3007
  "persist": "",
3008
  "steps": [
3009
  {
 
3014
  {
3015
  "type": "quiz",
3016
  "qtype": "choice",
3017
+ "id": "flow-38::step-1::q1",
3018
  "prompt_runs": [],
3019
  "options": [
3020
  {
 
3033
  "wrong_hints": {},
3034
  "card": "0",
3035
  "answer": "b",
3036
+ "flow": "flow-38",
3037
  "step": "step-1"
3038
  }
3039
  ],
 
3084
  ]
3085
  }
3086
  ],
3087
+ "gate_from": "flow-38::step-1::q1"
3088
  }
3089
  ]
3090
  },
 
3816
  },
3817
  {
3818
  "type": "flow",
3819
+ "id": "flow-34",
3820
  "persist": "",
3821
  "steps": [
3822
  {
 
3827
  {
3828
  "type": "quiz",
3829
  "qtype": "choice",
3830
+ "id": "flow-34::step-1::q1",
3831
  "prompt_runs": [],
3832
  "options": [
3833
  {
 
3846
  "wrong_hints": {},
3847
  "card": "0",
3848
  "answer": "b",
3849
+ "flow": "flow-34",
3850
  "step": "step-1"
3851
  }
3852
  ],
 
3919
  ]
3920
  }
3921
  ],
3922
+ "gate_from": "flow-34::step-1::q1"
3923
  }
3924
  ]
3925
  },
 
4651
  "body": [
4652
  {
4653
  "type": "flow",
4654
+ "id": "flow-35",
4655
  "persist": "",
4656
  "steps": [
4657
  {
 
4703
  {
4704
  "type": "quiz",
4705
  "qtype": "choice",
4706
+ "id": "flow-35::step-1::q1",
4707
  "prompt_runs": [
4708
  {
4709
  "latex": "$x$",
 
4745
  "wrong_hints": {},
4746
  "card": "0",
4747
  "answer": "a",
4748
+ "flow": "flow-35",
4749
  "step": "step-1"
4750
  }
4751
  ],
 
4759
  {
4760
  "type": "quiz",
4761
  "qtype": "fill",
4762
+ "id": "flow-35::step-2::q2",
4763
  "prompt_runs": [
4764
  {
4765
  "text": "代入 "
 
4800
  "right_msg": "",
4801
  "wrong_msg": "",
4802
  "card": "0",
4803
+ "flow": "flow-35",
4804
  "step": "step-2"
4805
  }
4806
  ],
4807
+ "gate_from": "flow-35::step-1::q1"
4808
  },
4809
  {
4810
  "id": "step-3",
 
4895
  ]
4896
  }
4897
  ],
4898
+ "gate_from": "flow-35::step-2::q2"
4899
  }
4900
  ]
4901
  }
 
5352
  "body": [
5353
  {
5354
  "type": "flow",
5355
+ "id": "flow-36",
5356
  "persist": "",
5357
  "steps": [
5358
  {
 
5363
  {
5364
  "type": "quiz",
5365
  "qtype": "fill",
5366
+ "id": "flow-36::step-1::q1",
5367
  "prompt_runs": [
5368
  {
5369
  "latex": "$\\nabla f = \\langle f_x,f_y\\rangle =$",
 
5387
  "right_msg": "",
5388
  "wrong_msg": "",
5389
  "card": "0",
5390
+ "flow": "flow-36",
5391
  "step": "step-1"
5392
  },
5393
  {
 
5399
  {
5400
  "type": "quiz",
5401
  "qtype": "fill",
5402
+ "id": "flow-36::step-1::q2",
5403
  "prompt_runs": [
5404
  {
5405
  "latex": "$\\nabla g = \\langle g_x,g_y\\rangle =$",
 
5423
  "right_msg": "",
5424
  "wrong_msg": "",
5425
  "card": "0",
5426
+ "flow": "flow-36",
5427
  "step": "step-1"
5428
  }
5429
  ],
 
5437
  {
5438
  "type": "quiz",
5439
  "qtype": "fill",
5440
+ "id": "flow-36::step-2::q3",
5441
  "prompt_runs": [
5442
  {
5443
  "text": "由 "
 
5482
  "right_msg": "",
5483
  "wrong_msg": "",
5484
  "card": "0",
5485
+ "flow": "flow-36",
5486
  "step": "step-2"
5487
  }
5488
  ],
5489
+ "gate_from": "flow-36::step-1::q1"
5490
  },
5491
  {
5492
  "id": "step-3",
 
5496
  {
5497
  "type": "quiz",
5498
  "qtype": "fill",
5499
+ "id": "flow-36::step-3::q4",
5500
  "prompt_runs": [
5501
  {
5502
  "text": "代入約束條件 "
 
5523
  "right_msg": "",
5524
  "wrong_msg": "",
5525
  "card": "0",
5526
+ "flow": "flow-36",
5527
  "step": "step-3"
5528
  },
5529
  {
 
5535
  {
5536
  "type": "quiz",
5537
  "qtype": "fill",
5538
+ "id": "flow-36::step-3::q5",
5539
  "prompt_runs": [
5540
  {
5541
  "latex": "$\\lambda = ?$",
 
5556
  "right_msg": "",
5557
  "wrong_msg": "",
5558
  "card": "0",
5559
+ "flow": "flow-36",
5560
  "step": "step-3"
5561
  }
5562
  ],
5563
+ "gate_from": "flow-36::step-2::q3"
5564
  }
5565
  ]
5566
  }
 
5939
  "body": [
5940
  {
5941
  "type": "flow",
5942
+ "id": "flow-37",
5943
  "persist": "",
5944
  "steps": [
5945
  {
 
5950
  {
5951
  "type": "quiz",
5952
  "qtype": "fill",
5953
+ "id": "flow-37::step-1::q1",
5954
  "prompt_runs": [
5955
  {
5956
  "text": "設定目標函數和約束條件:- 目標函數:"
 
5974
  "right_msg": "",
5975
  "wrong_msg": "",
5976
  "card": "0",
5977
+ "flow": "flow-37",
5978
  "step": "step-1"
5979
  },
5980
  {
 
6005
  {
6006
  "type": "quiz",
6007
  "qtype": "fill",
6008
+ "id": "flow-37::step-1::q2",
6009
  "prompt_runs": [],
6010
  "answers": [
6011
  "4*x+y=200"
 
6021
  "right_msg": "",
6022
  "wrong_msg": "",
6023
  "card": "0",
6024
+ "flow": "flow-37",
6025
  "step": "step-1"
6026
  }
6027
  ],
 
6035
  {
6036
  "type": "quiz",
6037
  "qtype": "choice",
6038
+ "id": "flow-37::step-2::q3",
6039
  "prompt_runs": [
6040
  {
6041
  "text": "由梯度方程得 "
 
6087
  "wrong_hints": {},
6088
  "card": "0",
6089
  "answer": "b",
6090
+ "flow": "flow-37",
6091
  "step": "step-2"
6092
  }
6093
  ],
6094
+ "gate_from": "flow-37::step-1::q1"
6095
  },
6096
  {
6097
  "id": "step-3",
 
6101
  {
6102
  "type": "quiz",
6103
  "qtype": "fill",
6104
+ "id": "flow-37::step-3::q4",
6105
  "prompt_runs": [
6106
  {
6107
  "text": "代入約束條件,求最佳組合:"
 
6121
  "right_msg": "",
6122
  "wrong_msg": "",
6123
  "card": "0",
6124
+ "flow": "flow-37",
6125
  "step": "step-3"
6126
  }
6127
  ],
6128
+ "gate_from": "flow-37::step-2::q3"
6129
  },
6130
  {
6131
  "id": "step-4",
 
6135
  {
6136
  "type": "quiz",
6137
  "qtype": "fill",
6138
+ "id": "flow-37::step-4::q5",
6139
  "prompt_runs": [
6140
  {
6141
  "text": "代入目標函數,最大產量:"
 
6155
  "right_msg": "",
6156
  "wrong_msg": "",
6157
  "card": "0",
6158
+ "flow": "flow-37",
6159
  "step": "step-4"
6160
  }
6161
  ],
6162
+ "gate_from": "flow-37::step-3::q4"
6163
  }
6164
  ]
6165
  }
 
6399
  },
6400
  {
6401
  "type": "flow",
6402
+ "id": "flow-38",
6403
  "persist": "",
6404
  "steps": [
6405
  {
 
6410
  {
6411
  "type": "quiz",
6412
  "qtype": "choice",
6413
+ "id": "flow-38::step-1::q1",
6414
  "prompt_runs": [],
6415
  "options": [
6416
  {
 
6429
  "wrong_hints": {},
6430
  "card": "0",
6431
  "answer": "b",
6432
+ "flow": "flow-38",
6433
  "step": "step-1"
6434
  }
6435
  ],
 
6480
  ]
6481
  }
6482
  ],
6483
+ "gate_from": "flow-38::step-1::q1"
6484
  }
6485
  ]
6486
  },
 
7162
  },
7163
  {
7164
  "type": "flow",
7165
+ "id": "flow-34",
7166
  "persist": "",
7167
  "steps": [
7168
  {
 
7173
  {
7174
  "type": "quiz",
7175
  "qtype": "choice",
7176
+ "id": "flow-34::step-1::q1",
7177
  "prompt_runs": [],
7178
  "options": [
7179
  {
 
7192
  "wrong_hints": {},
7193
  "card": "0",
7194
  "answer": "b",
7195
+ "flow": "flow-34",
7196
  "step": "step-1"
7197
  }
7198
  ],
 
7265
  ]
7266
  }
7267
  ],
7268
+ "gate_from": "flow-34::step-1::q1"
7269
  }
7270
  ]
7271
  },
 
8003
  "body": [
8004
  {
8005
  "type": "flow",
8006
+ "id": "flow-35",
8007
  "persist": "",
8008
  "steps": [
8009
  {
 
8055
  {
8056
  "type": "quiz",
8057
  "qtype": "choice",
8058
+ "id": "flow-35::step-1::q1",
8059
  "prompt_runs": [
8060
  {
8061
  "latex": "$x$",
 
8097
  "wrong_hints": {},
8098
  "card": "0",
8099
  "answer": "a",
8100
+ "flow": "flow-35",
8101
  "step": "step-1"
8102
  }
8103
  ],
 
8111
  {
8112
  "type": "quiz",
8113
  "qtype": "fill",
8114
+ "id": "flow-35::step-2::q2",
8115
  "prompt_runs": [
8116
  {
8117
  "text": "代入 "
 
8152
  "right_msg": "",
8153
  "wrong_msg": "",
8154
  "card": "0",
8155
+ "flow": "flow-35",
8156
  "step": "step-2"
8157
  }
8158
  ],
8159
+ "gate_from": "flow-35::step-1::q1"
8160
  },
8161
  {
8162
  "id": "step-3",
 
8247
  ]
8248
  }
8249
  ],
8250
+ "gate_from": "flow-35::step-2::q2"
8251
  }
8252
  ]
8253
  }
 
8704
  "body": [
8705
  {
8706
  "type": "flow",
8707
+ "id": "flow-36",
8708
  "persist": "",
8709
  "steps": [
8710
  {
 
8715
  {
8716
  "type": "quiz",
8717
  "qtype": "fill",
8718
+ "id": "flow-36::step-1::q1",
8719
  "prompt_runs": [
8720
  {
8721
  "latex": "$\\nabla f = \\langle f_x,f_y\\rangle =$",
 
8739
  "right_msg": "",
8740
  "wrong_msg": "",
8741
  "card": "0",
8742
+ "flow": "flow-36",
8743
  "step": "step-1"
8744
  },
8745
  {
 
8751
  {
8752
  "type": "quiz",
8753
  "qtype": "fill",
8754
+ "id": "flow-36::step-1::q2",
8755
  "prompt_runs": [
8756
  {
8757
  "latex": "$\\nabla g = \\langle g_x,g_y\\rangle =$",
 
8775
  "right_msg": "",
8776
  "wrong_msg": "",
8777
  "card": "0",
8778
+ "flow": "flow-36",
8779
  "step": "step-1"
8780
  }
8781
  ],
 
8789
  {
8790
  "type": "quiz",
8791
  "qtype": "fill",
8792
+ "id": "flow-36::step-2::q3",
8793
  "prompt_runs": [
8794
  {
8795
  "text": "由 "
 
8834
  "right_msg": "",
8835
  "wrong_msg": "",
8836
  "card": "0",
8837
+ "flow": "flow-36",
8838
  "step": "step-2"
8839
  }
8840
  ],
8841
+ "gate_from": "flow-36::step-1::q1"
8842
  },
8843
  {
8844
  "id": "step-3",
 
8848
  {
8849
  "type": "quiz",
8850
  "qtype": "fill",
8851
+ "id": "flow-36::step-3::q4",
8852
  "prompt_runs": [
8853
  {
8854
  "text": "代入約束條件 "
 
8875
  "right_msg": "",
8876
  "wrong_msg": "",
8877
  "card": "0",
8878
+ "flow": "flow-36",
8879
  "step": "step-3"
8880
  },
8881
  {
 
8887
  {
8888
  "type": "quiz",
8889
  "qtype": "fill",
8890
+ "id": "flow-36::step-3::q5",
8891
  "prompt_runs": [
8892
  {
8893
  "latex": "$\\lambda = ?$",
 
8908
  "right_msg": "",
8909
  "wrong_msg": "",
8910
  "card": "0",
8911
+ "flow": "flow-36",
8912
  "step": "step-3"
8913
  }
8914
  ],
8915
+ "gate_from": "flow-36::step-2::q3"
8916
  }
8917
  ]
8918
  }
 
9291
  "body": [
9292
  {
9293
  "type": "flow",
9294
+ "id": "flow-37",
9295
  "persist": "",
9296
  "steps": [
9297
  {
 
9302
  {
9303
  "type": "quiz",
9304
  "qtype": "fill",
9305
+ "id": "flow-37::step-1::q1",
9306
  "prompt_runs": [
9307
  {
9308
  "text": "設定目標函數和約束條件:- 目標函數:"
 
9326
  "right_msg": "",
9327
  "wrong_msg": "",
9328
  "card": "0",
9329
+ "flow": "flow-37",
9330
  "step": "step-1"
9331
  },
9332
  {
 
9357
  {
9358
  "type": "quiz",
9359
  "qtype": "fill",
9360
+ "id": "flow-37::step-1::q2",
9361
  "prompt_runs": [],
9362
  "answers": [
9363
  "4*x+y=200"
 
9373
  "right_msg": "",
9374
  "wrong_msg": "",
9375
  "card": "0",
9376
+ "flow": "flow-37",
9377
  "step": "step-1"
9378
  }
9379
  ],
 
9387
  {
9388
  "type": "quiz",
9389
  "qtype": "choice",
9390
+ "id": "flow-37::step-2::q3",
9391
  "prompt_runs": [
9392
  {
9393
  "text": "由梯度方程得 "
 
9439
  "wrong_hints": {},
9440
  "card": "0",
9441
  "answer": "b",
9442
+ "flow": "flow-37",
9443
  "step": "step-2"
9444
  }
9445
  ],
9446
+ "gate_from": "flow-37::step-1::q1"
9447
  },
9448
  {
9449
  "id": "step-3",
 
9453
  {
9454
  "type": "quiz",
9455
  "qtype": "fill",
9456
+ "id": "flow-37::step-3::q4",
9457
  "prompt_runs": [
9458
  {
9459
  "text": "代入約束條件,求最佳組合:"
 
9473
  "right_msg": "",
9474
  "wrong_msg": "",
9475
  "card": "0",
9476
+ "flow": "flow-37",
9477
  "step": "step-3"
9478
  }
9479
  ],
9480
+ "gate_from": "flow-37::step-2::q3"
9481
  },
9482
  {
9483
  "id": "step-4",
 
9487
  {
9488
  "type": "quiz",
9489
  "qtype": "fill",
9490
+ "id": "flow-37::step-4::q5",
9491
  "prompt_runs": [
9492
  {
9493
  "text": "代入目標函數,最大產量:"
 
9507
  "right_msg": "",
9508
  "wrong_msg": "",
9509
  "card": "0",
9510
+ "flow": "flow-37",
9511
  "step": "step-4"
9512
  }
9513
  ],
9514
+ "gate_from": "flow-37::step-3::q4"
9515
  }
9516
  ]
9517
  }
 
9757
  },
9758
  {
9759
  "type": "flow",
9760
+ "id": "flow-38",
9761
  "persist": "",
9762
  "steps": [
9763
  {
 
9768
  {
9769
  "type": "quiz",
9770
  "qtype": "choice",
9771
+ "id": "flow-38::step-1::q1",
9772
  "prompt_runs": [],
9773
  "options": [
9774
  {
 
9787
  "wrong_hints": {},
9788
  "card": "0",
9789
  "answer": "b",
9790
+ "flow": "flow-38",
9791
  "step": "step-1"
9792
  }
9793
  ],
 
9838
  ]
9839
  }
9840
  ],
9841
+ "gate_from": "flow-38::step-1::q1"
9842
  }
9843
  ]
9844
  },
pages/home.py CHANGED
@@ -12,39 +12,32 @@ dash.register_page(__name__, path='/', title ="玩轉微積:首頁")
12
  # titles = [ "網站成立理念", "微積分的重要性", "豐富的線上資源", "這個網站的特色", "製作團隊與期許" ]
13
  titles = [
14
  {"label": "網站成立理念", "id": "title_1"},
15
- {"label": "微積分的重要性", "id": "title_2"},
16
- {"label": "豐富的線上資源", "id": "title_3"},
17
  {"label": "這個網站的特色", "id": "title_4"},
18
  {"label": "製作團隊與期許", "id": "title_5"},
19
  ]
20
 
21
  texts = [
22
  ################
23
- '''在開展這個網站之前,我們想先分享我們製作本平台的初衷與動機。從微積分的性談起,也許是不錯起點。''',
24
  ###############
25
- '''微積分(Calculus)現今科學與領域中最核心的數學工具之一
26
- 幾乎所有大學的理工、商管科系以至於技職體系等,皆將其列為必修課程,其重要性不言可喻。
27
- 更進一步的說,這門學問凝聚了千百年來人類對**「無窮」**的思考與建構,包含了**「無窮小」**、**「無窮大」**、**「無窮逼近」**、**「無窮分割」**、
28
- **「無窮累加」**等。
29
- 早在古希臘時,阿基米德便開始思索如何利用窮盡法估量拋物線長度、圓周長、圓面積等,他的方法與思想被紀錄在《方法論》手稿中。
30
- 中世紀英國的牛頓與萊布尼茲,將這些思想以更有結構、張力的方式敘述,開創微積分理論,奠定了近代科學與工程發展的基石。''',
31
  ################
32
- '''隨著網路與開放資源的發展,微積分的學習方式已不再侷限於課堂教學。
33
- 無論是開放式課程(Open Course Ware)、磨課師(MOOCs)、或是利用 GeoGebra、Desmos 等工具製作的互動工具,都為學生提供了多元的學習管道。
34
- 近年來也有許多延展實境(XR)與動畫模擬資源,讓抽象的微積分概念更具體直觀。''',
35
  ################
36
  '''
37
- 我們打造這個網站的初衷,是希望讓微積分的學習者從「動手玩」角度進行自主學習
38
- 透過設計的互動元件,學習者能更直觀地理解每個主題,並在探索中產生「驚喜」與「共鳴」。
39
- 我們也導入 GPT 技術,讓使用者在答題錯誤時能即時獲得引導與解析,因為我們深信:從錯中學習,是有效學習的重要途徑。
40
  ''',
41
  ################
42
  '''
43
- 本網站由國立高雄大學應用數學系師生共同開發。初期參與成員包含教師梁育豪、碩士班學生賴竹盈大學部學生陳筠潔。
44
- 我們希望藉由不同學習階段的成員協作,結合多面向的思維,共同建構一個充滿啟發性的學習平台。
45
- 由於資源有限網站仍可有不足之處懇請您不吝供建議教,讓我們持續改進,一同推更有趣、更有效微積分
 
 
46
  '''
47
- ]
48
 
49
 
50
  import re
 
12
  # titles = [ "網站成立理念", "微積分的重要性", "豐富的線上資源", "這個網站的特色", "製作團隊與期許" ]
13
  titles = [
14
  {"label": "網站成立理念", "id": "title_1"},
15
+ {"label": "微積分學習挑戰", "id": "title_2"},
16
+ {"label": "數位學習資源的發展", "id": "title_3"},
17
  {"label": "這個網站的特色", "id": "title_4"},
18
  {"label": "製作團隊與期許", "id": "title_5"},
19
  ]
20
 
21
  texts = [
22
  ################
23
+ '''本平台的設計起點,來自於微積分學習過程中常見困難:學生不只需理解公式與計算方法,也需要看懂圖形、掌握幾何意義,並在練習過程中獲得適當的提示與回饋。因此,我們希望建置一整合教材閱讀、互動作答、圖形視覺化與 AI 輔助微積分學習平台,讓學生能在同一個學習流程中進行觀察、操作、作答與修正。''',
24
  ###############
25
+ '''微積分是、資訊、商管與相關領域的重要基礎課程,許多後續課程與應用問題都需要使用微積分中的概念。然而,微積分的學習困難往往不只在於計算本身,也包含概念理解與表徵轉換。例如,學生需要將文字敘述、代公式、函數圖形與幾何意義連結起來,才能真正理解導數、積分、方向導數、梯度與多變數函數等內容。尤其在多變數微積分中,習者還需要理解平面、曲面、方向變化與空間關係若只依靠靜態文字或單純公式推導,容易造成學習上的斷裂與困惑。''',
 
 
 
 
 
26
  ################
27
+ '''隨著網路與數位資源的發展,微積分的學習方式已不再侷限於課堂講授。目前已有開放式課程、磨課師平台、教學影片、互動題目平台,以及 GeoGebra、Desmos 等圖形工具,能從不同面向輔助學生學習這些資源各有特色,有些偏重完整課程與影片講解,有些強調互動練習,也有些主要提供圖形視覺化輔助。不過,學生在實際學習時,往往需要在教材、圖形、題目與回饋之間來回切換。若這些功能分散在不同平台或頁面中,學習流程容易被中斷,也較不容易形成連續的概念建構。''',
 
 
28
  ################
29
  '''
30
+ 網站的特色,是將**教材內容**、**互動作答**、**圖形視覺化**與**生成式 AI 輔助**整合在同一個學習環境中。學生可以在閱讀教材的同時操作圖形,透過互動題目檢查自己的理解,並在作答錯誤或概念不清楚時取得提示與補充說明。平台也結合 GeoGebra 等動態視覺化工具,協助學生觀察函數圖形、方向導數、梯度向量與空間曲面等抽象概念。AI 輔助的設計並不是直接提供答案,而是希望在學生遇到困難時給予引導,協助學生檢視可能的錯誤想法,並回到概念本身重新思考。透過這樣的設計,我們希望讓微積分不只是紙上公式,而是可以被操作、觀察與修正的學習內容���
 
 
31
  ''',
32
  ################
33
  '''
34
+ 本網站由國立高雄大學應用數學系師生共同設計與開發。初期參與成員包含教師梁育豪、碩士班學生賴竹盈大學部學生陳筠潔。開發過程中,我們希望平台不只是單純呈現教材內容,而是能讓學生在閱讀、觀察、操作、作答與修正的過程中,逐步建立對微積分概念的理解。
35
+
36
+ 在學生端本平台期望提供一個更具連續性的學習環境,使學生在同一頁面中閱讀教材、操作圖形、完成互動題目並在需要時取得回饋。在師端本平台則希望降低互式教材建置技術門檻,使師能以較簡便的方式編寫、修改與維護教材內容
37
+
38
+ 本平台目前仍處於持續發展階段,未來將持續改善數學式輸入、互動題目判定、圖形操作引導、AI 提示回饋與學習紀錄呈現等功能,期望逐步成為兼具教材呈現、互動練習、視覺化理解與教學回饋的微積分學習平台。
39
  '''
40
+ ]
41
 
42
 
43
  import re
中文.tex ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ \usepackage{amsmath,amssymb}
2
+ \usepackage{xcolor}
3
+ \usepackage{xeCJK}
4
+ \usepackage{fontspec}
5
+
6
+ \setCJKmainfont[
7
+ Path = C:/LaTeXFonts/,
8
+ UprightFont = TaipeiSansTCBeta-Regular.ttf
9
+ ]{TaipeiSansTCBeta-Regular}
10
+
11
+ \pagestyle{empty}