Zentral makefile include for chapters of script
This commit is contained in:
parent
7719cb3385
commit
3e0f8c10a1
33
Makefile
33
Makefile
@ -3,29 +3,44 @@ BASENAME=scientificcomputing-script
|
|||||||
SUBDIRS=programming plotting programmingstyle statistics bootstrap regression likelihood pointprocesses designpattern
|
SUBDIRS=programming plotting programmingstyle statistics bootstrap regression likelihood pointprocesses designpattern
|
||||||
SUBTEXS=$(foreach subd, $(SUBDIRS), $(subd)/lecture/$(subd).tex)
|
SUBTEXS=$(foreach subd, $(SUBDIRS), $(subd)/lecture/$(subd).tex)
|
||||||
|
|
||||||
pdf : chapters $(BASENAME).pdf
|
all : script chapters
|
||||||
|
|
||||||
chapters :
|
chapters :
|
||||||
for sd in $(SUBDIRS); do $(MAKE) -C $$sd/lecture pdf; done
|
for sd in $(SUBDIRS); do $(MAKE) -C $$sd/lecture chapter; done
|
||||||
|
|
||||||
|
script : plots $(BASENAME).pdf
|
||||||
|
|
||||||
|
|
||||||
|
plots :
|
||||||
|
for sd in $(SUBDIRS); do $(MAKE) -C $$sd/lecture plots; done
|
||||||
|
|
||||||
|
|
||||||
|
pdf : $(BASENAME).pdf
|
||||||
|
|
||||||
$(BASENAME).pdf : $(BASENAME).tex header.tex $(SUBTEXS)
|
$(BASENAME).pdf : $(BASENAME).tex header.tex $(SUBTEXS)
|
||||||
pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true
|
pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true
|
||||||
splitindex $(BASENAME).idx
|
splitindex $(BASENAME).idx
|
||||||
|
|
||||||
again :
|
|
||||||
pdflatex $(BASENAME).tex
|
|
||||||
|
|
||||||
index :
|
index :
|
||||||
pdflatex -interaction=scrollmode $(BASENAME).tex
|
pdflatex -interaction=scrollmode $(BASENAME).tex
|
||||||
splitindex $(BASENAME).idx
|
splitindex $(BASENAME).idx
|
||||||
pdflatex -interaction=scrollmode $(BASENAME).tex | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex $(BASENAME).tex || true
|
pdflatex -interaction=scrollmode $(BASENAME).tex | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex $(BASENAME).tex || true
|
||||||
|
|
||||||
|
again :
|
||||||
|
pdflatex $(BASENAME).tex
|
||||||
|
|
||||||
|
watchpdf :
|
||||||
|
while true; do ! make -s -q pdf && make pdf; sleep 0.5; done
|
||||||
|
|
||||||
|
|
||||||
|
watchscript :
|
||||||
|
while true; do ! make -s -q script && make script; sleep 0.5; done
|
||||||
|
|
||||||
|
|
||||||
clean :
|
clean :
|
||||||
rm -f *~ $(BASENAME).aux $(BASENAME).log $(BASENAME).out $(BASENAME).toc $(BASENAME).lo? $(BASENAME).idx $(BASENAME)-term.i* $(BASENAME)-enterm.i* $(BASENAME)-code.i*
|
rm -f *~ $(BASENAME).aux $(BASENAME).log $(BASENAME).out $(BASENAME).toc $(BASENAME).lo? $(BASENAME).idx $(BASENAME)-term.i* $(BASENAME)-enterm.i* $(BASENAME)-code.i*
|
||||||
for sd in $(SUBDIRS); do $(MAKE) -C $$sd/lecture clean; done
|
for sd in $(SUBDIRS); do $(MAKE) -C $$sd/lecture clean; done
|
||||||
|
|
||||||
cleanall : clean
|
cleanall : clean
|
||||||
rm -f $(PDFFILE)
|
rm -f $(BASENAME).pdf
|
||||||
|
for sd in $(SUBDIRS); do $(MAKE) -C $$sd/lecture cleanall; done
|
||||||
watchpdf :
|
|
||||||
while true; do ! make -q pdf && make pdf; sleep 0.5; done
|
|
||||||
|
@ -1,32 +1,13 @@
|
|||||||
BASENAME=bootstrap
|
BASENAME=bootstrap
|
||||||
|
|
||||||
PYFILES=$(wildcard *.py)
|
|
||||||
PYPDFFILES=$(PYFILES:.py=.pdf)
|
|
||||||
|
|
||||||
all : pdf
|
all : pdf
|
||||||
|
|
||||||
# script:
|
include ../../chapter.mk
|
||||||
pdf : $(BASENAME)-chapter.pdf
|
|
||||||
|
|
||||||
$(BASENAME)-chapter.pdf : $(BASENAME)-chapter.tex $(BASENAME).tex $(PYPDFFILES)
|
|
||||||
CHAPTER=$$(( $$(sed -n -e '/contentsline {chapter}/{s/.*numberline {\([0123456789]*\)}.*/\1/; p}' $(BASENAME).aux) - 1 )); \
|
|
||||||
PAGE=$$(sed -n -e '/contentsline {chapter}/{s/.*numberline {.*}.*}{\(.*\)}{chapter.*/\1/; p}' $(BASENAME).aux); \
|
|
||||||
sed -i -e "s/setcounter{page}{.*}/setcounter{page}{$$PAGE}/; s/setcounter{chapter}{.*}/setcounter{chapter}{$$CHAPTER}/" $(BASENAME)-chapter.tex
|
|
||||||
pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true
|
|
||||||
|
|
||||||
$(PYPDFFILES) : %.pdf : %.py
|
# script:
|
||||||
python $<
|
pdf : chapter
|
||||||
|
|
||||||
clean :
|
|
||||||
rm -f *~
|
|
||||||
rm -f $(BASENAME).aux $(BASENAME).log
|
|
||||||
rm -f $(BASENAME)-chapter.aux $(BASENAME)-chapter.log $(BASENAME)-chapter.out
|
|
||||||
rm -f $(PYPDFFILES) $(GPTTEXFILES)
|
|
||||||
|
|
||||||
cleanall : clean
|
|
||||||
rm -f $(BASENAME)-chapter.pdf
|
|
||||||
|
|
||||||
watchpdf :
|
clean : cleanchapter
|
||||||
while true; do ! make -q pdf && make pdf; sleep 0.5; done
|
|
||||||
|
|
||||||
|
cleanall : clean cleanchapter
|
||||||
|
|
||||||
|
@ -5,8 +5,10 @@
|
|||||||
\lstset{inputpath=../code}
|
\lstset{inputpath=../code}
|
||||||
\graphicspath{{figures/}}
|
\graphicspath{{figures/}}
|
||||||
|
|
||||||
\setcounter{page}{69}
|
\typein[\pagenumber]{Number of first page}
|
||||||
\setcounter{chapter}{4}
|
\typein[\chapternumber]{Chapter number}
|
||||||
|
\setcounter{page}{\pagenumber}
|
||||||
|
\setcounter{chapter}{\chapternumber}
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
52
chapter.mk
Normal file
52
chapter.mk
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
# plots:
|
||||||
|
plots : pythonplots gnuplots
|
||||||
|
|
||||||
|
# python plots:
|
||||||
|
PYFILES=$(wildcard *.py)
|
||||||
|
PYPDFFILES=$(PYFILES:.py=.pdf)
|
||||||
|
|
||||||
|
pythonplots : $(PYPDFFILES)
|
||||||
|
|
||||||
|
$(PYPDFFILES) : %.pdf: %.py
|
||||||
|
python $<
|
||||||
|
|
||||||
|
cleanpythonplots :
|
||||||
|
rm -f $(PYPDFFILES)
|
||||||
|
|
||||||
|
|
||||||
|
# gnuplot plots:
|
||||||
|
GPTFILES=$(wildcard *.gpt)
|
||||||
|
GPTTEXFILES=$(GPTFILES:.gpt=.tex)
|
||||||
|
|
||||||
|
gnuplots : $(GPTTEXFILES)
|
||||||
|
|
||||||
|
$(GPTTEXFILES) : %.tex: %.gpt whitestyles.gp
|
||||||
|
gnuplot whitestyles.gp $<
|
||||||
|
epstopdf $*.eps
|
||||||
|
|
||||||
|
cleangnuplots :
|
||||||
|
rm -f $(GPTTEXFILES)
|
||||||
|
|
||||||
|
|
||||||
|
# script:
|
||||||
|
chapter : $(BASENAME)-chapter.pdf
|
||||||
|
|
||||||
|
$(BASENAME)-chapter.pdf : $(BASENAME)-chapter.tex $(BASENAME).tex $(wildcard $(BASENAME).aux) $(PYPDFFILES) $(GPTTEXFILES)
|
||||||
|
if test -f $(BASENAME).aux; then \
|
||||||
|
CHAPTER=$$(( $$(sed -n -e '/contentsline {chapter}/{s/.*numberline {\([0123456789]*\)}.*/\1/; p}' $(BASENAME).aux) - 1 )); \
|
||||||
|
PAGE=$$(sed -n -e '/contentsline {chapter}/{s/.*numberline {.*}.*}{\(.*\)}{chapter.*/\1/; p}' $(BASENAME).aux); \
|
||||||
|
fi; \
|
||||||
|
{ echo $${PAGE:=1}; echo $${CHAPTER:=0}; } | pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && { echo $${PAGE:=1}; echo $${CHAPTER:=0}; } | pdflatex -interaction=scrollmode $< || true
|
||||||
|
|
||||||
|
watchchapter :
|
||||||
|
while true; do ! make -q chapter && make chapter; sleep 0.5; done
|
||||||
|
|
||||||
|
|
||||||
|
cleanchapter : cleanpythonplots cleangnuplots
|
||||||
|
rm -f *~
|
||||||
|
rm -f $(BASENAME).aux $(BASENAME).log
|
||||||
|
rm -f $(BASENAME)-chapter.aux $(BASENAME)-chapter.log $(BASENAME)-chapter.out $(BASENAME)-chapter.idx
|
||||||
|
|
||||||
|
|
||||||
|
cleanallchapter : cleanchapter
|
||||||
|
rm -f $(BASENAME)-chapter.pdf
|
@ -1,32 +1,13 @@
|
|||||||
BASENAME=designpattern
|
BASENAME=designpattern
|
||||||
|
|
||||||
PYFILES=$(wildcard *.py)
|
|
||||||
PYPDFFILES=$(PYFILES:.py=.pdf)
|
|
||||||
|
|
||||||
all : pdf
|
all : pdf
|
||||||
|
|
||||||
# script:
|
include ../../chapter.mk
|
||||||
pdf : $(BASENAME)-chapter.pdf
|
|
||||||
|
|
||||||
$(BASENAME)-chapter.pdf : $(BASENAME)-chapter.tex $(BASENAME).tex $(PYPDFFILES)
|
|
||||||
CHAPTER=$$(( $$(sed -n -e '/contentsline {chapter}/{s/.*numberline {\([0123456789]*\)}.*/\1/; p}' $(BASENAME).aux) - 1 )); \
|
|
||||||
PAGE=$$(sed -n -e '/contentsline {chapter}/{s/.*numberline {.*}.*}{\(.*\)}{chapter.*/\1/; p}' $(BASENAME).aux); \
|
|
||||||
sed -i -e "s/setcounter{page}{.*}/setcounter{page}{$$PAGE}/; s/setcounter{chapter}{.*}/setcounter{chapter}{$$CHAPTER}/" $(BASENAME)-chapter.tex
|
|
||||||
pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true
|
|
||||||
|
|
||||||
$(PYPDFFILES) : %.pdf : %.py
|
# script:
|
||||||
python $<
|
pdf : chapter
|
||||||
|
|
||||||
clean :
|
|
||||||
rm -f *~
|
|
||||||
rm -f $(BASENAME).aux $(BASENAME).log
|
|
||||||
rm -f $(BASENAME)-chapter.aux $(BASENAME)-chapter.log $(BASENAME)-chapter.out
|
|
||||||
rm -f $(PYPDFFILES) $(GPTTEXFILES)
|
|
||||||
|
|
||||||
cleanall : clean
|
|
||||||
rm -f $(BASENAME)-chapter.pdf
|
|
||||||
|
|
||||||
watchpdf :
|
clean : cleanchapter
|
||||||
while true; do ! make -q pdf && make pdf; sleep 0.5; done
|
|
||||||
|
|
||||||
|
cleanall : clean cleanchapter
|
||||||
|
|
||||||
|
@ -5,8 +5,10 @@
|
|||||||
\lstset{inputpath=../code}
|
\lstset{inputpath=../code}
|
||||||
\graphicspath{{figures/}}
|
\graphicspath{{figures/}}
|
||||||
|
|
||||||
\setcounter{page}{121}
|
\typein[\pagenumber]{Number of first page}
|
||||||
\setcounter{chapter}{8}
|
\typein[\chapternumber]{Chapter number}
|
||||||
|
\setcounter{page}{\pagenumber}
|
||||||
|
\setcounter{chapter}{\chapternumber}
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
@ -1,32 +1,12 @@
|
|||||||
BASENAME=likelihood
|
BASENAME=likelihood
|
||||||
|
|
||||||
PYFILES=$(wildcard *.py)
|
|
||||||
PYPDFFILES=$(PYFILES:.py=.pdf)
|
|
||||||
|
|
||||||
all : pdf
|
all : pdf
|
||||||
|
|
||||||
# script:
|
include ../../chapter.mk
|
||||||
pdf : $(BASENAME)-chapter.pdf
|
|
||||||
|
|
||||||
$(BASENAME)-chapter.pdf : $(BASENAME)-chapter.tex $(BASENAME).tex $(PYPDFFILES)
|
|
||||||
CHAPTER=$$(( $$(sed -n -e '/contentsline {chapter}/{s/.*numberline {\([0123456789]*\)}.*/\1/; p}' $(BASENAME).aux) - 1 )); \
|
|
||||||
PAGE=$$(sed -n -e '/contentsline {chapter}/{s/.*numberline {.*}.*}{\(.*\)}{chapter.*/\1/; p}' $(BASENAME).aux); \
|
|
||||||
sed -i -e "s/setcounter{page}{.*}/setcounter{page}{$$PAGE}/; s/setcounter{chapter}{.*}/setcounter{chapter}{$$CHAPTER}/" $(BASENAME)-chapter.tex
|
|
||||||
pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true
|
|
||||||
|
|
||||||
$(PYPDFFILES) : %.pdf : %.py
|
|
||||||
python $<
|
|
||||||
|
|
||||||
clean :
|
# script:
|
||||||
rm -f *~
|
pdf : chapter
|
||||||
rm -f $(BASENAME).aux $(BASENAME).log
|
|
||||||
rm -f $(BASENAME)-chapter.aux $(BASENAME)-chapter.log $(BASENAME)-chapter.out
|
|
||||||
rm -f $(PYPDFFILES) $(GPTTEXFILES)
|
|
||||||
|
|
||||||
cleanall : clean
|
|
||||||
rm -f $(BASENAME)-chapter.pdf
|
|
||||||
|
|
||||||
watchpdf :
|
|
||||||
while true; do ! make -q pdf && make pdf; sleep 0.5; done
|
|
||||||
|
|
||||||
|
clean : cleanchapter
|
||||||
|
|
||||||
|
cleanall : clean cleanchapter
|
||||||
|
@ -5,8 +5,10 @@
|
|||||||
\lstset{inputpath=../code}
|
\lstset{inputpath=../code}
|
||||||
\graphicspath{{figures/}}
|
\graphicspath{{figures/}}
|
||||||
|
|
||||||
\setcounter{page}{89}
|
\typein[\pagenumber]{Number of first page}
|
||||||
\setcounter{chapter}{6}
|
\typein[\chapternumber]{Chapter number}
|
||||||
|
\setcounter{page}{\pagenumber}
|
||||||
|
\setcounter{chapter}{\chapternumber}
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
@ -1,21 +1,12 @@
|
|||||||
BASENAME=plotting
|
BASENAME=plotting
|
||||||
|
|
||||||
PYFILES=$(wildcard *.py)
|
|
||||||
PYPDFFILES=$(PYFILES:.py=.pdf)
|
|
||||||
|
|
||||||
GPTFILES=$(wildcard *.gpt)
|
|
||||||
GPTTEXFILES=$(GPTFILES:.gpt=.tex)
|
|
||||||
|
|
||||||
|
|
||||||
all: pdf slides thumbs
|
all: pdf slides thumbs
|
||||||
|
|
||||||
|
include ../../chapter.mk
|
||||||
|
|
||||||
# script:
|
# script:
|
||||||
pdf : $(BASENAME)-chapter.pdf
|
pdf : chapter
|
||||||
$(BASENAME)-chapter.pdf : $(BASENAME)-chapter.tex $(BASENAME).tex $(GPTTEXFILES) $(PYPDFFILES) ../../header.tex
|
|
||||||
CHAPTER=$$(( $$(sed -n -e '/contentsline {chapter}/{s/.*numberline {\([0123456789]*\)}.*/\1/; p}' $(BASENAME).aux) - 1 )); \
|
|
||||||
PAGE=$$(sed -n -e '/contentsline {chapter}/{s/.*numberline {.*}.*}{\(.*\)}{chapter.*/\1/; p}' $(BASENAME).aux); \
|
|
||||||
sed -i -e "s/setcounter{page}{.*}/setcounter{page}{$$PAGE}/; s/setcounter{chapter}{.*}/setcounter{chapter}{$$CHAPTER}/" $(BASENAME)-chapter.tex
|
|
||||||
pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true
|
|
||||||
|
|
||||||
|
|
||||||
# slides:
|
# slides:
|
||||||
@ -31,31 +22,15 @@ $(BASENAME)-handout.pdf: $(BASENAME)-slides.tex $(GPTTEXFILES)
|
|||||||
pdfnup --nup 2x4 --no-landscape --paper a4paper --trim "-1cm -1cm -1cm -1cm" --outfile $@ thumbsfoils.pdf # 1-19
|
pdfnup --nup 2x4 --no-landscape --paper a4paper --trim "-1cm -1cm -1cm -1cm" --outfile $@ thumbsfoils.pdf # 1-19
|
||||||
rm thumbsfoils.*
|
rm thumbsfoils.*
|
||||||
|
|
||||||
watchpdf :
|
|
||||||
while true; do ! make -q pdf && make pdf; sleep 0.5; done
|
|
||||||
|
|
||||||
watchslides :
|
watchslides :
|
||||||
while true; do ! make -q slides && make slides; sleep 0.5; done
|
while true; do ! make -q slides && make slides; sleep 0.5; done
|
||||||
|
|
||||||
# python plots:
|
|
||||||
$(PYPDFFILES) : %.pdf: %.py
|
|
||||||
python $<
|
|
||||||
|
|
||||||
# gnuplot plots:
|
|
||||||
$(GPTTEXFILES) : %.tex: %.gpt whitestyles.gp
|
|
||||||
gnuplot whitestyles.gp $<
|
|
||||||
epstopdf $*.eps
|
|
||||||
|
|
||||||
|
|
||||||
clean :
|
clean : cleanchapter
|
||||||
rm -f *~
|
|
||||||
rm -f $(BASENAME).aux $(BASENAME).log
|
|
||||||
rm -f $(BASENAME)-chapter.aux $(BASENAME)-chapter.log $(BASENAME)-chapter.out
|
|
||||||
rm -f $(BASENAME)-slides.aux $(BASENAME)-slides.log $(BASENAME)-slides.out $(BASENAME)-slides.toc $(BASENAME)-slides.nav $(BASENAME)-slides.snm $(BASENAME)-slides.vrb
|
rm -f $(BASENAME)-slides.aux $(BASENAME)-slides.log $(BASENAME)-slides.out $(BASENAME)-slides.toc $(BASENAME)-slides.nav $(BASENAME)-slides.snm $(BASENAME)-slides.vrb
|
||||||
rm -f $(PYPDFFILES) $(GPTTEXFILES)
|
|
||||||
|
|
||||||
cleanall : clean
|
cleanall : clean cleanallchapter
|
||||||
rm -f $(BASENAME)-chapter.pdf $(BASENAME)-slides.pdf $(BASENAME)-handout.pdf
|
rm -f $(BASENAME)-slides.pdf $(BASENAME)-handout.pdf
|
||||||
|
|
||||||
|
|
||||||
help :
|
help :
|
||||||
|
@ -5,8 +5,10 @@
|
|||||||
\lstset{inputpath=../code}
|
\lstset{inputpath=../code}
|
||||||
\graphicspath{{images/}}
|
\graphicspath{{images/}}
|
||||||
|
|
||||||
\setcounter{page}{33}
|
\typein[\pagenumber]{Number of first page}
|
||||||
\setcounter{chapter}{1}
|
\typein[\chapternumber]{Chapter number}
|
||||||
|
\setcounter{page}{\pagenumber}
|
||||||
|
\setcounter{chapter}{\chapternumber}
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
\chapter{\tr{Data plotting}{Graphische Darstellung von Daten}}
|
\chapter{Graphische Darstellung von Daten}
|
||||||
|
|
||||||
Die F\"ahigkeit zur ad\"aquaten Darstellung wissenschaftlicher Daten
|
Die F\"ahigkeit zur ad\"aquaten Darstellung wissenschaftlicher Daten
|
||||||
darf durchaus zu den notwendigen Kernkompetenzen gez\"ahlt werden. Wir
|
darf durchaus zu den notwendigen Kernkompetenzen gez\"ahlt werden. Wir
|
||||||
|
@ -1,21 +1,12 @@
|
|||||||
BASENAME=pointprocesses
|
BASENAME=pointprocesses
|
||||||
|
|
||||||
PYFILES=$(wildcard *.py)
|
|
||||||
PYPDFFILES=$(PYFILES:.py=.pdf)
|
|
||||||
|
|
||||||
GPTFILES=$(wildcard *.gpt)
|
|
||||||
GPTTEXFILES=$(GPTFILES:.gpt=.tex)
|
|
||||||
|
|
||||||
|
|
||||||
all: pdf slides thumbs
|
all: pdf slides thumbs
|
||||||
|
|
||||||
|
include ../../chapter.mk
|
||||||
|
|
||||||
# script:
|
# script:
|
||||||
pdf : $(BASENAME)-chapter.pdf
|
pdf : chapter
|
||||||
$(BASENAME)-chapter.pdf : $(BASENAME)-chapter.tex $(BASENAME).tex ../../header.tex $(GPTTEXFILES) $(PYPDFFILES)
|
|
||||||
CHAPTER=$$(( $$(sed -n -e '/contentsline {chapter}/{s/.*numberline {\([0123456789]*\)}.*/\1/; p}' $(BASENAME).aux) - 1 )); \
|
|
||||||
PAGE=$$(sed -n -e '/contentsline {chapter}/{s/.*numberline {.*}.*}{\(.*\)}{chapter.*/\1/; p}' $(BASENAME).aux); \
|
|
||||||
sed -i -e "s/setcounter{page}{.*}/setcounter{page}{$$PAGE}/; s/setcounter{chapter}{.*}/setcounter{chapter}{$$CHAPTER}/" $(BASENAME)-chapter.tex
|
|
||||||
pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true
|
|
||||||
|
|
||||||
|
|
||||||
# slides:
|
# slides:
|
||||||
@ -31,31 +22,15 @@ $(BASENAME)-handout.pdf: $(BASENAME)-slides.tex $(GPTTEXFILES)
|
|||||||
pdfnup --nup 2x4 --no-landscape --paper a4paper --trim "-1cm -1cm -1cm -1cm" --outfile $@ thumbsfoils.pdf # 1-19
|
pdfnup --nup 2x4 --no-landscape --paper a4paper --trim "-1cm -1cm -1cm -1cm" --outfile $@ thumbsfoils.pdf # 1-19
|
||||||
rm thumbsfoils.*
|
rm thumbsfoils.*
|
||||||
|
|
||||||
watchpdf :
|
|
||||||
while true; do ! make -q pdf && make pdf; sleep 0.5; done
|
|
||||||
|
|
||||||
watchslides :
|
watchslides :
|
||||||
while true; do ! make -q slides && make slides; sleep 0.5; done
|
while true; do ! make -q slides && make slides; sleep 0.5; done
|
||||||
|
|
||||||
# python plots:
|
|
||||||
$(PYPDFFILES) : %.pdf: %.py
|
|
||||||
python $<
|
|
||||||
|
|
||||||
# gnuplot plots:
|
|
||||||
$(GPTTEXFILES) : %.tex: %.gpt whitestyles.gp
|
|
||||||
gnuplot whitestyles.gp $<
|
|
||||||
epstopdf $*.eps
|
|
||||||
|
|
||||||
|
|
||||||
clean :
|
clean : cleanchapter
|
||||||
rm -f *~
|
|
||||||
rm -f $(BASENAME).aux $(BASENAME).log
|
|
||||||
rm -f $(BASENAME)-chapter.aux $(BASENAME)-chapter.log $(BASENAME)-chapter.out
|
|
||||||
rm -f $(BASENAME)-slides.aux $(BASENAME)-slides.log $(BASENAME)-slides.out $(BASENAME)-slides.toc $(BASENAME)-slides.nav $(BASENAME)-slides.snm $(BASENAME)-slides.vrb
|
rm -f $(BASENAME)-slides.aux $(BASENAME)-slides.log $(BASENAME)-slides.out $(BASENAME)-slides.toc $(BASENAME)-slides.nav $(BASENAME)-slides.snm $(BASENAME)-slides.vrb
|
||||||
rm -f $(PYPDFFILES) $(GPTTEXFILES)
|
|
||||||
|
|
||||||
cleanall : clean
|
cleanall : clean cleanchapter
|
||||||
rm -f $(BASENAME)-chapter.pdf $(BASENAME)-slides.pdf $(BASENAME)-handout.pdf
|
$(BASENAME)-slides.pdf $(BASENAME)-handout.pdf
|
||||||
|
|
||||||
|
|
||||||
help :
|
help :
|
||||||
|
@ -5,8 +5,10 @@
|
|||||||
\lstset{inputpath=../code}
|
\lstset{inputpath=../code}
|
||||||
\graphicspath{{figures/}}
|
\graphicspath{{figures/}}
|
||||||
|
|
||||||
\setcounter{page}{99}
|
\typein[\pagenumber]{Number of first page}
|
||||||
\setcounter{chapter}{7}
|
\typein[\chapternumber]{Chapter number}
|
||||||
|
\setcounter{page}{\pagenumber}
|
||||||
|
\setcounter{chapter}{\chapternumber}
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
%!PS-Adobe-2.0 EPSF-2.0
|
%!PS-Adobe-2.0 EPSF-2.0
|
||||||
%%Title: pointprocessscetchA.tex
|
%%Title: pointprocessscetchA.tex
|
||||||
%%Creator: gnuplot 4.6 patchlevel 4
|
%%Creator: gnuplot 4.6 patchlevel 4
|
||||||
%%CreationDate: Mon Nov 23 13:45:26 2015
|
%%CreationDate: Sat Nov 28 12:01:31 2015
|
||||||
%%DocumentFonts:
|
%%DocumentFonts:
|
||||||
%%BoundingBox: 50 50 373 135
|
%%BoundingBox: 50 50 373 135
|
||||||
%%EndComments
|
%%EndComments
|
||||||
@ -430,10 +430,10 @@ SDict begin [
|
|||||||
/Title (pointprocessscetchA.tex)
|
/Title (pointprocessscetchA.tex)
|
||||||
/Subject (gnuplot plot)
|
/Subject (gnuplot plot)
|
||||||
/Creator (gnuplot 4.6 patchlevel 4)
|
/Creator (gnuplot 4.6 patchlevel 4)
|
||||||
/Author (grewe)
|
/Author (jan)
|
||||||
% /Producer (gnuplot)
|
% /Producer (gnuplot)
|
||||||
% /Keywords ()
|
% /Keywords ()
|
||||||
/CreationDate (Mon Nov 23 13:45:26 2015)
|
/CreationDate (Sat Nov 28 12:01:31 2015)
|
||||||
/DOCINFO pdfmark
|
/DOCINFO pdfmark
|
||||||
end
|
end
|
||||||
} ifelse
|
} ifelse
|
||||||
|
Binary file not shown.
@ -1,7 +1,7 @@
|
|||||||
%!PS-Adobe-2.0 EPSF-2.0
|
%!PS-Adobe-2.0 EPSF-2.0
|
||||||
%%Title: pointprocessscetchB.tex
|
%%Title: pointprocessscetchB.tex
|
||||||
%%Creator: gnuplot 4.6 patchlevel 4
|
%%Creator: gnuplot 4.6 patchlevel 4
|
||||||
%%CreationDate: Mon Nov 23 13:46:59 2015
|
%%CreationDate: Sat Nov 28 12:01:32 2015
|
||||||
%%DocumentFonts:
|
%%DocumentFonts:
|
||||||
%%BoundingBox: 50 50 373 237
|
%%BoundingBox: 50 50 373 237
|
||||||
%%EndComments
|
%%EndComments
|
||||||
@ -430,10 +430,10 @@ SDict begin [
|
|||||||
/Title (pointprocessscetchB.tex)
|
/Title (pointprocessscetchB.tex)
|
||||||
/Subject (gnuplot plot)
|
/Subject (gnuplot plot)
|
||||||
/Creator (gnuplot 4.6 patchlevel 4)
|
/Creator (gnuplot 4.6 patchlevel 4)
|
||||||
/Author (grewe)
|
/Author (jan)
|
||||||
% /Producer (gnuplot)
|
% /Producer (gnuplot)
|
||||||
% /Keywords ()
|
% /Keywords ()
|
||||||
/CreationDate (Mon Nov 23 13:46:59 2015)
|
/CreationDate (Sat Nov 28 12:01:32 2015)
|
||||||
/DOCINFO pdfmark
|
/DOCINFO pdfmark
|
||||||
end
|
end
|
||||||
} ifelse
|
} ifelse
|
||||||
|
Binary file not shown.
@ -2,33 +2,13 @@ BASENAME=programming
|
|||||||
|
|
||||||
#TEXFILES=boolean_logical_indexing.tex control_structures.tex data_structures.tex plotting.tex programming_basics.tex scripts_functions.tex sta_stc.tex variables_datatypes.tex vectors_matrices.tex
|
#TEXFILES=boolean_logical_indexing.tex control_structures.tex data_structures.tex plotting.tex programming_basics.tex scripts_functions.tex sta_stc.tex variables_datatypes.tex vectors_matrices.tex
|
||||||
|
|
||||||
PYFILES=$(wildcard *.py)
|
|
||||||
PYPDFFILES=$(PYFILES:.py=.pdf)
|
|
||||||
|
|
||||||
all : pdf
|
all : pdf
|
||||||
|
|
||||||
# script:
|
include ../../chapter.mk
|
||||||
pdf : $(BASENAME)-chapter.pdf
|
|
||||||
|
|
||||||
$(BASENAME)-chapter.pdf : $(BASENAME)-chapter.tex $(BASENAME).tex $(PYPDFFILES) ../../header.tex
|
|
||||||
CHAPTER=$$(( $$(sed -n -e '/contentsline {chapter}/{s/.*numberline {\([0123456789]*\)}.*/\1/; p}' $(BASENAME).aux) - 1 )); \
|
|
||||||
PAGE=$$(sed -n -e '/contentsline {chapter}/{s/.*numberline {.*}.*}{\(.*\)}{chapter.*/\1/; p}' $(BASENAME).aux); \
|
|
||||||
sed -i -e "s/setcounter{page}{.*}/setcounter{page}{$$PAGE}/; s/setcounter{chapter}{.*}/setcounter{chapter}{$$CHAPTER}/" $(BASENAME)-chapter.tex
|
|
||||||
pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true
|
|
||||||
|
|
||||||
$(PYPDFFILES) : %.pdf : %.py
|
|
||||||
python $<
|
|
||||||
|
|
||||||
clean :
|
# script:
|
||||||
rm -f *~
|
pdf : chapter
|
||||||
rm -f $(BASENAME).aux $(BASENAME).log
|
|
||||||
rm -f $(BASENAME)-chapter.aux $(BASENAME)-chapter.log $(BASENAME)-chapter.out
|
|
||||||
rm -f $(PYPDFFILES) $(GPTTEXFILES)
|
|
||||||
|
|
||||||
cleanall : clean
|
|
||||||
rm -f $(BASENAME)-chapter.pdf
|
|
||||||
|
|
||||||
watchpdf :
|
|
||||||
while true; do ! make -q pdf && make pdf; sleep 0.5; done
|
|
||||||
|
|
||||||
|
clean : cleanchapter
|
||||||
|
|
||||||
|
cleanall : clean cleanchapter
|
||||||
|
@ -5,7 +5,9 @@
|
|||||||
\lstset{inputpath=../code}
|
\lstset{inputpath=../code}
|
||||||
\graphicspath{{images/}}
|
\graphicspath{{images/}}
|
||||||
|
|
||||||
\setcounter{page}{15}
|
\typein[\pagenumber]{Number of first page}
|
||||||
|
\typein[\chapternumber]{Chapter number}
|
||||||
|
\setcounter{page}{3}
|
||||||
\setcounter{chapter}{0}
|
\setcounter{chapter}{0}
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
32
programmingstyle/code/calculateSines.m
Normal file
32
programmingstyle/code/calculateSines.m
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
function sines = calculateSines(times, amplitudes, frequencies)
|
||||||
|
% Function calculates sinewaves with all combinations of
|
||||||
|
% given amplitudes and frequencies.
|
||||||
|
%
|
||||||
|
% sines = calculateSines(times, amplitudes, frequencies)
|
||||||
|
%
|
||||||
|
% Arguments:
|
||||||
|
% times : vector of times as which the sines should be computed.
|
||||||
|
% amplitudes : vector with amplitudes.
|
||||||
|
% frequencies: vector with frequencies.
|
||||||
|
%
|
||||||
|
% Returns:
|
||||||
|
% a 3-D Matrix of sinewaves, 2nd dimension represents
|
||||||
|
% the amplitudes, 3rd the frequencies.
|
||||||
|
sines = zeros(length(times), length(amplitudes), length(frequencies));
|
||||||
|
for i = 1:length(amplitudes)
|
||||||
|
sines(:,i,:) = sinesWithFrequencies(times, amplitudes(i), frequencies);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function sines = sinesWithFrequencies(times, amplitude, frequencies)
|
||||||
|
sines = zeros(length(times), length(frequencies));
|
||||||
|
for i = 1:length(frequencies)
|
||||||
|
sines(:,i) = sineWave(times, amplitude, frequencies(i));
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function sine = sineWave(times, amplitude, frequency)
|
||||||
|
sine = sin(2.0*pi.*times*frequency) .* amplitude;
|
||||||
|
end
|
@ -1,30 +0,0 @@
|
|||||||
function sines = calculate_sines(x, amplitudes, frequencies)
|
|
||||||
% Function calculates sinewaves with all combinations of
|
|
||||||
% given amplitudes and frequencies.
|
|
||||||
% Arguments: x, a vector of radiants for which the sine should be
|
|
||||||
% computed.
|
|
||||||
% amplitudes, a vector of amplitudes.
|
|
||||||
% frequencies, a vector of frequencies.
|
|
||||||
%
|
|
||||||
% Returns: a 3-D Matrix of sinewaves, 2nd dimension represents
|
|
||||||
% the amplitudes, 3rd the frequencies.
|
|
||||||
|
|
||||||
sines = zeros(length(x), length(amplitudes), length(frequencies));
|
|
||||||
|
|
||||||
for i = 1:length(amplitudes)
|
|
||||||
sines(:,i,:) = sines_with_frequencies(x, amplitudes(i), frequencies);
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
function sines = sines_with_frequencies(x, amplitude, frequencies)
|
|
||||||
sines = zeros(length(x), length(frequencies));
|
|
||||||
for i = 1:length(frequencies)
|
|
||||||
sines(:,i) = sinewave(x, amplitude, frequencies(i));
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
function sine = sinewave(x, amplitude, frequency)
|
|
||||||
sine = sin(2 .* pi .* x *frequency) .* amplitude;
|
|
||||||
end
|
|
@ -1,32 +1,12 @@
|
|||||||
BASENAME=programmingstyle
|
BASENAME=programmingstyle
|
||||||
|
|
||||||
PYFILES=$(wildcard *.py)
|
|
||||||
PYPDFFILES=$(PYFILES:.py=.pdf)
|
|
||||||
|
|
||||||
all : pdf
|
all : pdf
|
||||||
|
|
||||||
# script:
|
include ../../chapter.mk
|
||||||
pdf : $(BASENAME)-chapter.pdf
|
|
||||||
|
|
||||||
$(BASENAME)-chapter.pdf : $(BASENAME)-chapter.tex $(BASENAME).tex $(PYPDFFILES) ../../header.tex
|
|
||||||
CHAPTER=$$(( $$(sed -n -e '/contentsline {chapter}/{s/.*numberline {\([0123456789]*\)}.*/\1/; p}' $(BASENAME).aux) - 1 )); \
|
|
||||||
PAGE=$$(sed -n -e '/contentsline {chapter}/{s/.*numberline {.*}.*}{\(.*\)}{chapter.*/\1/; p}' $(BASENAME).aux); \
|
|
||||||
sed -i -e "s/setcounter{page}{.*}/setcounter{page}{$$PAGE}/; s/setcounter{chapter}{.*}/setcounter{chapter}{$$CHAPTER}/" $(BASENAME)-chapter.tex
|
|
||||||
pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true
|
|
||||||
|
|
||||||
$(PYPDFFILES) : %.pdf : %.py
|
|
||||||
python $<
|
|
||||||
|
|
||||||
clean :
|
# script:
|
||||||
rm -f *~
|
pdf : chapter
|
||||||
rm -f $(BASENAME).aux $(BASENAME).log
|
|
||||||
rm -f $(BASENAME)-chapter.aux $(BASENAME)-chapter.log $(BASENAME)-chapter.out
|
|
||||||
rm -f $(PYPDFFILES) $(GPTTEXFILES)
|
|
||||||
|
|
||||||
cleanall : clean
|
|
||||||
rm -f $(BASENAME)-chapter.pdf
|
|
||||||
|
|
||||||
watchpdf :
|
|
||||||
while true; do ! make -q pdf && make pdf; sleep 0.5; done
|
|
||||||
|
|
||||||
|
clean : cleanchapter
|
||||||
|
|
||||||
|
cleanall : clean cleanchapter
|
||||||
|
@ -5,8 +5,10 @@
|
|||||||
\lstset{inputpath=../code}
|
\lstset{inputpath=../code}
|
||||||
\graphicspath{{figures/}}
|
\graphicspath{{figures/}}
|
||||||
|
|
||||||
\setcounter{page}{45}
|
\typein[\pagenumber]{Number of first page}
|
||||||
\setcounter{chapter}{2}
|
\typein[\chapternumber]{Chapter number}
|
||||||
|
\setcounter{page}{\pagenumber}
|
||||||
|
\setcounter{chapter}{\chapternumber}
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
@ -6,14 +6,16 @@ wissenschaftlichen Erkenntnisgewinn reproduzierbar zu
|
|||||||
machen.
|
machen.
|
||||||
|
|
||||||
Programme sollten so geschrieben und strukturiert sein, dass es sowohl
|
Programme sollten so geschrieben und strukturiert sein, dass es sowohl
|
||||||
einem Au{\ss}enstehenden als auch einem selbst, nach ein paar Monaten,
|
einem Au{\ss}enstehenden als auch einem selbst --- nach ein paar
|
||||||
leicht f\"allt den Programmablauf nachzuvollziehen und zu
|
Wochen oder Monaten! --- leicht f\"allt den Programmablauf
|
||||||
verstehen. Saubere Programmierung zahlt sich aber in erster Linie
|
nachzuvollziehen und zu verstehen. Saubere Programmierung zahlt sich
|
||||||
f\"ur den Verfasser eines Programmes aus.
|
in erster Linie f\"ur einen selbst aus und macht es aber gleichzeitig
|
||||||
|
f\"ur andere Personen leichter, den Code nachzuvollziehen und zu
|
||||||
|
benutzen.
|
||||||
|
|
||||||
Guter Programmierstil greift auf unterschiedlichen Ebenen an:
|
Guter Programmierstil greift auf unterschiedlichen Ebenen an:
|
||||||
\begin{enumerate}
|
\begin{enumerate}
|
||||||
\item Die Struktur von Programmen.
|
\item Die Dateistruktur von Programmen.
|
||||||
\item Die Namensgebung von Skripten und Funktionen.
|
\item Die Namensgebung von Skripten und Funktionen.
|
||||||
\item Die Namensgebung f\"ur Variablen und Konstanten.
|
\item Die Namensgebung f\"ur Variablen und Konstanten.
|
||||||
\item Die Verwendung von Einr\"uckungen und Leerzeilen um Bl\"ocke im
|
\item Die Verwendung von Einr\"uckungen und Leerzeilen um Bl\"ocke im
|
||||||
@ -65,7 +67,7 @@ aktuellen Ordner nach passenden Dateien sucht (mehr Information zum
|
|||||||
\matlab-Suchpfad in Box~\ref{matlabpathbox}).
|
\matlab-Suchpfad in Box~\ref{matlabpathbox}).
|
||||||
|
|
||||||
\begin{figure}[tp]
|
\begin{figure}[tp]
|
||||||
\includegraphics[width=0.75\textwidth]{program_organization}
|
\includegraphics[width=0.82\textwidth]{program_organization}
|
||||||
\titlecaption{\label{fileorganizationfig} M\"ogliche Organisation von
|
\titlecaption{\label{fileorganizationfig} M\"ogliche Organisation von
|
||||||
Programmcode im Dateisystem.}{ F\"ur jedes Projekt werden
|
Programmcode im Dateisystem.}{ F\"ur jedes Projekt werden
|
||||||
Unterordner f\"ur die einzelnen Analysen angelegt. Auf Ebene des
|
Unterordner f\"ur die einzelnen Analysen angelegt. Auf Ebene des
|
||||||
@ -82,46 +84,45 @@ aktuellen Ordner nach passenden Dateien sucht (mehr Information zum
|
|||||||
(siehe Abbildung). Der \codeterm{Suchpfad} ist eine Liste von
|
(siehe Abbildung). Der \codeterm{Suchpfad} ist eine Liste von
|
||||||
Ordnern in denen \matlab{} nach Funktionen und Skripten suchen
|
Ordnern in denen \matlab{} nach Funktionen und Skripten suchen
|
||||||
soll. Die Suche nach der aufgerufenen Funktion wird dabei von oben
|
soll. Die Suche nach der aufgerufenen Funktion wird dabei von oben
|
||||||
nach unten durchgef\"uhrt. Das heisst, dass es, bei
|
nach unten durchgef\"uhrt. Das heisst, dass es bei
|
||||||
Namensgleichheit, eine Rolle spielen kann an welcher Stelle im
|
Namensgleichheit eine Rolle spielen kann an welcher Stelle im
|
||||||
Suchpfad der erste Treffer gefunden wird. Wichtig: \matlab{} sucht
|
Suchpfad der erste Treffer gefunden wird. Wichtig: \matlab{} sucht
|
||||||
nicht rekursiv! Wenn die gew\"unschte Funktion in einem Unterordner
|
nicht rekursiv! Wenn die gew\"unschte Funktion in einem Unterordner
|
||||||
des aktuellen Arbeitsverzeichnisses liegt, dieses aber nicht
|
des aktuellen Arbeitsverzeichnisses liegt, dieses aber nicht
|
||||||
explizit im Suchpfad enthalten ist, so wird die Funktion nicht
|
explizit im Suchpfad enthalten ist, so wird die Funktion nicht
|
||||||
gefunden werden.
|
gefunden.
|
||||||
|
|
||||||
\vspace{2ex}
|
\vspace{2ex}
|
||||||
\includegraphics[width=0.75\textwidth]{search_path}
|
\includegraphics[width=0.9\textwidth]{search_path}
|
||||||
\vspace{1.5ex}
|
\vspace{1.5ex}
|
||||||
|
|
||||||
Der Suchpfad kann sowohl \"uber die in der Abbildung gezeigte GUI
|
Der Suchpfad kann sowohl \"uber die Kommandozeile mit dem Kommandos
|
||||||
oder auch \"uber die Kommandozeile eingestellt werden. Die GUI
|
\code{addpath()} und \code{userpath()} als auch\"uber die in der
|
||||||
erlaubt Ordner aus dem Suchpfad zu entfernen, neue
|
Abbildung gezeigte GUI angezeigt und eingestellt werden. Die GUI
|
||||||
Ordner (optional inklusive aller Unterordner) hinzuzuf\"ugen oder
|
erlaubt Ordner aus dem Suchpfad zu entfernen, neue Ordner (optional
|
||||||
die Reihenfolge der Pfade zu ver\"andern.
|
inklusive aller Unterordner) hinzuzuf\"ugen oder die Reihenfolge der
|
||||||
|
Pfade zu ver\"andern.
|
||||||
Zum Wechseln des aktuelle Arbeitsverzeichnis wechseln wird das
|
|
||||||
Kommando \code{cd} verwendet. \code{which} zeigt an, in welchem Pfad
|
Zum Wechseln des aktuellen Arbeitsverzeichnisses wird das Kommando
|
||||||
eine bestimmte Funktion gefunden wurde. Das aktuelle
|
\code{cd} verwendet. \code{which} zeigt an, in welchem Pfad eine
|
||||||
Areitsverzeichnis wird durch den Aufruf \code{pwd} auf der
|
bestimmte Funktion gefunden wurde. Das aktuelle Areitsverzeichnis
|
||||||
Kommandozeile ausgegeben.
|
wird durch den Aufruf \code{pwd} auf der Kommandozeile ausgegeben.
|
||||||
\end{ibox}
|
\end{ibox}
|
||||||
|
|
||||||
\section{Namensgebung von Funktionen und Skripten}
|
\section{Namensgebung von Funktionen und Skripten}
|
||||||
|
|
||||||
\matlab{} sucht Funktionen und Skripte ausschlie{\ss}lich anhand des
|
\matlab{} sucht Funktionen und Skripte ausschlie{\ss}lich anhand des
|
||||||
Namens. Dabei spielt die Gro{\ss}- und Kleinschreibung eine Rolle. Das
|
Namens. Dabei spielt die Gro{\ss}- und Kleinschreibung eine Rolle. Die
|
||||||
hei{\ss}t, dass die beiden Dateien \file{test\_funktion.m} und
|
beiden Dateien \file{test\_funktion.m} und \file{Test\_Funktion.m}
|
||||||
\file{Test\_funktion.m} zwei unterschiedliche Funktionen benennen
|
zwei unterschiedliche Funktionen benennen k\"onnen. Diese Art der
|
||||||
k\"onnen. Diese Art der Variation des Namens ist nat\"urlich nicht
|
Variation des Namens ist nat\"urlich nicht sinnvoll. Sie tr\"agt keine
|
||||||
sinnvoll. Sie tr\"agt keine Information \"uber den Unterschied der
|
Information \"uber den Unterschied der beiden Funktionen. Auch sagt
|
||||||
beiden Funktionen. Auch sagt der Name nahezu nichts \"uber den Zweck
|
der Name nahezu nichts \"uber den Zweck der Funktion aus.
|
||||||
der Funktion aus.
|
|
||||||
|
|
||||||
Die Namensgebung f\"allt mitunter nicht leicht --- manchmal ist es
|
Die Namensgebung f\"allt mitunter nicht leicht --- manchmal ist es
|
||||||
sogar der schwierigste Aspekt des Programmierens! Ausdrucksstarke
|
sogar der schwierigste Aspekt des Programmierens! Ausdrucksstarke
|
||||||
Namen zu finden lohnt sich aber. Ausdrucksstark bedeutet, dass sich
|
Namen zu finden lohnt sich aber. Ausdrucksstark bedeutet, dass sich
|
||||||
aus dem Namen ein R\"uckschluss auf den Zweck ziehen lassen sollte.
|
aus dem Namen R\"uckschl\"usse auf den Zweck ziehen lassen sollte.
|
||||||
|
|
||||||
\begin{important}[Benennung von Funktionen und Skripten]
|
\begin{important}[Benennung von Funktionen und Skripten]
|
||||||
Die Namen von Funktionen und Skripten sollten m\"oglichst viel \"uber
|
Die Namen von Funktionen und Skripten sollten m\"oglichst viel \"uber
|
||||||
@ -158,8 +159,8 @@ F\"ur die Bennennung von Variablen und Konstanten gelten die gleichen
|
|||||||
Regeln wie f\"ur die Namen von Funktionen und Skripten. Die Maxime von
|
Regeln wie f\"ur die Namen von Funktionen und Skripten. Die Maxime von
|
||||||
gutem Programmierstil ist: \emph{``Programmcode muss lesbar
|
gutem Programmierstil ist: \emph{``Programmcode muss lesbar
|
||||||
sein.''}. Dabei helfen gute Namen ungemein. Auch wenn es schwer
|
sein.''}. Dabei helfen gute Namen ungemein. Auch wenn es schwer
|
||||||
f\"allt passende und nicht zu lange Namen zu finden, sollte einer gute
|
f\"allt passende und trotzdem nicht zu lange Namen zu finden, sollte
|
||||||
Namensgebung ernst genommen werden.
|
einer gute Namensgebung sehr ernst genommen werden.
|
||||||
|
|
||||||
W\"ahrend die Namen von Funktionen und Skripten ihren Zweck
|
W\"ahrend die Namen von Funktionen und Skripten ihren Zweck
|
||||||
beschreiben, sollten die Namen von Variablen ihren Inhalt
|
beschreiben, sollten die Namen von Variablen ihren Inhalt
|
||||||
@ -278,14 +279,17 @@ ein v\"ollig unn\"otiger Kommentar.
|
|||||||
Bei allen vordefinierten \matlab{} Funktionen findet sich am Anfang
|
Bei allen vordefinierten \matlab{} Funktionen findet sich am Anfang
|
||||||
eine Kommentarblock, der den Zweck der Funktion, die verschiedenen
|
eine Kommentarblock, der den Zweck der Funktion, die verschiedenen
|
||||||
M\"oglichkeiten des Funktionsaufrufs und die Argumente und
|
M\"oglichkeiten des Funktionsaufrufs und die Argumente und
|
||||||
R\"uckgabewerte beschreibt. Auch in eingenen Funktionen sind diese
|
R\"uckgabewerte beschreibt. Mit dem \code{help}- Befehl wird dieser
|
||||||
Kommentare sehr hilfreich. Siehe Listing~\ref{localfunctions} f\"ur
|
Kommentarblock angezeigt. Auch in eigenen Funktionen sind
|
||||||
ein Beispiel einer gut Dokumentierten Funktion.
|
diese Kommentare sehr wichtig. Siehe Listing~\ref{localfunctions}
|
||||||
|
f\"ur ein Beispiel einer gut dokumentierten Funktion.
|
||||||
|
|
||||||
\begin{important}[Dokumentation von Funktionen]
|
\begin{important}[Dokumentation von Funktionen]
|
||||||
Funktionen m\"ussen unbedingt kommentiert werde!
|
Funktionen m\"ussen unbedingt kommentiert werde!
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item In wenigen Zeilen kurz den Zweck der Funktion beschreiben.
|
\item In wenigen Zeilen kurz den Zweck der Funktion beschreiben.
|
||||||
|
\item Den Funktionskopf nocheinmal hinschreiben, damit
|
||||||
|
klar ist, in welcher Reihenfolge Argumente \"ubergeben werden.
|
||||||
\item F\"ur jedes Funktionsargument die Bedeutung, der erwartete
|
\item F\"ur jedes Funktionsargument die Bedeutung, der erwartete
|
||||||
Datentyp (Zahl, Vektor, Matrix, etc.), und eventuell die Einheit,
|
Datentyp (Zahl, Vektor, Matrix, etc.), und eventuell die Einheit,
|
||||||
in der die Zahlen erwartet werden (z.B. Sekunden).
|
in der die Zahlen erwartet werden (z.B. Sekunden).
|
||||||
@ -333,7 +337,7 @@ lokale Funktion.
|
|||||||
|
|
||||||
\pagebreak[3]
|
\pagebreak[3]
|
||||||
\lstinputlisting[label=localfunctions, caption={Beispiel f\"ur den
|
\lstinputlisting[label=localfunctions, caption={Beispiel f\"ur den
|
||||||
Einsatz von lokalen Funktionen.}]{calculate_sines.m}
|
Einsatz von lokalen Funktionen.}]{calculateSines.m}
|
||||||
|
|
||||||
Lokale Funktionen existieren in der gleichen Datei und sind nur dort
|
Lokale Funktionen existieren in der gleichen Datei und sind nur dort
|
||||||
verf\"ugbar. Jede Funktion hat ihren eigenen G\"ultigkeitsbereich, das
|
verf\"ugbar. Jede Funktion hat ihren eigenen G\"ultigkeitsbereich, das
|
||||||
@ -415,6 +419,6 @@ werden. Wenn diese nicht von globalem Interesse sind, kann mit
|
|||||||
Funktionen} die \"Ubersichtlichkeit erh\"oht werden.
|
Funktionen} die \"Ubersichtlichkeit erh\"oht werden.
|
||||||
|
|
||||||
\noindent Es lohnt sich auf den eigenen Programmierstil zu
|
\noindent Es lohnt sich auf den eigenen Programmierstil zu
|
||||||
achten!\footnote{Literatur zum Programmierstil: z.B. Robert C. Martin:
|
achten!\footnote{Buchtip: Robert C. Martin:
|
||||||
\textit{Clean Code: A Handbook of Agile Software Craftmanship},
|
\textit{Clean Code: A Handbook of Agile Software Craftmanship},
|
||||||
Prentice Hall}
|
Prentice Hall}
|
||||||
|
@ -1,32 +1,12 @@
|
|||||||
BASENAME=regression
|
BASENAME=regression
|
||||||
|
|
||||||
PYFILES=$(wildcard *.py)
|
|
||||||
PYPDFFILES=$(PYFILES:.py=.pdf)
|
|
||||||
|
|
||||||
all : pdf
|
all : pdf
|
||||||
|
|
||||||
# script:
|
include ../../chapter.mk
|
||||||
pdf : $(BASENAME)-chapter.pdf
|
|
||||||
|
|
||||||
$(BASENAME)-chapter.pdf : $(BASENAME)-chapter.tex $(BASENAME).tex $(PYPDFFILES)
|
|
||||||
CHAPTER=$$(( $$(sed -n -e '/contentsline {chapter}/{s/.*numberline {\([0123456789]*\)}.*/\1/; p}' $(BASENAME).aux) - 1 )); \
|
|
||||||
PAGE=$$(sed -n -e '/contentsline {chapter}/{s/.*numberline {.*}.*}{\(.*\)}{chapter.*/\1/; p}' $(BASENAME).aux); \
|
|
||||||
sed -i -e "s/setcounter{page}{.*}/setcounter{page}{$$PAGE}/; s/setcounter{chapter}{.*}/setcounter{chapter}{$$CHAPTER}/" $(BASENAME)-chapter.tex
|
|
||||||
pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true
|
|
||||||
|
|
||||||
$(PYPDFFILES) : %.pdf : %.py
|
|
||||||
python $<
|
|
||||||
|
|
||||||
clean :
|
# script:
|
||||||
rm -f *~
|
pdf : chapter
|
||||||
rm -f $(BASENAME).aux $(BASENAME).log
|
|
||||||
rm -f $(BASENAME)-chapter.aux $(BASENAME)-chapter.log $(BASENAME)-chapter.out
|
|
||||||
rm -f $(PYPDFFILES) $(GPTTEXFILES)
|
|
||||||
|
|
||||||
cleanall : clean
|
|
||||||
rm -f $(BASENAME)-chapter.pdf
|
|
||||||
|
|
||||||
watchpdf :
|
|
||||||
while true; do ! make -q pdf && make pdf; sleep 0.5; done
|
|
||||||
|
|
||||||
|
clean : cleanchapter
|
||||||
|
|
||||||
|
cleanall : clean cleanchapter
|
||||||
|
@ -5,8 +5,10 @@
|
|||||||
\lstset{inputpath=../code}
|
\lstset{inputpath=../code}
|
||||||
\graphicspath{{figures/}}
|
\graphicspath{{figures/}}
|
||||||
|
|
||||||
\setcounter{page}{77}
|
\typein[\pagenumber]{Number of first page}
|
||||||
\setcounter{chapter}{5}
|
\typein[\chapternumber]{Chapter number}
|
||||||
|
\setcounter{page}{\pagenumber}
|
||||||
|
\setcounter{chapter}{\chapternumber}
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
@ -1,32 +1,12 @@
|
|||||||
BASENAME=statistics
|
BASENAME=statistics
|
||||||
|
|
||||||
PYFILES=$(wildcard *.py)
|
|
||||||
PYPDFFILES=$(PYFILES:.py=.pdf)
|
|
||||||
|
|
||||||
all : pdf
|
all : pdf
|
||||||
|
|
||||||
# script:
|
include ../../chapter.mk
|
||||||
pdf : $(BASENAME)-chapter.pdf
|
|
||||||
|
|
||||||
$(BASENAME)-chapter.pdf : $(BASENAME)-chapter.tex $(BASENAME).tex $(PYPDFFILES) ../../header.tex
|
|
||||||
CHAPTER=$$(( $$(sed -n -e '/contentsline {chapter}/{s/.*numberline {\([0123456789]*\)}.*/\1/; p}' $(BASENAME).aux) - 1 )); \
|
|
||||||
PAGE=$$(sed -n -e '/contentsline {chapter}/{s/.*numberline {.*}.*}{\(.*\)}{chapter.*/\1/; p}' $(BASENAME).aux); \
|
|
||||||
sed -i -e "s/setcounter{page}{.*}/setcounter{page}{$$PAGE}/; s/setcounter{chapter}{.*}/setcounter{chapter}{$$CHAPTER}/" $(BASENAME)-chapter.tex
|
|
||||||
pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true
|
|
||||||
|
|
||||||
$(PYPDFFILES) : %.pdf : %.py
|
|
||||||
python $<
|
|
||||||
|
|
||||||
clean :
|
# script:
|
||||||
rm -f *~
|
pdf : chapter
|
||||||
rm -f $(BASENAME).aux $(BASENAME).log
|
|
||||||
rm -f $(BASENAME)-chapter.aux $(BASENAME)-chapter.log $(BASENAME)-chapter.out
|
|
||||||
rm -f $(PYPDFFILES) $(GPTTEXFILES)
|
|
||||||
|
|
||||||
cleanall : clean
|
|
||||||
rm -f $(BASENAME)-chapter.pdf
|
|
||||||
|
|
||||||
watchpdf :
|
|
||||||
while true; do ! make -q pdf && make pdf; sleep 0.5; done
|
|
||||||
|
|
||||||
|
clean : cleanchapter
|
||||||
|
|
||||||
|
cleanall : clean cleanchapter
|
||||||
|
@ -5,8 +5,10 @@
|
|||||||
\lstset{inputpath=../code}
|
\lstset{inputpath=../code}
|
||||||
\graphicspath{{figures/}}
|
\graphicspath{{figures/}}
|
||||||
|
|
||||||
\setcounter{page}{57}
|
\typein[\pagenumber]{Number of first page}
|
||||||
\setcounter{chapter}{3}
|
\typein[\chapternumber]{Chapter number}
|
||||||
|
\setcounter{page}{\pagenumber}
|
||||||
|
\setcounter{chapter}{\chapternumber}
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
Reference in New Issue
Block a user