The first question you would ask: Isn't auctex's binding C-c C-c doing it?
-- Not quite. The biggest problem is that, preview-latex breaks the generated pdf file. Thus I cannot have preview and the generated pdf at the same time. Also, finding configuration methods is (sometimes) harder than do it yourself.
What the code does:
* One key compile latex document
* Put temporary files into temporary paths
* Open reader (if not already open)
* On mistake, open log file in new frame
* On warning, send desktop-notification
Now implications
Shell command side:
ORIGINAL_PATH=$(echo $1 | sed 's/\(.*\)\/.*/\1/') FN=$(echo $1|sed 's/.*\/\(.*\)/\1/'|sed 's/\(.*\)\..*/\1/') WORKING_PATH=/tmp/cctex_output$ORIGINAL_PATH LOG_FN=/tmp/cctex_output/cctex.log mkdir -p /tmp/cctex_output mkdir -p $WORKING_PATH echo "Working at " WORKING_PATH >$LOG_FN echo "Now compile file..." >>$LOG_FN pdflatex -halt-on-error -synctex=1 -src-specials -aux-directory=$WORKING_PATH -output-directory=$WORKING_PATH $1 if [ $? -ne 0 ] then echo "There are some mistakes..." >>$LOG_FN emacsclient -c +10000 $WORKING_PATH/$FN.log exit 1 fi echo "Examine if there are warnings..." >>$LOG_FN grep 'LaTeX Warning: ' $WORKING_PATH/$FN.log if [ $? -eq 0 ] then echo "Send desktop notification on warning..." >>$LOG_FN MSG=$(grep 'LaTeX Warning: ' multi.log) # notify-send "$MSG" notify-send "$(echo $MSG | sed 's/LaTeX Warning: / ** /g')" fi echo "Check if reader is already open on file..." >>$LOG_FN wmctrl -l | grep $FN | grep Okular if [ $? -ne 0 ] then echo "Now open reader..." >>$LOG_FN nohup okular $WORKING_PATH/$FN.pdf >/dev/null 2>/dev/null fi echo "Now exit successfully..." >>$LOG_FN exit 0
Emacs side:
(add-hook 'LaTeX-mode-hook '(lambda () (local-set-key (quote [f5]) '(lambda () (interactive) (save-buffer) (call-process "/home/wangyi/Dropbox/local/bin/cctex.sh" nil 0 nil buffer-file-name) )) (local-set-key [(shift f5)] '(lambda () (interactive) (find-file (concat "/tmp/cctex_output" (substring buffer-file-name 0 -4) ".log") ) )) ))
That's it.
No comments:
Post a Comment