The document discusses how to present source code in presentations while preserving syntax highlighting. It recommends using a Ruby script that takes source code as input and outputs HTML code with syntax highlighting. This HTML code can then be copied and pasted into presentations. The script can be run from text editors like TextMate and Smultron by configuring a keyboard shortcut to call the script. This allows source code to be highlighted for presentations without losing formatting or needing to take screenshots.
1. Presenting Your Code
Ian Dees
http://texagon.blogspot.com
Hi, I'm Ian Dees, a software developer for a test equipment manufacturer near Portland, Ore.
Today, we're going to talk about freeing your source code from your text editor and getting it into
your presentations.
2. TextMate
http://www.macromates.com
Smultron
http://smultron.sf.net
The basic ideas will work on any platform, but the screenshots we're looking at today will primarily
be from two popular text editors for the Mac.
3. Let's say we're trying our hand at the great Computer Language Shootout with Ackermann's
Function. Here's what one solution looks like inside our text editor.
4. def ackermann(m, n)
$memo ||= {}
$memo[[m, n]] =
$memo[[m, n]] ? $memo[[m, n]] :
0 == m ?n+1 :
0 < m && 0 == n ? ackermann(m - 1, 1) :
ackermann(m - 1, ackermann(m, n - 1))
end
1.upto(8) {|n| puts ackermann(3, n)}
But if we do a Select All in our text editor and then copy and paste into our presentation, we lose all
the pretty syntax highlighting.
5. We could just take a screenshot from our text editor and paste it into the presentation as a graphic.
But that makes for large file sizes and blurry font sizes. And if we distribute our slides as PDFs,
readers won't be able to cut and paste our text.
Also, it's a pretty manual process.
6. pri
nt 1 ! ackermann.rb ! 2007-09-03 23:11 ! Ian Dees
def ackermann(m, n)
$memo ||= {}
$memo[[m, n]] =
$memo[[m, n]] ? $memo[[m, n]] :
0 == m ?n+1 :
0 < m && 0 == n ? ackermann(m - 1, 1) :
ackermann(m - 1, ackermann(m, n - 1))
end
1.upto(8) {|n| puts ackermann(3, n)}
If you're using Smultron as your editor, you can print to a PDF and then drag the PDF file into your
slide--assuming your slides have a white background.
7. But I prefer a bit more flexibility. Let's look at HTML for a potential solution. We could just submit
our code to Pastie, and then cut/paste the result into our presentation.
8. <span class=quot;rquot;>def</span>
<span class=quot;fuquot;>ackermann</span>(m, n)
.r { color:#080; font-weight:bold }
.fu { color:#06B; font-weight:bold }
And since Pastie's stylesheets are pretty simple, we could even tweak the colors before we put the
code into our presentation.
12. ⌘B
Now, you can configure your text editor to run the script. In Smultron, hit Cmd-B to bring up the
Commands window. Create a new command, bind it to a keystroke if you like, and fill in its
contents like this. You'll want to substitute the paths to where you keep your Ruby interpreter and
where you saved the script, of course.
13. Now, whenever you hit your chosen hotkey, Smultron generates the HTML and (if you've enabled it
in the script) launches your browser for easy cutting and pasting.
14. ⌘⌥R
The process is similar in TextMate. Just hit Cmd-Option-R to bring up the Filter Through
Command dialog, browse to where you saved the script, and select Show as HTML.
15. When you press Execute, TextMate brings up a new window with highlighted code that remembers
its colors...
16. def ackermann(m, n)
$memo ||= {}
$memo[[m, n]] =
$memo[[m, n]] ? $memo[[m, n]] :
0 == m ?n+1 :
0 < m && 0 == n ? ackermann(m - 1, 1) :
ackermann(m - 1, ackermann(m, n - 1))
end
1.upto(8) {|n| puts ackermann(3, n)}
...when you paste it into a slide, like this.
17. def ackermann(m, n)
$memo ||= {}
$memo[[m, n]] =
$memo[[m, n]] ? $memo[[m, n]] :
0 == m ?n+1 :
0 < m && 0 == n ? ackermann(m - 1, 1) :
ackermann(m - 1, ackermann(m, n - 1))
end
1.upto(8) {|n| puts ackermann(3, n)}
There will be a few minor dierences, of course. Punctuation, class names, and constants might be
colored a little dierently between your text editor and the resulting HTML. But with a little
tweaking, you can get pretty darn close.
18. ⌘⌃R
And in the specific case of TextMate, you can do even better than just quot;pretty darn close.quot; Run the
quot;TextMate Create HTML From Documentquot; command, which is bound to Cmd-Ctrl-R (as opposed
to Cmd-Opt-R) on my system. By default, that brings up the raw HTML tags in a new window, but
you can configure TextMate to actually render the HTML instead.
19. Presenting Your Code
Ian Dees
http://texagon.blogspot.com
And that's it. Thanks for your time.