嗯,我用这个matlab函数,自动一一转换,比较容易搞定。可以从GitHub下载,matlab函数如下。
function [bibitem] = bibtex2bibitem(bibtexpath)
path = bibtexpath;
cells = importdata(path);
A = string(cells);
n = length(cells);
K_name = strings(n,1);
citecode = extractBetween(A(1),'{',',');
for i = 2:1:n-1
rawleft = extractBefore(A(i),'=');
K_name(i) = strtrim(rawleft);
%--------------------------------------------------------------------
if strcmp(K_name(i),"author")
SVacI(1) = 1;
rawright = extractAfter(A(i),'=');
ccb = regexp(rawright,'}'); % ccb = [check curly bracket]
if (ccb~=0)
author = strtrim(extractBetween(A(i),'{','}'));
else
author = strtrim(extractBetween(A(i),'=',','));
end
%--------------------------------------------------------------------
elseif strcmp(K_name(i),"title")
SVacI(2) = 1;
rawright = extractAfter(A(i),'=');
ccb = regexp(rawright,'}'); % ccb = [check curly bracket]
if (ccb~=0)
title = strtrim(extractBetween(A(i),'{','}'));
else
title = strtrim(extractBetween(A(i),'=',','));
end
%--------------------------------------------------------------------
elseif strcmp(K_name(i),"journal")
SVacI(3) = 1;
rawright = extractAfter(A(i),'=');
ccb = regexp(rawright,'}'); % ccb = [check curly bracket]
if (ccb~=0)
journal = strtrim(extractBetween(A(i),'{','}'));
else
journal = strtrim(extractBetween(A(i),'=',','));
end
%--------------------------------------------------------------------
elseif strcmp(K_name(i),"volume")
SVacI(4) = 1;
rawright = extractAfter(A(i),'=');
ccb = regexp(rawright,'}'); % ccb = [check curly bracket]
if (ccb~=0)
volume = strtrim(extractBetween(A(i),'{','}'));
else
volume = strtrim(extractBetween(A(i),'=',','));
end
%--------------------------------------------------------------------
elseif (strcmp(K_name(i),"number"))||(strcmp(K_name(i),"issue"))
SVacI(5) = 1;
rawright = extractAfter(A(i),'=');
ccb = regexp(rawright,'}'); % ccb = [check curly bracket]
if (ccb~=0)
number = strtrim(extractBetween(A(i),'{','}'));
else
number = strtrim(extractBetween(A(i),'=',','));
end
%--------------------------------------------------------------------
elseif strcmp(K_name(i),"pages")
SVacI(6) = 1;
rawright = extractAfter(A(i),'=');
ccb = regexp(rawright,'}'); % ccb = [check curly bracket]
if (ccb~=0)
pages = strtrim(extractBetween(A(i),'{','}'));
else
pages = strtrim(extractBetween(A(i),'=',','));
end
%--------------------------------------------------------------------
elseif strcmp(K_name(i),"month")
SVacI(7) = 1;
rawright = extractAfter(A(i),'=');
ccb = regexp(rawright,'}'); % ccb = [check curly bracket]
if (ccb~=0)
month = strtrim(extractBetween(A(i),'{','}'));
else
month = strtrim(extractBetween(A(i),'=',','));
end
%--------------------------------------------------------------------
elseif strcmp(K_name(i),"year")
SVacI(8) = 1;
rawright = extractAfter(A(i),'=');
ccb = regexp(rawright,'}'); % ccb = [check curly bracket]
if (ccb~=0)
year = strtrim(extractBetween(A(i),'{','}'));
else
year = strtrim(extractBetween(A(i),'=',','));
end
%--------------------------------------------------------------------
elseif strcmp(K_name(i),"publisher")
SVacI(9) = 1;
rawright = extractAfter(A(i),'=');
ccb = regexp(rawright,'}'); % ccb = [check curly bracket]
if (ccb~=0)
publisher = strtrim(extractBetween(A(i),'{','}'));
else
publisher = strtrim(extractBetween(A(i),'=',','));
end
%--------------------------------------------------------------------
else
msg = join(["Sorry!","[", K_name(i), "]","is not being handled by the program."]);
disp(msg)
end
end
%--------------------------------------------------------------------
% @-> Style reference term code varifications.
% msg = join(["author","=",SVacI(1);...
% "title","=",SVacI(2);...
% "journal","=",SVacI(3);...
% "volume","=",SVacI(4);...
% "number","=",SVacI(5);...
% "pages","=",SVacI(6);...
% "month","=",SVacI(7);...
% "year","=",SVacI(8);...
% "publisher","=",SVacI(9)]);
% disp(SVacI)
if all(SVacI(1)==0)||(SVacI(2)==0)||(SVacI(3)==0)||(SVacI(8)==0)
bibitem = sprintf('THE ARTICLE IS NOT CORRECT. THE AUTHOR, TITLE, JOURNAL AND YEAR SECTIONS ARE COMPULSORY! PLEASE INCLUDE THEM AND RE-RUN THE SOFTWARE:)');
elseif all(SVacI == [1 1 1 0 0 0 0 1 0])
bibitem = sprintf('\\bibitem{%s} %s,``%s," {\\it %s\\/},(%s).',citecode,author,title,journal,year);
elseif all(SVacI == [1 1 1 0 0 0 0 1 1])
bibitem = sprintf('\\bibitem{%s} %s,``%s," {\\it %s\\/},(%s). %s.\n',citecode,author,title,journal,year,publisher);
elseif all(SVacI == [1 1 1 0 0 0 1 1 0])
bibitem = sprintf('\\bibitem{%s} %s,``%s," {\\it %s\\/},(%s %s).',citecode,author,title,journal,month,year);
elseif all(SVacI == [1 1 1 0 0 0 1 1 1])
bibitem = sprintf('\\bibitem{%s} %s,``%s," {\\it %s\\/},(%s %s). %s.',citecode,author,title,journal,month,year,publisher);
elseif all(SVacI == [1 1 1 0 0 1 0 1 0])
bibitem = sprintf('\\bibitem{%s} %s,``%s," {\\it %s\\/}, %s,(%s).',citecode,author,title,journal,pages,year);
elseif all(SVacI == [1 1 1 0 0 1 0 1 1])
bibitem = sprintf('\\bibitem{%s} %s,``%s," {\\it %s\\/}, %s,(%s). %s.',citecode,author,title,journal,pages,year,publisher);
elseif all(SVacI == [1 1 1 0 0 1 1 1 0])
bibitem = sprintf('\\bibitem{%s} %s,``%s," {\\it %s\\/}, %s,(%s %s).',citecode,author,title,journal,pages,month,year);
elseif all(SVacI == [1 1 1 0 0 1 1 1 1])
bibitem = sprintf('\\bibitem{%s} %s,``%s," {\\it %s\\/}, %s,(%s %s). %s.',citecode,author,title,journal,pages,month,year,publisher);
elseif all(SVacI == [1 1 1 0 1 0 0 1 0])
disp("Attention! THE VOLUME HAS TO BE ASSOCIATED WITH NUMBER, PLEASE CHECK!")
bibitem = sprintf('\\bibitem{%s} %s,``%s," {\\it %s\\/}, No.~%s,(%s).',citecode,author,title,journal,number,year);
elseif all(SVacI == [1 1 1 0 1 0 0 1 1])
disp("Attention! THE VOLUME HAS TO BE ASSOCIATED WITH NUMBER, PLEASE CHECK!")
bibitem = sprintf('\\bibitem{%s} %s,``%s," {\\it %s\\/}, No.~%s,(%s). %s.',citecode,author,title,journal,number,year,publisher);
elseif all(SVacI == [1 1 1 0 1 0 1 1 0])
disp("Attention! THE VOLUME HAS TO BE ASSOCIATED WITH NUMBER, PLEASE CHECK!")
bibitem = sprintf('\\bibitem{%s} %s,``%s," {\\it %s\\/}, No.~%s,(%s %s).',citecode,author,title,journal,number,month,year);
elseif all(SVacI == [1 1 1 0 1 0 1 1 1])
disp("Attention! THE VOLUME HAS TO BE ASSOCIATED WITH NUMBER, PLEASE CHECK!")
bibitem = sprintf('\\bibitem{%s} %s,``%s," {\\it %s\\/}, No.~%s,(%s %s). %s.',citecode,author,title,journal,number,month,year,publisher);
elseif all(SVacI == [1 1 1 0 1 1 0 1 0])
disp("Attention! THE VOLUME HAS TO BE ASSOCIATED WITH NUMBER, PLEASE CHECK!")
bibitem = sprintf('\\bibitem{%s} %s,``%s," {\\it %s\\/}, No.~%s, %s,(%s).',citecode,author,title,journal,number,pages,year);
elseif all(SVacI == [1 1 1 0 1 1 0 1 1])
disp("Attention! THE VOLUME HAS TO BE ASSOCIATED WITH NUMBER, PLEASE CHECK!")
bibitem = sprintf('\\bibitem{%s} %s,``%s," {\\it %s\\/}, No.~%s, %s,(%s). %s.',citecode,author,title,journal,number,pages,year,publisher);
elseif all(SVacI == [1 1 1 0 1 1 1 1 0])
disp("Attention! THE VOLUME HAS TO BE ASSOCIATED WITH NUMBER, PLEASE CHECK!")
bibitem = sprintf('\\bibitem{%s} %s,``%s," {\\it %s\\/}, No.~%s, %s,(%s %s).',citecode,author,title,journal,number,pages,month,year);
elseif all(SVacI == [1 1 1 0 1 1 1 1 1])
disp("Attention! THE VOLUME HAS TO BE ASSOCIATED WITH NUMBER, PLEASE CHECK!")
bibitem = sprintf('\\bibitem{%s} %s,``%s," {\\it %s\\/}, No.~%s, %s,(%s %s). %s.',citecode,author,title,journal,number,pages,month,year,publisher);
elseif all(SVacI == [1 1 1 1 1 0 0 1 0])
bibitem = sprintf('\\bibitem{%s} %s,``%s," {\\it %s\\/}, Vol.~%s, No.~%s,(%s).',citecode,author,title,journal,volume,number,year);
elseif all(SVacI == [1 1 1 1 1 0 0 1 1])
bibitem = sprintf('\\bibitem{%s} %s,``%s," {\\it %s\\/}, Vol.~%s, No.~%s,(%s). %s.',citecode,author,title,journal,volume,number,year,publisher);
elseif all(SVacI == [1 1 1 1 1 0 1 1 0])
bibitem = sprintf('\\bibitem{%s} %s,``%s," {\\it %s\\/}, Vol.~%s, No.~%s,(%s %s).',citecode,author,title,journal,volume,number,month,year);
elseif all(SVacI == [1 1 1 1 1 0 1 1 1])
bibitem = sprintf('\\bibitem{%s} %s,``%s," {\\it %s\\/}, Vol.~%s, No.~%s,(%s %s). %s.',citecode,author,title,journal,volume,number,month,year,publisher);
elseif all(SVacI == [1 1 1 1 1 1 0 1 0])
bibitem = sprintf('\\bibitem{%s} %s,``%s," {\\it %s\\/}, Vol.~%s, No.~%s, %s,(%s).',citecode,author,title,journal,volume,number,pages,year);
elseif all(SVacI == [1 1 1 1 1 1 0 1 1])
bibitem = sprintf('\\bibitem{%s} %s,``%s," {\\it %s\\/}, Vol.~%s, No.~%s, %s,(%s). %s.',citecode,author,title,journal,volume,number,pages,year,publisher);
elseif all(SVacI == [1 1 1 1 1 1 1 1 0])
bibitem = sprintf('\\bibitem{%s} %s,``%s," {\\it %s\\/}, Vol.~%s, No.~%s, %s,(%s %s).',citecode,author,title,journal,volume,number,pages,month,year);
elseif all(SVacI == [1 1 1 1 1 1 1 1 1])
bibitem = sprintf('\\bibitem{%s} %s,``%s," {\\it %s\\/}, Vol.~%s, No.~%s, %s,(%s %s). %s.',citecode,author,title,journal,volume,number,pages,month,year,publisher);
end
clipboard('copy',bibitem);
disp('The bibitem has been copied to the clipboard!')
end
示例输入:
@article{hamid1969microwave,
title={Microwave pasteurization of raw milk},
author={Hamid, MAK and Boulanger, RJ and Tong, SC and Gallop, RA and Pereira, RR},
journal={Journal of Microwave Power},
volume={4},
number={4},
pages={272--275},
year={1969},
publisher={Taylor \& Francis}
}
Sample Output:
'\bibitem{hamid1969microwave} Hamid, MAK and Boulanger, RJ and Tong, SC and Gallop, RA and Pereira, RR,``Microwave pasteurization of raw milk," {\it Journal of Microwave Power\/}, Vol.~4, No.~4, 272--275,(1969). Taylor \& Francis.'