禅观如是
Thursday, August 30, 2012
vim latex setup (most updated)
finally find out by myself
so let me put it here:
in sumtrapdf, settings, option, inverse search put:
"C:\Program Files\Vim\vim73\gvim.exe" --remote-silent +%l "%f"
in latex-suite, search in ftplugin/latex-suite/compiler.vim and modify
as follows:
original:
if (has('win32') && (viewer =~? "^ *yap\( \|$\)"))
let execString = 'silent! !start '. viewer.' -s
'.line('.').expand('%').' '.mainfnameRoot
New:
if (has('win32') && (viewer =~? "^ *yap\( \|$\)" || viewer =~? "^sumatrapdf"))
if viewer =~? "^sumatrapdf"
let relativeFile=substitute(expand("%:p"),
Tex_GetMainFileName(':p:h').'/', '','')
let execString = 'silent! !start SumatraPDF
-reuse-instance "'.mainfnameFull.'.'.s:target.'" -forward-search
"'.relativeFile.'" '. line('.')
else
let execString = 'silent! !start '. viewer.' -s
'.line('.').expand('%').' '.mainfnameRoot
endif
in vimrc put:
let g:Tex_DefaultTargetFormat = 'pdf'
let g:Tex_CompileRule_pdf='xelatex --synctex=-1 -src-specials
-interaction=nonstopmode $*'
let g:Tex_ViewRule_pdf='SumatraPDF'
let g:Tex_MultipleCompileFormats='pdf'
Okay, thats it, no bother, forward(\ls) and backword searching (double click)
Monday, August 20, 2012
vim for latex
A text editor that can perform an action each time the document has changed
A fast way to recompile LaTeX
A viewer that can quickly reload the document.
I used gVim as the text editor, latexdaemon as the compilation engine,
and Sumatra as the PDF viewer.
In Vim, issue the command :au! CursorHoldI,CursorHold <buffer> silent!
:update to make it auto-save the document every time you stop typing.
Also :set updatetime=800 to set the timeout after which saving happens
to a low value.
latexdaemon will auto-compile the document in an efficient way every
time it's changed. Use the following at the beginning of the file to
make it produce PDF:
%Daemon> ini=pdflatex
Or just start it with latexdaemon -ini=pdflatex.
Sumatra will automatically re-load the file every time it is changed,
and it will not lock the PDF (so it can be recompiled without closing
Sumatra first).
This recipe will give you an almost real-time preview, but it takes
some effort to set up, and is not without issues. For example, you
might not want to continuously auto-save, in case you'd want to revert
to an earlier version.
There's a lot to improve on this, but I've been using it for some time
(after reading your question), and thought putting the recipe out here
might be useful for others too.
Since I was lazy, I just put everything to set this up into a .bat file:
@start C:\Path\To\Sumatra\SumatraPDF.exe %1.pdf
@start latexdaemon -ini=pdflatex %1.tex
@gvim -c ":au! CursorHoldI,CursorHold <buffer> silent! :update" -c
":set updatetime=800" %1.tex
also the sync issue, refer to
http://william.famille-blum.org/blog/static.php?page=static081010-000413
Friday, July 27, 2012
object oriented programming
Tuesday, July 24, 2012
python ctype resize issues
Let me summarize this issue myself. but please credit to @ecatmur and others The resize() function can be used to resize the memory buffer of an existing ctypes object. The function takes the object as first argument, and the requested size in bytes as the second argument. However, the resized object still has limited accessibility to the memory buffer based on its original size. to solve the problem. 3 different functions are defined:
def customresize1(array, new_size):
resize(array, sizeof(array._type_)*new_size)
return (array._type_*new_size).from_address(addressof(array))
def customresize2(array, new_size):
return (array._type_*new_size).from_address(addressof(array))
def customresize3(array, new_size):
base = getattr(array, 'base', array)
resize(base, sizeof(array._type_)*new_size)
new_array = (array._type_*new_size).from_address(addressof(base))
new_array.base = base
all functions return an object that shares the memory of the original owner, which does not own the memory and can not be resized (e.g., gives error in
customresize1)
customresize2does return a resized array, but keey in mind that from_address does not allocate memory for resizing..
customresize3keeps a record of the base object that owns the memory, but the returned object is not the owner of memoryAs python is dynamically allocating its memory and garbage collecting, so, if you want to resize something, just redo the size will work. eg.:
list = (c_int * NEW_SIZE)()
or you may want to keep the original values then:
list = (c_int * NEW_SIZE)(*list)
Tuesday, July 17, 2012
a review on OCT optimization algorithms
Wednesday, July 11, 2012
修行心得2012-07-11
Tuesday, July 10, 2012
deep copy vs shallow copy vs weakref
import copy
list = [ ['a'] ]
list_copy = copy.copy(list)
list_copy[0].append('b')
print list, list_copy
output is:
[['a', 'b']] [['a', 'b']]the lets try:
import copy
list = [ ['a'] ]
list_copy = copy.copy(list)
list_copy.append('b')
print list, list_copy
output is:
[['a']] [['a'], 'b']
the above shows shallow copy, which share the element, but not the obj of list itself
a deep copy will not share anything as a brand new separate obj.
so what is the weakref used for?
class LeakTest(object):
def __init__(self):
print 'Object with id %d born here.' % id(self)
def __del__(self):
print 'Object with id %d dead here.' % id(self)
def foo():
A = LeakTest()
B = LeakTest()
A.b = B
B.a = A
foo()
output is:
Object with id 71183792 born here.
Object with id 71182608 born here.
the object of A and B are not deleted, why? cus they refer to each other, cause a dead lock that can not delete the objs, that is why we need weakref:
import weakref
class LeakTest(object):
def __init__(self):
print 'Object with id %d born here.' % id(self)
def __del__(self):
print 'Object with id %d dead here.' % id(self)
def foo():
A = LeakTest()
B = LeakTest()
A.b = weakref. proxy (B)
B.a = weakref. proxy (A)
foo()
output is:
Object with id 71180816 born here.
Object with id 71181008 born here.
Object with id 71180816 dead here.
Object with id 71181008 dead here.