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

用法:西文文献更精细的题名、期刊会议名等项目的大小写控制 #213

Open
fang-d opened this issue Dec 11, 2024 · 6 comments

Comments

@fang-d
Copy link

fang-d commented Dec 11, 2024

背景

目前,西文文献的题名、期刊会议名等项目的大小写均与Bib文件保持原样。但是用户从不同的源拷贝bibTeX条目的时候,可能会造成不一致,使得导出参考文献样式不统一。同时,当用户将同一个bib文件迁移到多个拥有不同样式要求的文档时,无法简单更改以适应不同的要求。

用户手册在4.4.2提及到问题的根源:

对于英文大小写问题,GB/T 7714-2015 除了责任者的大写要求外,其它要求均比较模糊,但提到可参照 ISO 4 的要求。但实际上,不同的期刊可能会有各自不同的要求。从笔者的经验看,一般国内的期刊对于字母大小写通常要求:责任者 (全部大写); 题名 (句首字母大写其它全部小写); 期刊名会议名 (单词首字母大写); 出版项和其它 (单词首字母大写)。所以用户在录入bib文件时可以按照这种常见方式来输入以减少后期修改。

更为棘手的是,用户不能简单地通过直接通过类似\DeclareFieldFormat{titlecase}{\MakeSentenceCase{#1}}的命令控制题名的大小写,因为期刊名、会议名也同样使用titlecase样式。这为西文文献更精细的题名、期刊会议名等项目的大小写控制带来了极大的麻烦。

提议

因此,本人提议:

  1. 提供参照gbnamefmt命令选项,提供gbtitlefmt选项,允许用户根据实际情况精细控制文献题名的大小写;如果可能,还可以为期刊名、会议名也提供相似的接口;
  2. 将题名、来源题名(期刊和会议名等)分成两个不同的样式,为用户提供精细定制的接口。

其它信息

值得一提的是,如果想要实现“句首字母大写其它全部小写”,目前只能通过\renewbibmacro*{title}实现。这份实现参考了gb7714-2005.bbxbiblatex-ieee/ieee.bbx,提供了与IEEE Transactions样式的题名规范(题名的第一个单词首字母大写,冒号后第一个单词首字母大写,其它字母小写):

\newcommand\bbx@colon@search@auxii[2]{#2{#1}}
\newcommand*{\bbx@colon@search}[2]{\bbx@colon@search@auxi\empty#2: \stop{#1}}
\long\def\bbx@colon@search@auxi#1: #2\stop#3{%
  \expandafter\bbx@colon@search@auxii\expandafter{#1}{#3}%
  \ifblank{#2}{}
    {%
      : %
      \bbx@colon@search@auxi\empty#2\stop{#3}%
    }%
}

\DeclareFieldFormat{titlecase2}{\bbx@colon@search{\MakeSentenceCase*}{#1}}

\renewbibmacro*{title}{%
\ifboolexpr{%
    test{\iffieldundef{title}}%
    and
    test{\iffieldundef{subtitle}}}%
    {}%
    {\printtext[title]{\bibtitlefont%增加字体控制命令
       \printfield[titlecase2]{title}%
       \ifboolexpr{test {\iffieldundef{subtitle}}}%增加了对子标题的判断
            {}{\setunit{\subtitlepunct}\printfield[titlecase]{subtitle}}%
       \iffieldundef{titleaddon}{}{\setunit{\subtitlepunct}\printfield{titleaddon}}%判断一下titleaddon
       \ifboolexpr{test{\ifentrytype{book}} and (not test{\iffieldundef{volume}})}%判断一下book类有没有volume
            {\setunit{\subtitlepunct}\printfield{volume}}{}%
       \ifboolexpr{(test{\ifentrytype{archive}} or  test{\ifentrytype{online}}) and (not test{\iffieldundef{number}})}%判断一下archive类有没有number
            {\setunit{\subtitlepunct}\printfield{number}}{}%
       \iftoggle{bbx:gbtype}%
            {\iffieldundef{entrysubtype}{\printfield[gbtypeflag]{usera}}%在标题后直接给出文献标识字母,判断一下,是否是报纸和标准
            {\iffieldequalstr{entrysubtype}{standard}{\printfield[gbtypeflags]{usera}}%判断是否为标准
                  {\iffieldequalstr{entrysubtype}{news}{\printfield[gbtypeflagn]{usera}}%判断是否为报纸
                  {\printfield[gbtypeflag]{usera}}}}}{}%%其它
       }%
    }%
}
@hushidong
Copy link
Owner

hushidong commented Dec 11, 2024

想法很好,我也支持!

不过利用tex来修改大小写,sentencecase相对容易实现,但要换成titlecase的时候,实现就会存在麻烦很多,biblatex也不提供这一功能。同时有的时候,大写的专有名词或缩略词bib中并没有加花括号保护,所以有时批量修改也不能全部正确,需要一个个检查修改。

根据我自身的经验,一般bib中写成titlecase,如果不需要改就不用改了。如果要改sentencecase也相对容易一些。
但更多的时候,我是在需要时,利用工具(比如:我提供的bibmap工具)进行转化,可能会更方便一些。无论是转成titlecase还是sentencecase 都可以,还可以对专有名词做保护。


当然,你有余力的话,也可以帮忙实现一下,然后pr进来。

@fang-d
Copy link
Author

fang-d commented Dec 11, 2024

@hushidong 感谢您的及时回复!

如您所述,我确实低估了Title Case转换的困难。更为棘手的是,一个标题的Title Case并不是唯一的!仅仅在capitalizemytitle.com上列出来的Title Case格式包括但不限于APA、Chicago、AP、MLA、BB、AMA、NY Times、Wikipedia等😰。而该网站实现标题转换的原理是组合逻辑和机器学习,这似乎不是LaTeX能简单完成的。

或许我们可以先实现sentence case保持原样两个选项,待后续有成熟的title case的解决方案时,我们再进行迭代?毕竟似乎GB7714-2015举的西文文献的例子使用的是sentence case(虽然它没有明文要求)。

如果您和社区欢迎我的解决方案的话,我很乐意在空闲的时间为这个项目pull request。

@hushidong
Copy link
Owner

@fang-d 当然,十分欢迎的!!

@zepinglee
Copy link
Contributor

因为期刊名、会议名也同样使用titlecase样式

国标中的会议名应该是使用 sentence case 的。

Screenshot 2024-12-12 at 11 14 28 Screenshot 2024-12-12 at 11 14 47

只是这里可能把「Applications of Holography in Mechanics」当成专有名词了。

或许我们可以先实现sentence case保持原样两个选项,待后续有成熟的title case的解决方案时,我们再进行迭代?毕竟似乎GB7714-2015举的西文文献的例子使用的是sentence case(虽然它没有明文要求)。

我建议默认转为 sentence case,并提供选项保留原大小写。

如您所述,我确实低估了Title Case转换的困难。更为棘手的是,一个标题的Title Case并不是唯一的!仅仅在capitalizemytitle.com上列出来的Title Case格式包括但不限于APA、Chicago、AP、MLA、BB、AMA、NY Times、Wikipedia等😰。而该网站实现标题转换的原理是组合逻辑和机器学习,这似乎不是LaTeX能简单完成的。

还有一个网站 https://titlecaseconverter.com/

Title case 转 sentence case 的主要挑战是保护专有名词和缩写,需要在 .bib 中使用大括号。而 sentence case 转 title case 在各体例中并不统一,比如 APA 要求 3 个字母或以下的短介词小写,而 Chicago 要求所有介词大写(如 between)。

APA: Title Case Capitalization

Chicago:

8.159: Principles of headline-style capitalization

The conventions of headline style are governed mainly by emphasis and grammar. The following rules, though occasionally arbitrary, are intended primarily to facilitate the consistent styling of titles mentioned or cited in text and notes:

  1. Capitalize the first and last words in titles and subtitles (but see rule 7), and capitalize all other major words (nouns, pronouns, verbs, adjectives, adverbs, and some conjunctions—but see rule 4).
  2. Lowercase the articles the, a, and an.
  3. Lowercase prepositions, regardless of length, except when they are used adverbially or adjectivally (up in Look Up, down in Turn Down, on in The On Button, to in Come To, etc.) or when they compose part of a Latin expression used adjectivally or adverbially (De Facto, In Vitro, etc.).
  4. Lowercase the common coordinating conjunctions and, but, for, or, and nor.
  5. Lowercase to not only as a preposition (rule 3) but also as part of an infinitive (to Run, to Hide, etc.), and lowercase as in any grammatical function.
  6. Lowercase the part of a proper name that would be lowercased in text, such as de or von.
  7. Lowercase the second part of a species name, such as fulvescens in Acipenser fulvescens, even if it is the last word in a title or subtitle.

@TomBener
Copy link

TomBener commented Dec 12, 2024

补充一个 Zotero 关于大小写的 推荐方案

一些引用格式(如 APA)要求书目标题采用句首字母大写格式 (sentence case)(例如:“Oxidation and reduction of iron by acidophilic bacteria”)。而其他格式(如 Chicago Manual of Style)则要求使用标题格式 (title case)(例如:“Oxidation and Reduction of Iron by Acidophilic Bacteria”)。

遗憾的是,Zotero 或其他工具无法可靠地自动将标题转换为句首字母大写格式,因为计算机无法准确识别某些词语是否为专有名词。例如,“united”可能是形容词、动词、公司名称或国家名称的一部分。

解决方法是在 Zotero 库中以句首字母大写格式存储标题,并让 Zotero 根据需要自动转换为标题格式。例如,当使用 Chicago Manual of Style 时,Zotero 会自动将标题转换为标题格式;而在使用 APA 时,它不会强制要求句首字母大写,而是按库中存储的格式显示标题。

Zotero 7 内置了将标题转为句首字母大写的功能,预置了一些特例识别,Linter 插件在其基础上,增加了针对化学式等的专有名词识别,还可以实现自动转换、设置快捷键等功能。

使用 Better BibTeX for Zotero 导出为 BibTeX 时,勾选 Apply case-protection to capitalized words by enclosing them in braces(默认开启)选项即可。

CleanShot 2024-12-12 at 11 26 16@2x

@hushidong
Copy link
Owner

@TomBener 试了一下,Linter 还可以批量修改,真不错呢。

不过我自身,因为只要维护一个bib,所以一般利用文本工具一处理就足够了。

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

No branches or pull requests

4 participants