104 lines
No EOL
3.6 KiB
Python
104 lines
No EOL
3.6 KiB
Python
import pybtex.database
|
|
from pybtex import errors
|
|
import sys
|
|
|
|
def bibtex_to_html(bibtex_file_path, html_file_path):
|
|
# Load the BibTeX file
|
|
try:
|
|
bib_data = pybtex.database.parse_file(bibtex_file_path)
|
|
except errors.BibliographyDataNotFoundError as e:
|
|
print(f"ERROR: {e}")
|
|
return
|
|
|
|
# Create the HTML file
|
|
with open(html_file_path, "w") as f:
|
|
|
|
f.write("<html>\n<head>\n<title>Bibliography</title>\n</head>\n<body>\n")
|
|
|
|
# Write the journal papers section
|
|
f.write("<h2>Journals</h2>\n")
|
|
f.write("<hr>\n")
|
|
f.write("<ol>\n")
|
|
|
|
# Loop through each journal entry in the BibTeX file
|
|
for key, entry in bib_data.entries.items():
|
|
if "journal" in entry.fields:
|
|
f.write("<li>\n")
|
|
|
|
# Write the citation key
|
|
#f.write(f"<strong>{key}</strong><br/>\n")
|
|
|
|
# Write the authors
|
|
if "author" in entry.persons:
|
|
authors = entry.persons["author"]
|
|
f.write("; ".join(str(author) for author in authors))
|
|
f.write("<br/>\n")
|
|
|
|
# Write the title
|
|
if "title" in entry.fields:
|
|
f.write(f"<strong>{entry.fields['title']}</strong><br/>\n")
|
|
|
|
# Write the publication information
|
|
f.write(f"{entry.fields['journal']}, ")
|
|
if "volume" in entry.fields:
|
|
f.write(f"vol. {entry.fields['volume']}")
|
|
if "number" in entry.fields:
|
|
f.write(f"({entry.fields['number']})")
|
|
if "pages" in entry.fields:
|
|
f.write(f", pp. {entry.fields['pages']}")
|
|
if "year" in entry.fields:
|
|
f.write(f", {entry.fields['year']}")
|
|
|
|
f.write("<br/>\n")
|
|
f.write("</li>\n")
|
|
|
|
f.write("</ol>\n")
|
|
|
|
# Write the conference papers section
|
|
f.write("<h2>Conferences</h2>\n")
|
|
f.write("<hr>\n")
|
|
f.write("<ol>\n")
|
|
|
|
# Loop through each conference entry in the BibTeX file
|
|
for key, entry in bib_data.entries.items():
|
|
if "booktitle" in entry.fields:
|
|
f.write("<li>\n")
|
|
|
|
# Write the citation key
|
|
# f.write(f"<strong>{key}</strong><br/>\n")
|
|
|
|
# Write the authors
|
|
if "author" in entry.persons:
|
|
authors = entry.persons["author"]
|
|
f.write("<em>")
|
|
f.write("; ".join(str(author) for author in authors))
|
|
f.write("</em>");
|
|
f.write("<br/>\n")
|
|
|
|
# Write the title
|
|
if "title" in entry.fields:
|
|
print(entry.fields['title'])
|
|
f.write(f"<strong>{entry.fields['title']}</strong><br/>\n")
|
|
|
|
# Write the publication information
|
|
f.write(f"In <em>{entry.fields['booktitle']}</em>")
|
|
if "pages" in entry.fields:
|
|
f.write(f", pp. {entry.fields['pages']}")
|
|
if "year" in entry.fields:
|
|
f.write(f", {entry.fields['year']}")
|
|
|
|
f.write("<br/>\n")
|
|
f.write("</li>\n")
|
|
|
|
f.write("</ol>\n")
|
|
f.write("</body>\n</html>\n")
|
|
|
|
if __name__ == "__main__":
|
|
if len(sys.argv) != 3:
|
|
print("Usage: python bibtex_to_html.py input.bib output.html")
|
|
sys.exit(1)
|
|
|
|
input_file_path = sys.argv[1]
|
|
output_file_path = sys.argv[2]
|
|
|
|
bibtex_to_html(input_file_path, output_file_path) |