zotero-chinese / styles

中文 CSL 样式
https://zotero-chinese.com/styles/
Other
5.16k stars 837 forks source link

[CSL 咨询] CSL是否可以完成对标题引号的替换? #204

Closed northword closed 1 year ago

northword commented 1 year ago

描述

@zepinglee 李同学好,

打扰了,我想咨询一个与 CSL 有关的问题:

有用户反馈说部分样式要求标题以双引号包裹,那么标题里的引号就需要替换为单引号;书名号同理。

直觉告诉我这一替换应由 CSL 完成,但我在 CSL 规范里没有找到相关描述,Quotes 引号,我想咨询这种是需要用户自己将标题里的双引号替换为单引号吗?

感谢!

相关议题

https://github.com/northword/zotero-format-metadata/issues/72

yzy1228682367 commented 1 year ago

描述

@zepinglee 李同学好,

打扰了,我想咨询一个与 CSL 有关的问题:

有用户反馈说部分样式要求标题以双引号包裹,那么标题里的引号就需要替换为单引号;书名号同理。

直觉告诉我这一替换应由 CSL 完成,但我在 CSL 规范里没有找到相关描述,Quotes 引号,我想咨询这种是需要用户自己将标题里的双引号替换为单引号吗?

感谢!

相关议题

northword/zotero-format-metadata#72

大佬你好,这个问题我在这里问过了的,是不能的,抱歉我应该在上一问题之中引用以下链接(/ω\)。详情参见https://github.com/redleafnew/Chinese-STD-GB-T-7714-related-csl/issues/202

northword commented 1 year ago

@yzy1228682367 收到,谢谢!

zepinglee commented 1 year ago

直觉告诉我这一替换应由 CSL 完成,但我在 CSL 规范里没有找到相关描述,Quotes 引号

Spec 里确实没提到,但是 test-suiteflipflop_* 中有相当一部分是关于自动转换引号的。

我想咨询这种是需要用户自己将标题里的双引号替换为单引号吗?

不需要。

northword commented 1 year ago

结合 #202 ,也就是 CSL 可以正常处理引号 "" -> ''“” -> ‘’,但是不能处理书名号《》 -> <>,是这样子嘛?

解决了,是我在测试的时候没有把引号两边加空格,所以一直没试出来:

图片

图片

图片

图片

感谢!

zepinglee commented 1 year ago

结合 #202 ,也就是 CSL 可以正常处理引号 "" -> ''“” -> ‘’

CSL 输出的引号是按照 locale 的设置,不是固定的映射关系。这是因为引号在不同语言的使用习惯差异很大,见 https://en.wikipedia.org/wiki/Quotation_mark#Summary_table

但是不能处理书名号《》 -> <>,是这样子嘛?

总的来说不能。书名号比较特殊,据我了解只有中韩语言有这种用法。它相当于独立于引号的一套规则,但是 CSL 只有引号这一种 flip-flop 的方式。有一种方法是在 locale 中将 open-quote, close-quote 改为书名号,但是这样会将引号错误地转为书名号。比如标题输入为 “北斗一号”监控管理网设计与实现,在加了书名号后输出为 《〈北斗一号〉监控管理网设计与实现》。所以这种方式并不可行。

解决了,是我在测试的时候没有把引号两边加空格,所以一直没试出来:

中文的引号在 Unicode 编码上无法与西文引号区分,一般使用中文的字体显示为全角形式,所以不宜加空格。

这里的问题在于,CSL 是按照西文的习惯判断直引号是开启还是结束,比如前后是否有空格等。这主要是由于西文的右引号跟撇号(比如 don't 表示缩写)在有歧义。但这一逻辑不适用于中文。所以中文标题应使用弯引号。

zepinglee commented 1 year ago

测试中就存在引号被错误地转为书名号的问题。

这主要是因为官方 locale 中将 open-quote 设成了书名号。

https://github.com/citation-style-language/locales/blob/8bbac89b216f551ca3d4f77860818938d678badd/locales-zh-CN.xml#L157-L160

    <term name="open-quote">《</term>
    <term name="close-quote">》</term>
    <term name="open-inner-quote">〈</term>
    <term name="close-inner-quote">〉</term>

我查了一下 commit 记录,是某不熟悉大陆标点用法的台湾人提交的。

northword commented 1 year ago

我也尝试过在 CSL 样式中将 open-quote 和 close-quote 设置为书名号,但是会将正常的引号转为书名号。

我觉得可以在插件中实现转换单双书名号的转行,不妨在给插件(比如茉莉花)作者提 feature request。

有一点儿复杂,希望我理解的没有太大的偏差:

也就是如果插件实现的话,如果主要考虑中文和英文两种语言环境,只需要实现中文引号 “ ” <-> ‘ ’ 和中文书名号 《 》 <-> 〈 〉 的转换,英文的引号不要动是比较安全的,是这样嘛?

还是说这种替换最好根据 language 来,仅在 zh 时进行替换,en 不用管?

zepinglee commented 1 year ago

我也尝试过在 CSL 样式中将 open-quote 和 close-quote 设置为书名号,但是会将正常的引号转为书名号。 我觉得可以在插件中实现转换单双书名号的转行,不妨在给插件(比如茉莉花)作者提 feature request。

有一点儿复杂,希望我理解的没有太大的偏差:

也就是如果插件实现的话,如果主要考虑中文和英文两种语言环境,只需要实现中文引号 “ ” <-> ‘ ’ 和中文书名号 《 》 <-> 〈 〉 的转换,英文的引号不要动是比较安全的,是这样嘛?

还是说这种替换最好根据 language 来,仅在 zh 时进行替换,en 不用管?

只需要转换中文的书名号即可,引号不需要改。

northword commented 1 year ago

只需要转换中文的书名号即可,引号不需要改。

收到,非常感谢!

yzy1228682367 commented 1 year ago

明白!感谢两位大佬❤️