Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature request: 支持中英双语的参考文献 #3

Open
OrangeX4 opened this issue Apr 3, 2024 · 9 comments
Open

Feature request: 支持中英双语的参考文献 #3

OrangeX4 opened this issue Apr 3, 2024 · 9 comments
Labels
enhancement New feature or request

Comments

@OrangeX4
Copy link
Member

OrangeX4 commented Apr 3, 2024

目前 Typst 不支持中英双语的参考文献,详见 typst/typst#2793typst/citationberg#5

我有一个用来解决这个问题的 proof of concept:https://typst.app/project/rN08qR13YfLociKdV7b1Mx

不过目前只是普通的简单映射替换,还需要补充这个映射表,以及希望能够处理一些更特殊的情况。

@OrangeX4
Copy link
Member Author

OrangeX4 commented Apr 3, 2024

@OrangeX4 OrangeX4 added the enhancement New feature or request label Apr 3, 2024
@csimide
Copy link
Contributor

csimide commented Apr 7, 2024

可以通过比对 Citation Style Language 项目的 locales 得到完整的映射表

实际用到的词语不多,只需要对 处理应该就可以了。

我改了一个支持第x版 的,但是不知道为什么工作不正常, 修好了,您可以在 https://gist.github.com/csimide/fc0e3ef69775a69805fc6ba7af227c4c 查看。

理论上这种做法适用于 GB7714-2015 numeric 及其变体,但是由于“方言”很多,不能保证适配所有变体。

@csimide
Copy link
Contributor

csimide commented Apr 8, 2024

请问还有其他测试引文条目吗

@OrangeX4
Copy link
Member Author

OrangeX4 commented Apr 8, 2024

我才看到,太强了,感谢补充的代码!我可以觉得可以将其用到模板里面了。
我目前也没有太多其他的测试引文条目,我觉得可以等到有更多用户反馈时再进行修改,这个 issue 可以暂且不用关闭,您也可以在 SEU-Typst-Template 也维护一个反馈的 issue。

@OrangeX4
Copy link
Member Author

OrangeX4 commented Apr 8, 2024

以及 typst 还有一个多文件架构的问题,typst 会默认使用函数定义所在目录作为“相对路径父目录”,也就是说,调用 bilingual-bibliography("ref.bib") 默认使用的是模板目录,而不是用户目录。所以这里我有一个借助闭包来解决这个问题的 workaround。

已经补充到 https://typst.app/project/rN08qR13YfLociKdV7b1Mx

@csimide
Copy link
Contributor

csimide commented Apr 8, 2024

目前判断中文的方法非常粗暴,我也不知道好不好用。

regex("[等卷册和版本章期页篇译间者(不详)]") 这一段关键字表是我看中文 locales 写的。之前看 LaTeX 文稿见过 日期不详. 之类的写法,我自己写东西引用的时候发现大部分 CSL 会将未给定的字段直接去除。因此虽然在这里对 不详 做了排除,但各种 不详 没有加到翻译表里。

我的想法是,如果做了上面的替换后,理论上应该把绝大部分单字多字的提示性文字去掉了。如果还残留有大于两个汉字,那么这条文献应该当作中文文献处理。这是一段“凭感觉”的代码,并不知道是否容易误判。如果有更好的判断方法,建议替换。

我刚发现我注释写的是

// 判断是否为中文文献:去除特定词组后,仍有至少两个连续汉字。
但代码写的是
if pureittext.find(regex("\p{sc=Hani}+")) != none {

注释与代码不符,应该改成 regex("\p{sc=Hani}{2,}") 才对。

目前还需要大量文献条目测试。我在考虑

mapping.at(itt.text, default: itt)
这里有一个 default 情况,正常情况下是不会走到这个 default 里的(即:英文条目中不应该有汉语字符)。这里或许可以改成

mapping.at(itt.text, default: text(fill: red, itt.text))

甚至添加一些其他提示语,让用户报 issue 方便处理。

原本的代码中我也写错了,应该是 mapping.at(itt.text, default: itt.text) 才对,少了个 .text


您也可以在 SEU-Typst-Template 也维护一个反馈的 issue。

SEU 用的是 GB/T 7714-2015 的方言,得找个时间改出符合要求的 CSL 来……

@csimide
Copy link
Contributor

csimide commented Apr 9, 2024

所以这里我有一个借助闭包来解决这个问题的 workaround。

我偷懒先套娃了(

#bilingual-bibliography(
  bibliography(
    "ref.bib", 
    style: "gb-t-7714-2015-numeric-seu.csl"
  )
)

@csimide
Copy link
Contributor

csimide commented Apr 10, 2024

改了一下,现在支持根据译者数量自动选择 tran 还是 trans 了。判断数量的方法比较草率,可以看注释。

另外遇到了 译为 et al. 时补 . 和空格的问题,把 也单独做了一个替换逻辑。

特殊情况越做越多,怎么回事呢

已经传到 https://typst.app/project/rN08qR13YfLociKdV7b1Mx (它出现在了我的 typst.app 里)和 https://gist.github.com/csimide/fc0e3ef69775a69805fc6ba7af227c4c

@Shuenhoy
Copy link

Shuenhoy commented Aug 25, 2024

我实现了一下 @csimidehttps://github.com/csimide/cslper 附注里写的思路 “用 WASM 缝一个 citation.js 进 typst”:
https://github.com/Shuenhoy/citext ,顺便也实现了一下类似于 parencite 的功能。稍微改一下也能实现分部参考文献

image

还存在一些小问题,比如 \LaTeX 这种特殊命令会被直接显示出来,跳转的链接没有处理,不过相对来说影响不大

内置了 gb-t-7714-2015-numeric-bilingual.csl 的支持,如果需要支持其他的 CSL 风格的话需要自己将 CSL 改一下,将显示索引的部分去掉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants