
Eu sei que posso agrupar bibliografias por palavra-chave. Mas este não é o caso, porque se eu não usar classificação alfabética e estilo numérico posso dividir a bibliografia por palavras-chave. Mas se eu quiser bibliografia ordenada e numeração numérica e tentar dividi-la, quebrarei a numeração. O que eu preciso é ter itens de babador de algum idioma antes de itens de outro idioma. Exemplo:
\documentclass[a4paper]{article}
\usepackage{fontspec}
\usepackage[english,greek,russian]{babel} % English please
\setmainfont[
BoldFont={DeJavu Serif Bold},
ItalicFont={DeJavu Serif Italic},
BoldItalicFont={DeJavu Serif BoldItalic}
]{DeJavu Serif}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@Book{AlKarapan,
author = {Καραπαναγοπούλου, Αλέξανδρος Κ.},
title = {Η Μεγάλη Σύνοδος της Ορθοδόξου Ανατολικής Εκκλησίας},
publisher = {auto-édition},
date = {1990/1998},
volumes = {6},
address = {Αθήνα},
langid={greek},
}
@Inbook{CypinIstorijaRPC,
author = {Владислав Цыпин},
title = {История Русской Церкви 1917--1997},
chapter = {VIII},
publisher = {Издательство Спасо-Преображенского Валаамского монастыря},
address = {Москва},
date = {1997},
urldate = {2010-10-25},
url = {http://old.pravoslavie.by/podpod.asp?id=135&Session=10},
langid={russian},
}
@Inbook{authorrus,
author = {Другой Автор},
title = {Название},
chapter = {VIII},
publisher = {Издательство},
address = {Москва},
date = {1997},
urldate = {2010-10-25},
langid={russian},
}
@article{baez/article,
author = {Baez, John C. and Lauda, Aaron D.},
title = {Higher-Dimensional Algebra {V}: 2-Groups},
journaltitle = {Theory and Applications of Categories},
date = 2004,
volume = 12,
pages = {423-491},
version = 3,
eprint = {math/0307200v3},
eprinttype = {arxiv},
langid = {english},
langidopts = {variant=american},
annotation = {An \texttt{article} with \texttt{eprint} and
\texttt{eprinttype} fields. Note that the arXiv reference is
transformed into a clickable link if \texttt{hyperref} support
has been enabled. Compare \texttt{baez\slash online}, which
is the same item given as an \texttt{online} entry},
hyphenation={english},
}
@article{another,
author = {Another,Author and One more, Author},
title = {Title},
journaltitle = {Journal},
date = 2004,
volume = 12,
pages = {423-491},
version = 3,
eprint = {math/0307200v3},
eprinttype = {arxiv},
langid = {english},
langidopts = {variant=american},
hyphenation={english},
}
\end{filecontents*}
\usepackage[russian,greek,english]{babel}
\usepackage[natbib=true,
style=numeric,
isbn=true,
url=true,
defernumbers=false,
sorting=nyt,
firstinits=true,
backend=biber,
language=auto,
autolang=other]{biblatex}
\addbibresource{\jobname.bib}
\begin{document}
\cite{AlKarapan,CypinIstorijaRPC,baez/article}
\nocite{*}
\printbibliography
\end{document}
a saída será: itens em inglês, depois em grego e em russo. Se eu editar o arquivo bbl, apenas movendo as entradas em russo no início, depois as entradas em grego e a última entrada em inglês enão corra biberapenas cite as entradas e execute lualatex ou xelatex, tudo ficará bem.
Biblatex/Biber classifica a bibliografia e movo manualmente as entradas para um determinado idioma no arquivo bbl. Recebo entradas classificadas para um determinado idioma e ordem de idioma que desejo.
Pergunta: posso fazer esse tipo de pedido sem editar o arquivo bbl
é isso que estou tentando conseguir
Não posso usar vários babadores porque preciso de numeração contínua
Responder1
É claro que podemos simplesmente colocar a \sort{\field{langid}}
no procedimento de classificação, mas isso classificará os idiomas lexicograficamente, de modo que o inglês aparecerá primeiro, depois o grego e depois o russo, não exatamente o que você deseja.
Mas, aliás, se classificarmosdescendentelexicograficamente obtemos a ordem que você deseja no MWE.
\DeclareSortingScheme{lnyt}{
\sort{
\field{presort}
}
\sort[final]{
\field{sortkey}
}
\sort[direction=descending]{\field{langid}}
\sort{
\field{sortname}
\field{author}
\field{editor}
\field{translator}
\field{sorttitle}
\field{title}
}
\sort{
\field{sortyear}
\field{year}
}
\sort{
\field{sorttitle}
\field{title}
}
\sort{
\field[padside=left,padwidth=4,padchar=0]{volume}
\literal{0000}
}
}
É claro que isso ocorre apenas porque a ordem de classificação desejada coincide com a ordem lexicográfica inversa dos nomes dos idiomas.
Use sorting=lnyt
agora.
Uma solução mais personalizável, mas um pouco mais complicada, usa o presort
campo e o recurso de mapeamento de origem do Biber.
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=langid, match=\regexp{\Arussian\Z}, final]
\step[fieldset=presort, fieldvalue=1]
}
\map{
\step[fieldsource=langid, match=\regexp{\Agreek\Z}, final]
\step[fieldset=presort, fieldvalue=2]
}
\map{
\step[fieldsource=langid, match=\regexp{\Aenglish\Z}, final]
\step[fieldset=presort, fieldvalue=3]
}
}
}
Cada idioma é simplesmente mapeado para um número escrito no presort
campo. O presort
campo é considerado antes dos outros campos de classificação.
Isso permite ordens de classificação que não seguem nenhuma ordem lexicográfica.
MWE
\documentclass[a4paper]{article}
\usepackage{fontspec}
\usepackage[english,greek,russian]{babel} % English please
\setmainfont[
BoldFont={DeJavu Serif Bold},
ItalicFont={DeJavu Serif Italic},
BoldItalicFont={DeJavu Serif BoldItalic}
]{DeJavu Serif}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@Book{AlKarapan,
author = {Καραπαναγοπούλου, Αλέξανδρος Κ.},
title = {Η Μεγάλη Σύνοδος της Ορθοδόξου Ανατολικής Εκκλησίας},
publisher = {auto-édition},
date = {1990/1998},
volumes = {6},
address = {Αθήνα},
langid={greek},
}
@Inbook{CypinIstorijaRPC,
author = {Владислав Цыпин},
title = {История Русской Церкви 1917--1997},
chapter = {VIII},
publisher = {Издательство Спасо-Преображенского Валаамского монастыря},
address = {Москва},
date = {1997},
urldate = {2010-10-25},
url = {http://old.pravoslavie.by/podpod.asp?id=135&Session=10},
langid={russian},
}
@Inbook{authorrus,
author = {Другой Автор},
title = {Название},
chapter = {VIII},
publisher = {Издательство},
address = {Москва},
date = {1997},
urldate = {2010-10-25},
langid={russian},
}
@article{baez/article,
author = {Baez, John C. and Lauda, Aaron D.},
title = {Higher-Dimensional Algebra {V}: 2-Groups},
journaltitle = {Theory and Applications of Categories},
date = 2004,
volume = 12,
pages = {423-491},
version = 3,
eprint = {math/0307200v3},
eprinttype = {arxiv},
langid = {english},
langidopts = {variant=american},
annotation = {An \texttt{article} with \texttt{eprint} and
\texttt{eprinttype} fields. Note that the arXiv reference is
transformed into a clickable link if \texttt{hyperref} support
has been enabled. Compare \texttt{baez\slash online}, which
is the same item given as an \texttt{online} entry},
hyphenation={english},
}
@article{another,
author = {Another,Author and One more, Author},
title = {Title},
journaltitle = {Journal},
date = 2004,
volume = 12,
pages = {423-491},
version = 3,
eprint = {math/0307200v3},
eprinttype = {arxiv},
langid = {english},
langidopts = {variant=american},
hyphenation={english},
}
\end{filecontents*}
\usepackage[russian,greek,english]{babel}
\usepackage[natbib=true,
style=numeric,
isbn=true,
url=true,
defernumbers=false,
sorting=nyt,
firstinits=true,
backend=biber,
language=auto,
autolang=other]{biblatex}
\addbibresource{\jobname.bib}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=langid, match=\regexp{\Arussian\Z}, final]
\step[fieldset=presort, fieldvalue=1]
}
\map{
\step[fieldsource=langid, match=\regexp{\Agreek\Z}, final]
\step[fieldset=presort, fieldvalue=2]
}
\map{
\step[fieldsource=langid, match=\regexp{\Aenglish\Z}, final]
\step[fieldset=presort, fieldvalue=3]
}
}
}
\begin{document}
\cite{AlKarapan,CypinIstorijaRPC,baez/article}
\nocite{*}
\printbibliography
\end{document}
Responder2
A seguir está uma versão simplificada da resposta de moewe.
Um arquivo fonte BibTeX
O seguinte arquivo BibTeX é salvo em formato ~/TestBib.bib
.
@book{shakespeare,
author = {William Shakespeare},
title = {Hamlet},
year = {1600},
langid = {english}
}
@book{homer,
author = {Homer},
title = {Illiad \& Oddysey},
year = {8th century BC},
langid = {greek}
}
@book{tolstoy,
author = {Leo Tolstoy},
title = {War and Peace},
year = {1869},
langid = {russian}
}
Um documento LaTeX simples com uma bibliografia
\documentclass{article}
\usepackage{biblatex}
\addbibresource{TestBib.bib}
\begin{document}
\cite{shakespeare}\cite{homer}\cite{tolstoy}
\printbibliography
\end{document}
O resultado da corrida
> cd ~
> teste lualatex
> teste biber
> teste lualatex
é
Inglês primeiro, os demais de acordo com a ordem padrão
\documentclass{article}
\usepackage{biblatex}
\DeclareSourcemap {
\maps {
\map {
\step [
fieldsource=langid,
match=english,
fieldset=presort,
fieldvalue=a
]
}
}
}
\addbibresource{TestBib.bib}
\begin{document}
\cite{shakespeare}\cite{homer}\cite{tolstoy}
\printbibliography
\end{document}
Primeiro inglês, segundo russo
Adicionaremos agora um mapa de origem para ordenar as entradas bibliográficas de tal forma que a entrada em inglês seja a primeira e a entrada em russo seja a segunda.
\documentclass{article}
\usepackage{biblatex}
\DeclareSourcemap {
\maps {
\map {
\step [
fieldsource=langid,
match=english,
fieldset=presort,
fieldvalue=a
]
\step [
fieldsource=langid,
match=russian,
fieldset=presort,
fieldvalue=b
]
}
}
}
\addbibresource{TestBib.bib}
\begin{document}
\cite{shakespeare}\cite{homer}\cite{tolstoy}
\printbibliography
\end{document}
A saída é:
Notas
Não há necessidade de passar a
datatype=bibtex
opção para\maps
(como feito na resposta de moewe), poisbibtex
é o valor padrão dadatatype
opção. Veja pág. 199 dobiblatex
manual, v. 3.18b, 12 de julho de 2022.Não há necessidade de agrupar regexps
\regexp
(como feito na resposta de moewe), a menos que contenham sequências de caracteres que também sejam comandos TEX válidos. Veja pág. 204 do manual.O tipo de dados do valor do
presort
campo especial é interpretadobiblatex
como uma string, não como um número. (Veja a página 31 do manual.) A ordem que se aplica aos seus valores é, portanto, lexicográfica e não numérica. Portanto, na minha opinião, é melhor evitar atribuir números a este campo (como feito na resposta de moewe), para evitar consequências não intuitivas. Por exemplo, se no meu exemplo "Inglês primeiro, Russo depois" eu tivesse atribuído à entrada em inglês umpresort
valor de2
e à entrada em russo umpresort
valor de10
, a entrada em russo acabaria aparecendo antes da entrada em inglês na bibliografia.A menos que seja explicitamente especificado, o campo de uma entrada bibliográfica
presort
é automaticamente definido comomm
. (Veja o segundo parágrafo da seção 3.6 'Opções de classificação' na página 83 do manual.) Portanto, se houver exatamente três valores diferentes pelos quaislangid
você deseja ordenar, você não precisa especificar explicitamente opresort
valor de todos os três. deles (como feito na resposta de moewe). Basta especificar opresort
valor explícito de apenas dois deles e garantir que ambos sejam lexicograficamente menores quemm
.Esta também é uma informação útil para saber se você deseja que certas entradas apareçam no topo da bibliografia, mas não se importa em especificar a ordem relativa do restante das entradas, como fiz no meu " Inglês primeiro, os demais de acordo com o exemplo de ordenação padrão.
Observe que os mapeamentos de origem acontecem antes de qualquer modelo de classificação, incluindo os padrões integrados, descritos nos apêndices C1-C3 do manual, serem aplicados. (Veja o segundo parágrafo da seção 4.5.3 'Modificação Dinâmica de Dados' na pág. 199 do manual.) Portanto, se você usar qualquer um dos modelos de classificação padrão, diga
nty
qual é o modelo de classificação padrão usado, caso não o faça. especificar explicitamente qualquer modelo de classificação (veja seção 3.1.2.1 'Opções de pacote/Opções de preâmbulo/Geral' na pág. 48 do manual), a ordem das entradas dentro de cadapresort
grupo será a esperada, ou seja, conforme prescrito pelo modelo.Se organizado criteriosamente, o número de
step
s emap
s pode ser reduzido significativamente, e o número definal
s pode ser reduzido ou mesmo eliminado. Compare a resposta de moewe com meu exemplo "primeiro inglês, segundo russo".Em relação à semântica da
final
consultaesta resposta de moewe, uma vez que o manual não é claro e até enganoso sobre o assunto.