Thesis全体で使用されている\labelコマンドを列挙し、chapter間の重複をしらべる。
\label{labtype:labname}という形式を仮定。labels.txtにchapter, labtype, labname, 重複の有無を列記。重複がなければ最後のcolumnは'ok'、あれば該当するchapter名がcsvで書かれる。重複がある場合も、初出時は'ok'になる仕様。
#!/usr/bin/env python
skipnames = [] #List tex filenames which should be excluded label search.
outfile = 'labels.txt'
maintex = 'ms.tex' #The main tex filename in which your articles are included.
def add_elem(elem,key,dic):
if dic.has_key(key):
dic[key].append(elem)
else:
dic[key] = [elem]
return(0)
texnames = []
labels = {}
for line in open(maintex,'r'):
if line.startswith('\include{') or line.startswith('%\include{'):
texname = line.replace('\include{','').replace('}\n','').replace('%','')
if not texname in skipnames:
texnames.append(texname)
f = open(outfile,'w')
for texname in texnames:
texfile = texname+'.tex'
for line in open(texfile,'r'):
if line.find('\label{') != -1:
templine = line[line.find('\label{')+len('\label{'):]
label = templine[:templine.find('}')]
labtype, labname = label.split(':')
add_elem(label,texname,labels)
dupflag = 'ok'
for texkey in labels.keys():
if texkey == texname:
continue
lablist = labels[texkey]
if label in lablist:
if dupflag == 'ok':
dupflag = texkey
else:
dupflag += ','+texkey
else:
pass
f.write('%10s %10s %15s %20s\n' % (texname, labtype, labname, dupflag))
f.close()
○Referenceをsortする
reference.texに記述したreference listをアルファベット順にsortする。
コメントアウトしたものは消されます。Archiveは残すので間違えて消したりしても安心のはず。
#!/usr/bin/env python
import os,datetime
archive = 'ref_archives'
if not os.path.exists(archive):
os.mkdir(archive)
else:
pass
reffile = 'reference.tex'
date = datetime.date.today().isoformat().replace('-','')
biblist = []
i = 0
row = 0
for line in open(reffile,'r'):
if line.startswith('%') or line.startswith('\\begin') or line.startswith('\\end') or line == '\n':
pass
elif line.startswith('\\bibitem'):
try:
biblist.append(line.replace('\n',''))
except:
print(line)
exit()
i += 1
else:
try:
biblist[i-1] = biblist[i-1]+line.replace('\n','')
except:
print(line)
exit()
pass
row += 1
os.system('mv '+reffile+' '+archive+'/'+reffile.replace('.tex','_'+date+'.tex'))
f = open(reffile,'w')
bibdoc = {}
for bib in biblist:
title = bib.replace(']','[').split('[')[1]
citekey = bib.replace(']','[').split('[')[-1].replace('}','{').split('{')[1]
content = bib.replace('\\bibitem[','').replace(title,'').replace(']{','').replace(citekey+'} ','')
author = title.split('(')[0]
year = title.replace(')','(').split('(')[1]
bibdoc[title] = bib
keys = bibdoc.keys()
keys.sort()
f.write('\\begin{thebibliography}{}\n')
for key in keys:
f.write(bibdoc[key]+'\n')
f.write('\end{thebibliography}\n')
f.close()
print('Done.')
○Abbreviationの各章での引用回数をcheckする
description環境で書かれたabbreviation listに各章での略語および元の用語の引用回数をコメントで追記します。
元の用語に関しては複数行にまたがるものは数え落とします。先頭の語のcapitalizeの有無はどっちでも拾います。
#!/usr/bin/env python
import os,datetime
skipnames = [
'abbreviations',
'reference',
'acknowledgement',
] #List tex filenames which should be excluded label search.
maintex = 'ms.tex' #The main tex filename in which your articles are included.
texnames = []
for line in open(maintex,'r'):
if line.startswith('\include{') or line.startswith('%\include{'):
texname = line.replace('\include{','').replace('}\n','').replace('%','')
if not texname in skipnames:
texnames.append(texname)
archive = 'abb_archives'
if not os.path.exists(archive):
os.mkdir(archive)
else:
pass
def find_keyinchaps(key):
chaplab = ''
ch = 1
for texname in texnames:
if texname in skipnames:
continue
count = 0
texfile = texname+'.tex'
for line in open(texfile,'r'):
if line.find(key+' ') != -1 or line.find(key+'s ') != -1 or line.find(key+')') != -1:
count += 1
if count != 0:
chaplab += str(ch)+' x'+str(count)+', '
ch += 1
return(chaplab[:-2])
def find_continchaps(content):
content = content.replace('-',' ').lower()
chaplab = ''
ch = 1
for texname in texnames:
if texname in skipnames:
continue
count = 0
texfile = texname+'.tex'
for line in open(texfile,'r'):
line = line.replace('-',' ').lower()
if line.find(content) != -1:
count += 1
if count != 0:
chaplab += str(ch)+' x'+str(count)+', '
ch += 1
return(chaplab[:-2])
abbfile = 'abbreviations.tex'
date = datetime.date.today().isoformat().replace('-','')
abblist = []
i = 0
row = 0
for line in open(abbfile,'r'):
if line.startswith('\\chapter') or line.startswith('\\begin') or line.startswith('\\end') or line == '\n':
pass
elif line.startswith('\\item'):
try:
abblist.append(line.replace('\n',''))
except:
print(line)
exit()
i += 1
else:
try:
abblist[i-1] = abblist[i-1]+line.replace('\n','')
except:
print(line)
exit()
pass
row += 1
os.system('mv '+abbfile+' '+archive+'/'+abbfile.replace('.tex','_'+date+'.tex'))
f = open(abbfile,'w')
abbdoc = {}
for abb in abblist:
abbkey = abb[abb.find('[')+1:abb.find(']')]
maxnum = abb.find('%')
if maxnum == -1:
maxnum = len(abb)
content = abb[abb.find('$\\ldots$')+len('$\\ldots$'):maxnum].strip(' ')
abbdoc[abbkey] = content
keys = abbdoc.keys()
keys.sort()
f.write('\\chapter{Abbreviation}\n')
f.write('\\begin{description}\n')
for key in keys:
usedchaps = find_keyinchaps(key)
usedchaps2 = find_continchaps(abbdoc[key])
f.write('\\item [%s] $\\ldots$ %s %s\n' % (key, abbdoc[key], '% '+usedchaps+' ; '+usedchaps2))
f.write('\\end{description}\n')
f.close()
print('Done.')
0 件のコメント:
コメントを投稿