~~ODT~~ ====== fancy way to generate scale bars with Tikz ====== The way to display scale bars shown [[:latex#scale_bars|here]] is nice, but can be a bit cumbersome if the images are not that easy, e.g. the image shows a skewed sample in 3D. Everything shown below could also be done completely by hand, but it's quite a boring task to calculate multiple [[http://www.dict.cc/?s=dreisatz|rules of three]] for every image you want to add a scale bar. I've written a small MATLAB-script to facilitate the calculation and addition to LaTeX. You'll need: {{ :latex:tikz:scalebarimage.jpg?128|}} * an image you know the scale of and want to draw the scale bar on, e.g. the image shown on the right((it's an MRI of my head...)) * MATLAB with this m-file: {{:latex:tikz:scalebar.m|}} (or any other graphics-capable calculation program like [[http://www.gnu.org/software/octave/|Octave]]) * this minimal tex-file: {{:latex:tikz:scalebar.tex|}} (I suppose you have a running installation of LaTeX to work with this example...) Both files are explained in a bit more detail at the end of this page, for now I'll just walk you through: ===== WorkFlow ===== - Start MATLAB, load scalebar.m and start it. - The script prompts you to load an image, choose "scalebarimage.jpg" you've downloaded from above. - The script prompts you to define the length of the scale bar you're gonna draw in the next step, choose the default "21 cm" for now - The script displays the image of my head and asks you to define a start-point of the scale-bar, choose the tip of the nose - After that, choose the back of my head for the end of the scale-bar - Note the "Positions" shown in the help-dialog, these are to make sure you've clicked correctly and that the positions are correct. - copy the output in the command-line-section of MATLAB - paste this output into your .tex-file - if the .tex file and the image are in the same folder, just proceed, if not, change the path to the image! - compile the file - Figure 1 of the document should show * the exact same scale-bar you've drawn in MATLAB overlayed over the image. * a second scale bar which shows a reasonable length (5cm in our case){{ :latex:tikz:scalebarfigure.png?256 |}} - change \def\x{100} and \def\y{100} on lines 24 and 25 of the copied text to position the scale bar where you'd like to have it and uncomment line 29 to turn off the original scale bar. - enjoy typographically correct scale bars in the resulting {{:latex:tikz:scalebar.pdf|pdf}} (47 kB) ===== LaTeX-File ===== The preamble is nothing too fancy \documentclass{article} \usepackage{tikz} % used for actually drawing the scale bar \usepackage[ansinew]{inputenc} % is used so I can write my name without too much hassle \usepackage{siunitx} % excellent package to correctly typeset units \usepackage{hyperref} % used for URLs The block below is used to start the document and to set up the image \begin{document} \author{David Haberthür} \title{David Haberthür's Head - Scalebar} \date{\today} \maketitle \begin{figure}[h] \centering Inside here you'll copy the result from the MATLAB-skript, the rest ist just to finish off the document. \caption{Three dimensional visualization of David Haberthürs Head, released under a \href{http://creativecommons.org/licenses/by/2.0/deed.en_GB}{creative commons Attribution 2.0 Generic license} by the owner of the head.} \label{fig:head} \end{figure} \end{document} ===== MATLAB-File ===== The block below asks the user to select an image-file that is then subsequently used for calculations [ filename, pathname] = ... uigetfile({'*.jpg;*.tif;*.png;*.gif','All Image Files';... '*.*','All Files' },'Choose Input Image'); image=imread([pathname filesep filename]); The scale bar is defined by asking the user to click on the image for a start- and end-point. h = helpdlg('choose start-point of scale bar','ScaleBar'); uiwait(h); [ x1,y1 ] = ginput(1); the rest is just simple, but boring calculations and semi-nice output, which takes care of setting up the necessary lengths for TikZ. ===== References ===== TikZ: http://kogs-www.informatik.uni-hamburg.de/~meine/tikz/\\ MATLAB: http://blinkdagger.com/matlab/matlab-querying-the-user-for-input