Skip to main content

Add arXiv hyperlink to bibtex in under 1 seconds

Add hyperlinks of arXiv numbers to all the bibtex entries in a bib file in under 1 second. This is accomplished by a script.  The user only needs to have a bibtex file which already has the eprint entry for every bibtex item. The rest would be handled by the script.

This procedure is not necessary for some packages and bst files. it becomes necessary when specialized citation packages, like natbib, are used. Natbib generally do not include the hyperlink to the eprint number and some bst files for natbib like pjgsm.bst would completely ignore the eprint field.

The following script would amend this situation. It basically hard codes the hyperlinked arXiv number  into the journal entry. So hen the bibtex is run the journal entry would include the hyperlinked arXiv number. I wrote this script with bibtex from the NASA ADS server in mind. Bibtex from other sources might need some modification.

Critical comments and suggested improvements are welcome.

NOTE !!! I deliberately deleted 2 crucial but trivial lines of code as a puzzle to the readers. !!!

If anyone can figure it out and post it in the comments or if nobody figure it out and there are multiple request in the comments section  then I would include them back.

!!! Enjoy !!!

==============================================



#/bin/bash
# Usage : ./eprint.sh <filename>
# v1.2 by JOnes 
# This script takes the arXiv number from the eprint entry in the bibtex and hard codes a hyperlinked arXiv number to  the journal entry of the bibtex. This is done for every bibtex entry. It has a failsafe and will not act upon a file on which it is already run; running twice on the same file would not have a detrimental effect on the output.


if [[ "$#" -ne 1 ]]; then
  echo  "Usage : ./eprint.sh <filename> 
# v1.2 by JOnes 
# This script takes the arXiv number from the eprint entry in the bibtex and hard codes a hyperlinked arXiv number to  the journal entry of the bibtex. This is done for every bibtex entry."
  exit
fi


isbib=`grep -i "@article" $1` 


if [ ! -e $1  ] ; then
  echo "File do not exist."
  exit
elif [[ ! $isbib ]] ; then
  echo "This file cannot be worked upon."
  exit
else
  cp $1 .tmp
fi


epntlist=`cat .tmp | grep "eprint" | cut -f2 -d"=" | sed 's/\"//g' | sed 's/\,//g' | sed 's/{//g' | sed 's/}//g'`


if [[ ! $epntlist  ]] ; then
 exit
fi




cp .tmp .tmp2 


for ii in $epntlist
do
kk1=`cat .tmp | grep $ii -A2 -B4| grep journal | grep -v "href" `


kk2=`echo $kk1 | sed "s|}\",|; \\href{http://arxiv.org/abs/$ii}{$ii} }\",|"`


if [[ `echo $kk2 | grep  href` ]] ; then
  sed "s|$kk1|$kk2|" .tmp > .tmp2
fi




kk2=`echo $kk1 | sed "s|\",|; \\href{http://arxiv.org/abs/$ii}{$ii} \",|"`


if [[ `echo $kk2 | grep  href` ]] ; then
  sed "s|$kk1|$kk2|" .tmp > .tmp2
fi


kk2=`echo $kk1 | sed "s|},|; \\href{http://arxiv.org/abs/$ii}{$ii} },|"`


if [[ `echo $kk2 | grep  href` ]] ; then
  sed "s|$kk1|$kk2|" .tmp > .tmp2
fi


# 's/dsas/afdsa' would not work as --- 1)bash treats anything inside ' ' single quotes as literal string. when " " double quotes are used then only do bash replace the values of the variables inside the strings 2) \ has to be escaped by 3 backslashes \\\ . 3) Since \href uses the \ character once it cannot be used as a delimiter of sed arguments hence | | is used.
#ll=`echo $kk | grep href`


done


cat .tmp | sed 's/ href/ \\href/g' > .tmp2
mv .tmp2 converted.bib


echo "done.. See file converted.bib."



==============================================

Comments

Popular posts from this blog

Fastest way to send multiple drafts from gmail

People claim that the fastest way to send multiple email drafts is to use Gmail IMAP with email client like Outlook or Evolution or Thunderbird. But I have found this is not true. Because Thunderbird and Evolution etc. email clients treats the drafts as emails still to be edited. So it is not just simple select all and hit send. Each email draft has to be opened and sent separately. That is a lot of clicks and mouse movements, wasting precious time and energy. I have a better solution which involves minimum keystrokes and mouse usage. Efficiency booster technique for sending emails. If someone is feeling adventurous and want to try it from the Gmail interface itself, here's how to do it in the fastest possible manner. It involves using the mouse once. Select the first draft. Gmail would open a new email box and put the cursor inside the box to write. Press TAB once to go the Send button. Press ENTER to send. Now Gmail sends it and the box is gone but the highlight goes to the last

LYRICS OF CHANDRABINDOO

___________________________________________________________________ SWEET HEART FROM AAR JAANI NAA(T-SERIES) -- SWEETHEART -- Pratham college-er din ta Aajo thik e mone poRey scene ta Dada didi haath dhorey siNRi tei bose poRey Aamar chokh ta ghorey bon bon bon bon Sweetheart, I am seating alone Sweetheart, for me there is none DhoNk gile chole gelo pratham maas Meye dekhlei feli deergho-shwash DhoNk gile chole gelo pratham maas Meye dekhlei othe nabhishwash Meyera bheeshan smart poRey chhoto mini-skirt Aamar e je sheet korey kon kon kon kon Sweetheart, I am seating alone Sweetheart, for me there is none Taarporey kete gelo maas chaar Fuse holo je kato future Bandhura purse khule eke oke taake tole Aamar pran ta korey chon mon chon mon Sweetheart, I am seating alone Sweetheart, for me there is none Ekdin lawn theke beriye Ek tanayaar dike taakiye Hawt korey ki je holo magaj ta ghurey gelo Taar kaaner saamne kori ghyan ghyan ghyan ghyan Sweetheart, I am seating alone Sweethea

Changing the font size of section headings in LaTex

You have several ways to do so: 1.- A direct redefinition of \section: \makeatletter \renewcommand\section{\@startsection{section}{1}{\z@}%                                   {-3.5ex \@plus -1ex \@minus -.2ex}%                                   {2.3ex \@plus.2ex}%                                   {\normalfont\large\bfseries}} \makeatother 2.- By means of the titlesec package: \usepackage{titlesec} \titleformat{\section}{\large\bfseries}{\thesection}{1em}{} 3.- By means of the sectsty package: \usepackage{sectsty} \sectionfont{\large} source : http://www.latex-community.org/forum/viewtopic.php?f=4&t=3245   Now, I would explain the titlesec package a bit more (because it seems easier to me and with more options) : To change the section fonts with this package put the following lines in the preamble - \usepackage{titlesec} \titleformat{\ section }{\ large \ bfseries }{\thesection}{1em}{} Options available are- a> Font size - \normals