Commit 1f77d4e

HPCesia <me@hpcesia.com>
2025-03-19 13:42:57
fix: 修复英文引号问题
1 parent b64fb9b
Changed files (2)
layouts
utils
layouts/doc.typ
@@ -1,3 +1,5 @@
+#import "../utils/style.typ": fix-smartquote
+
 // 文稿设置,可以进行一些像页面边距这类的全局设置
 #let doc(
   // documentclass 传入参数
@@ -20,6 +22,7 @@
   // 3.  基本的样式设置
   set text(fallback: fallback, lang: lang)
   set page(margin: margin)
+  show: fix-smartquote
 
   // 4.  PDF 元信息
   set document(title: (("",) + info.title).sum(), author: info.author)
utils/style.typ
@@ -64,12 +64,30 @@
 
 // 获取字体中的英文部分,选取带有 `covers = "latin-in-cjk"` 的字体
 //
-// - fonts (array): 字体列表,与 typst 内建 `text` 函数中的 `font` 参数接受相同的数组,但不接受字符串
-// -> array
+// - fonts (array, str): 字体列表\
+//   接受与 typst 内建 `text` 函数中的 `font` 参数类似的数组\
+//   当传入字符串时,将直接返回该字符串\
+//   当传入的数组中不存在满足要求的元素时,将返回原数组\
+// -> array, str
 #let 英文(fonts) = {
-  assert.eq(type(fonts), array, message: "fonts 必须为数组")
-  return fonts
+  if type(fonts) == str {
+    return fonts
+  }
+  let en-fonts = fonts
     .filter(font => type(font) == dictionary)
     .filter(font => font.covers == "latin-in-cjk")
     .map(font => font.name)
+  if en-fonts.len() == 0 {
+    return fonts
+  }
+  return en-fonts
+}
+
+// 修复英文引号 `'` 和 `"` 显示为中文字形的问题
+//
+// - body (content):
+// -> content
+#let fix-smartquote(body) = context {
+  show smartquote: set text(font: 英文(text.font))
+  body
 }