Module:BibTeX2Cite

Template:Module rating

Context

As explained more fully at Module:LaTeX2UTF8, the TeX/LaTeX typesetting systems use a bibliographic format called BibTeX which is in wide use in mathematical and scientific fields. This module contains the first initial steps to allow translation from BibTeX to the {{cite journal}} family of templates. Due to the use of "}}" in BibTeX, the raw BibTeX code should be kept in a separate module, not article space.

Usage

local p = {}
function p.test(frame)
	local s = [[
 	@book {MR0161818,
 	AUTHOR = {Erd{\H{o}}s, P{\'a}l and Sur{\'a}nyi, J{\'a}nos},
 	TITLE = {V\'alogatott fejezetek a sz\'amelm\'eletb{\H o}l},
 	PUBLISHER = {Tank\"onyvkiad\'o V\'allalat, Budapest},
 	YEAR = {1960},
 	PAGES = {250},
 	MRCLASS = {10.00},
 	MRNUMBER = {0161818 (28 \#5022)},
	} 
	]]
	local c = p.BibTeX2Cite(s)
  	return frame:expandTemplate{title = 'cite journal', args = c["citeparms"]}
end

should result in returning

Erdős, Pál; Surányi, János (1960). "Válogatott fejezetek a számelmáletből". Tankányvkiadá Vállalat, Budapest. p. 250. MR MR0161818.



local p = {}
local l2u = require( "Module:LaTeX2UTF8" )
 
function p.test(frame)
	local s = [[
 	@book {MR0161818,
 	AUTHOR = {Erd{\H{o}}s, P{\'a}l and Sur{\'a}nyi, J{\'a}nos},
 	TITLE = {V\'alogatott fejezetek a sz\'amelm\'eletb{\H o}l},
 	PUBLISHER = {Tank\"onyvkiad\'o V\'allalat, Budapest},
 	YEAR = {1960},
 	PAGES = {250},
 	MRCLASS = {10.00},
 	MRNUMBER = {0161818 (28 \#5022)},
	} 
	]]
	local c = p.BibTeX2Cite(s)
  	return frame:expandTemplate{title = 'cite journal', args = c["citeparms"]}
end
 
function p.BibTeX2Cite(s)
 	s = l2u.translate_diacritics( s )
  	s = l2u.translate_special_characters( s )
  	local c = {}
  	c["citeparms"] = {}
  	c["nonciteparms"] = {}
 
  	local authorlist = mw.ustring.match( s, "AUTHOR = ({.-})" )
  	c["citeparms"]["last1"]  = mw.ustring.match( authorlist, "(%a-), %a- ")
  	c["citeparms"]["first1"] = mw.ustring.match( authorlist, "%a-, (%a-) ")
 
  	local authoridx=2
	for last,first in mw.ustring.gmatch(s, "and (%a-), (%a-)[ }]") do
  		c["citeparms"]["last" .. authoridx] = last
  		c["citeparms"]["first" .. authoridx] = first
  		authoridx = authoridx+1
  	end
 
  	c["nonciteparms"]["type"] 	= mw.ustring.match( s, "@(%a)+ {" )
  	c["citeparms"]["mr"] 		= mw.ustring.match( s, "{(MR%d+)," )
  	c["citeparms"]["title"]		= mw.ustring.match( s, "TITLE = {(.-)}" )
  	c["citeparms"]["publisher"]	= mw.ustring.match( s, "PUBLISHER = {(.-)}" )
  	c["citeparms"]["year"]		= mw.ustring.match( s, "YEAR = {(.-)}" )
  	c["citeparms"]["pages"]		= mw.ustring.match( s, "PAGES = {(.-)}" )
  	c["nonciteparms"]["mrclass"]= mw.ustring.match( s, "MRCLASS = {(.-)}" )
  	c["nonciteparms"]["mrnumber"] = mw.ustring.match( s, "MRNUMBER = {(.-)}" )
 
  	return c
end
 
return p