在修正字母大小寫時,雙花括號與單花括號和引號的不同行為

在修正字母大小寫時,雙花括號與單花括號和引號的不同行為

我已經下載並使用了一個包愛思唯爾。為了引用參考文獻,我匯出了.bib以以下格式從 Web of Science 匯出。我故意改變了“ab溶質」到“ABsolute" 來測試第二個大寫字母是否會被更正。我意識到,如果使用一對單花括號{}或雙引號,""則會進行更正,但如果使用雙花括號,{{}}則不會。我不想由於可以輕鬆地從Web of Science 複製,因此在複製後更改格式.bib有沒有辦法解決此問題?

情況1:

@article{ Label,
  title = {ABsolute}
}

案例2:

@article{ Label,
  title = "ABsolute"
}

案例3:

@article{ Label,
  title = {{ABsolute}}      
}

輸出:

情況1:絕對

情況2:絕對

案例3:絕對

編輯1:不幸的是,Web of Science 提供大寫的標題。

編輯2:需要澄清的是,我沒有其他方法來避免雙花括號。有沒有辦法仍然使用雙花括號,但使 Latex 像 1 和 2 的情況一樣取消大寫。

編輯3:同樣的問題已被解釋這裡。但據說可以避免雙花括號,這對我來說是不可能的。

編輯4:以下是 Web of Science 的某人寫給我的內容:

根據我們的軟體開發工程師的說法,我們需要將這些雙大括號保留在 BibTex 匯出語法中,以下提供了完整的解釋。

  1. 外部大括號只是引號。換句話說,在 BibTeX 中:

title = {臨陣退縮}

意思與此完全相同:

title =“臨陣退縮”

  1. 附加的內大括號可防止 BibTeX 調整其中字母的大小寫。它們在許多常見情況下使用,其中放置的選擇直接影響資料的輸出,如下例所示:

《撒哈拉以南非洲的愛滋病》

以下是 BibTeX 可能需要應用的一些大寫方案範例:

  1. 撒哈拉以南非洲的愛滋病(同上 - 只有簡短的介詞和其他一些小寫的特殊詞)
  2. 撒哈拉以南非洲地區的愛滋病(除專有名詞和首字母縮寫外的所有小寫字母,據說在歐洲很常見)
  3. 撒哈拉以南非洲地區的愛滋病(所有單字均大寫 - 可能默認涵蓋疑難病例)
  4. 撒哈拉以南非洲的愛滋病(所有字母大寫 - 一些著名期刊確實需要這樣做)

內部大括號用於標記大小寫重要的字母和單字,如下所示:

title = {{愛滋病}在亞哈拉{A}非洲}

如果我們簡單地省略內部大括號,則上面的樣式 2 和 3(其中一種或兩種據說在歐洲用法中非常常見)可能會被解釋為如下所示:

  1. 撒哈拉以南非洲的愛滋病
  2. 撒哈拉以南非洲的愛滋病

Web of Science 輸出無法根據我們使用的資料庫並以令每個人滿意的方式自動、一致且正確地放置內括號。因此,我們目前的實作迫使 BibTeX 呈現我們所知道的或多或少正確的唯一大寫形式,即資料庫中實際存在的資料的確切大寫形式。對於上面的例子,這意味著我們輸出這樣的資料(因此是雙括號的原因):

title = {{撒哈拉以南非洲的愛滋病}}

需要不同大小寫的研究人員也許可以檢查我們提供的大小寫,或者可能檢查它所指的項目,然後對他們認為內部大括號實際所屬的位置做出明智的判斷。在上面顯示的範例中,內部大括號可能被認為屬於以下位置:

title = {{愛滋病}在亞哈拉{A}非洲}

答案1

正如您自己指出的那樣,雙花括號可以防止大小寫更改功能更改換行的文字。這是有意的行為,並且實際上非常有用,因為BibTeX 在建立 .bbl 檔案時遺失大寫字母演示。這種行為是眾所周知的並且有記錄(參見例如設計 BibTeX 樣式:change.case$第 14 頁5BibTeX 提示與常見問題:Q5

如果您的軟體匯出不應受大小寫保護的雙括號字段,那麼這應被視為低於標準的設計決策。

然而,自動進行所需的資本化保護是相當困難的。因此,希望不讓用戶參與其中的軟體通常要么選擇根本不保護任何內容(即僅使用單個大括號並希望大小寫更改演算法不會造成太大傷害),要么保護整個內容標題(帶有雙括號,因此使大小寫更改演算法無用;優點是標題始終按照軟體中給定的方式顯示,這可能會減少用戶的投訴)。

我認為對整個字段加雙括號從來都不是一個好主意,花括號應該只在某些單字周圍添加,而這些單字永遠不能失去大寫。這仍然最好手動完成。如果軟體在欄位中加入雙花括號DOI(如您在你的評論中提及),因為biblatex會認為內部一對大括號構成 DOI 的一部份。

Biber 有一種方法可以去除不必要的外部牙套

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[fieldsource=title,
            match=\regexp{\A\{(.*)\}\Z},
            replace=\regexp{$1}]
    }
  }
}

相關內容