
我正在尋找一個使用biblatex
,biber
和混合拉丁語/希臘語/西里爾語文檔的範例;我發現biblatex biber 非拉丁(西里爾)UTF-8 名稱和biblatex:使用firstinits選項縮寫西里爾字母作者姓名,但它們都不是結論性的(並且是封閉的)。因此,我想出了一個 MWE(如下),它可以pdflatex test.tex; biber test; pdflatex test.tex; pdflatex test.tex
(使用 TexLive 2014)進行編譯,並產生以下內容:
大多數情況下它看起來應該是這樣的 - 我的問題是:
- 這是在 biblatex/biber 中使用西里爾字母名稱/標題的正確方法嗎? (也就是說,與
\foreignlanguage
?) - 就像上面的帖子一樣,西里爾字母名稱沒有縮寫,而拉丁字母名稱則縮寫。我怎麼才能讓它們都縮寫?
編輯:不縮寫的原因可以在.bbl
文件中看到:
\name{author}{1}{}{%
{{hash=3bd6100cde97ee45844a484f7fc7612b}{Goethe}{G\bibinitperiod}{Johann\bibnamedelima Wolfgang}{J\bibinitperiod\bibinitdelim W\bibinitperiod}{von}{v\bibinitperiod}{}{}}%
...
\name{author}{1}{}{%
{{hash=c78e01570c60a06ba7419ac38e11ab99}{\foreignlanguage{russian}{Фёдор\bibnamedelimb Михайлович\bibnamedelimb Достоевский}}{\\bibinitperiod}{}{}{}{}{}{}}%
看起來,biblatex
/biber
足夠聰明,能夠看穿並為西里爾字母名稱\foreignlanguage
插入 a \bibnamedelimb
,但不知何故,它並沒有填充所有字段(特別是包含縮寫的字段)。如果我嘗試手動破解,並透過類比插入拉丁名稱 forlabelname
和author
,則改為:
{{hash=c78e01570c60a06ba7419ac38e11ab99}{\foreignlanguage{russian}{Достоевский}}{\foreignlanguage{russian}{Д\bibinitperiod}}{\foreignlanguage{russian}{Фёдор\bibnamedelima Михайлович}}{\foreignlanguage{russian}{Ф\bibinitperiod\bibinitdelim М\bibinitperiod}}{}{}{}{}}%
....然後縮寫作品 - 但顯然,我不想為每個西里爾文條目手動執行此操作,因此可以提出問題:我可以biber
通過在文件中輸入一些命令來以某種方式誘導自動生成此內容.bib
嗎?
EDIT2:我還嘗試在 .bib 檔案中用外語包裝每個作者姓名單字:
author={\foreignlanguage{russian}{Фёдор} \foreignlanguage{russian}{Михайлович} \foreignlanguage{russian}{Достоевский}},
……這根本不起作用(沒有縮寫,事實上,最終輸出中跳過了一些單字)。
編輯3:正如@egreg在評論(單一物件)中指出的那樣,我嘗試刪除\foreignlanguage
作者姓名,並直接以UTF-8編寫:
author={Фёдор Михайлович Достоевский},
....現在這會在.bbl
文件中正確分割名稱組件:
\name{author}{1}{}{%
{{hash=e3c9a72252d468ac324a38026797e091}{Достоевский}{Д\bibinitperiod}{Фёдор\bibnamedelima Михайлович}{Ф\bibinitperiod\bibinitdelim М\bibinitperiod}{}{}{}{}}%
……但是,當pdflatex
第二次運行時,它崩潰了:
! LaTeX Error: Command \CYRF unavailable in encoding T1.
……所以顯然,仍然需要字體編碼開關。
這是代碼:
\documentclass{article}
\usepackage{filecontents} % tlmgr install filecontents
\begin{filecontents*}{\jobname.bib}
@BOOK{von1841faust,
title={Faust: Eine Tragödie. Erster Theil},
author={Johann Wolfgang von Goethe},
url={http://books.google.dk/books?id=zF8-AAAAYAAJ},
year={1841},
publisher={Hermann Passarge}
}
% see: https://tex.stackexchange.com/questions/215447/using-cyrillic-with-tex-gyre-pagella-and-pdflatex
% if fonts are properly set-up, there's no need for separate \fontencoding{T2A}\selectfont, as in:
% title={\fontencoding{T2A}\selectfont \foreignlanguage{russian}{Двойник}},
% else - with or without \fontencoding{T2A}\selectfont:
% ! LaTeX Error: Command \CYRD unavailable in encoding T1.
% with \foreignlanguage and \fontencoding{T2A}:
% LaTeX Font Warning: Font shape `T2A/qpl/m/n' undefined
% (Font) using `T2A/cmr/m/n' instead on input line 48.
% kpathsea: Running mktexmf larm1000
% ! I can't find file `larm1000'.
% <*> ...ljfour; mag:=1; nonstopmode; input larm1000
% mktextfm: `mf-nowin -progname=mf \mode:=ljfour; mag:=1; nonstopmode; input larm1000' failed to make larm1000.tfm.
% ! Font T2A/cmr/m/n/10=larm1000 at 10.0pt not loadable: Metric (TFM) file not found.
@book{dostoevskij2014dvoinik,
title={\foreignlanguage{russian}{Двойник}},
author={\foreignlanguage{russian}{Фёдор Михайлович Достоевский}},
isbn={9785000640227},
url={http://books.google.dk/books?id=OR7BAQAAQBAJ},
year={2014},
publisher={Aegitas}
}
\end{filecontents*}
\usepackage[utf8]{inputenc}
\usepackage[T2A, T1]{fontenc} % before babel!
\usepackage[russian,greek,english]{babel} % tlmgr install babel-russian
\usepackage[sc]{mathpazo}
\usepackage{paratype} % tlmgr install paratype
\usepackage{tgpagella}
% T2A for cyrillic - paratype
\usepackage{substitutefont}
\substitutefont{T2A}{\rmdefault}{PTSerif-TLF}
\usepackage{siunitx}
\usepackage[%
style=ieee,
isbn=true,
url=true,
defernumbers=true,
sorting=nyt, % "Sort by name, year, title."
%sorting=none, % "Do not sort at all. All entries are processed in citation order." (order of appearance)
bibencoding=utf8,
backend=biber
]{biblatex}
\bibliography{\jobname}
\begin{document}
From \si{\mega\ohm} to \si{\micro\watt} -- consider "Faust" \cite{von1841faust}, which is in (extended) Latin script; or "\foreignlanguage{russian}{Двойник}" \cite{dostoevskij2014dvoinik}, which is in Cyrillic script.
\printbibliography
\end{document}
答案1
\foreignlanguage
文件中不需要.bib
。請改用 biblatex 選項autolang=other
。它會自動包裝環境中的圍兜條目otherlanguage
。為此,您還需要文件langid
中的欄位.bib
。
這是你的 MWE 更正的(我刪除了字體設置,由於某種原因它在我的機器上不起作用 --- 但我想這是一個不同的問題):
\documentclass{article}
\usepackage{filecontents} % tlmgr install filecontents
\begin{filecontents*}{\jobname.bib}
@BOOK{von1841faust,
title={Faust: Eine Tragödie. Erster Theil},
author={Johann Wolfgang von Goethe},
url={http://books.google.dk/books?id=zF8-AAAAYAAJ},
year={1841},
publisher={Hermann Passarge},
langid={german},
}
@book{dostoevskij2014dvoinik,
title={Двойник},
author={Фёдор Михайлович Достоевский},
isbn={9785000640227},
url={http://books.google.dk/books?id=OR7BAQAAQBAJ},
year={2014},
publisher={Aegitas},
langid={russian},
}
\end{filecontents*}
\usepackage[utf8]{inputenc}
\usepackage[T2A,T1]{fontenc} % before babel!
\usepackage[russian,greek,german,english]{babel} % tlmgr install babel-russian
\usepackage{siunitx}
\usepackage[%
style=ieee,
isbn=true,
url=true,
defernumbers=true,
sorting=nyt, % "Sort by name, year, title."
%sorting=none, % "Do not sort at all. All entries are processed in citation order." (order of appearance)
bibencoding=utf8,
backend=biber,
language=auto, % get main language from babel
autolang=other,
]{biblatex}
\bibliography{\jobname}
\begin{document}
From \si{\mega\ohm} to \si{\micro\watt} -- consider "Faust" \cite{von1841faust}, which is in (extended) Latin script; or "\foreignlanguage{russian}{Двойник}" \cite{dostoevskij2014dvoinik}, which is in Cyrillic script.
\printbibliography
\end{document}
輸出: