# Some tutorials on formatting notebook for exporting to pdf

I love the way that Mathematica allows me to type in of formulas. It is really easy to type complicated expressions with shortcuts on the keyboard. It would be great if I could use Mathematica completely to publish my articles. The biggest reason I don't already do this is:

I can't find the proper tutorial for styling notebooks for PDF export. How is it possible to deal with page numbering, headers, footers, page breaks, or placing graphs in specific positions, instead of being limited to line by line text? Is this possible? I believe it is -- I'm fascinated with Mathematica's capabilities, but I don't yet have the skills to take advantage of all the features it offers.

If someone would write tutorial on styling notebooks, formatting, and exporting to PDF, I believe that it would be appreciated by many others. I have seen some texts where it's emphasized that they are written totally in Mathematica (and they are really styled well).

Thank you for any tips, ways of accomplishing these tasks and for sharing your experience.

-
Did you know you can export formulas to LaTeX? –  CHM Aug 14 '12 at 22:11
Yes I know that, and that's what I do. But I think if MMA have this options adjustable life would be much easier. Not to take formula by formula and import them in your designing software (InDesign, Quarkxpress...) –  balboa Aug 14 '12 at 22:18
Which Latex editor do you use? –  balboa Aug 14 '12 at 22:26
As for LaTeX, I also used Scientific Word (expensive) but upgrade costs eventually caused me to move to using Lyx (free, and very good indeed) - BTW it also runs on OS X. For "live" documents the best approach seems to be Wolfram's CDF. –  Stephen Luttrell Aug 14 '12 at 23:05
You may look around items under File menu -> Printing Settings. btw I use Kile for LaTeX editor, it feels like programming and has both Linux version and Windows version. –  Silvia Aug 15 '12 at 6:35

You can adjust page size, page number style, headers, footers, etc from items under File -> Printing Settings menu. Or you can programmatically modify them by manipulating Notebook's options: PrintingCopies, PrintingStartingPageNumber, PrintingPageRange, PageHeaderLines, PageFooterLines, PrintingOptions.

Note: It seems "PaperSize" and "PrintingMargins" are calculated using a DPI value of 72, which I guess is not the DPI of the monitor but that of the default printer.

Graphics, more generally, nearly any Cell expression, can be used in header and footer. One way is copy the entire Cell:

then paste into the Headers and Footers palette:

# A Simple Program Example

A sample Notebook(Sorry I didn't find a convenient place to store large texts..):

notebookStr = Uncompress["1:eJztWI1u2zYQ7jvsBTgBA5LN9fRrWd1QoE3qNkOcBLbRYbCMmZYYm4hCGhKVJf\
Xyjnuk3ZGyLdlp063dMAwlAkvi/fB4P9+R+XomB8M/vnry5EwqNpPyarw6Ylk2tkYLRkZUErWgiiRUkBkjKpdpygTh\
BRFSAYkRJtIy52JOqEhJKZIFFXP8BNE2QR2CXrOGEpxIP0YFMratFrFG7FZZkxYxhh0cSZEwfgNK5CWhxSFZ0BvNL7\
VIi3CF6lH1ec5BFVUyR94FozdgPS7DaK4WP5CD5D266J6qvoRfrYZmGcwAV7Fv3Ut5e0wVHcfxwSinKVdcCpr1ZH4d\
x1OYxL9nruu+jONfaRx/M4vjQ2LmLw9uD+Erjr+HD4d8h9Pz9ZxhetYL/SNya2bMHyxsHfNimdE7XKXM6Fl5PWM5S/\
dsep3T5YInBXyPT3mhxq/SOUMh8/WmZGO77dpBc0xbxGnDj90OupHvRB2v0/G8oNPpTmGBESi8EqwoQNS2O7YbBFHQ\
7dih7wWhjxzHtEBfmTX6LOXldYuY5wQtpEttgjWQpdA2/yS52Fpl9bliOfjZbQeBXR/edDJBDT2a7O3CifzGcLe7iP\
xuJ3RDJwg6vhd62sbzJU24ugNBT2ttkQuZ3c2l2LhK/9jtsOmdjta4Mxmhxorfs7tebfhGABzY3Y7IrQm4TnP4WsD3\
GiMIaxJBU8DVAl4zht2gJhBGoVsbZgWvqQXdov0wKDM2flEsWaIGFJJZ79cDDRDq9XO65oPCVEyoIcuAnc4yqJ9RXr\
I1+eSaztkFTVNIh8qayiRtQs3E6nvSkBzyd6zicJ0IeZyOi1wV00UmwUYxZ03dOwkdat1dpxaByK67x214x4lMiOtz\
rlczbbPqZmNnUjBNt07EsgRouG+Rn7lI5W+4A/L0OVmFod8iXTvcUPo0B5wqNHHldFvkRankNTg8AZbV5qNFwnuYuA\
C0VLDWkVxypoWc7eRQAbTB8wJcZqBghwEJ2mK9mudCKbWIfqBqIL5hNGV5ZYxGEIQ4DSGrobrLGFbFEZQrFCa+Wihk\
GX8cMwAilq7JPYBzhECo0upt3HsFhtxQxaZDhaiP5T624ng84lnKJqBnyzGShmc8BC+PHe3ULafJUGu7UUQPiyAm/2\
5Vb3ugDDupo/G3x3cA9DzBfYwk/LKiZuGgFAKWR6GxwfkWCUDzjwB7BTaGQmJzAwK5hBajWIEOJpUYQYnn2pJ2y6oS\
bGJqApIK3iBWIqV5ihbt5foRTRbrXHYcXRT63cO3SJfHpOoBk3vcuYlbtelGRkGATwR0L4DSFBNq81Gfv1/3i020P6\
mj/Y12ZuJZbePD1nzpZV962f+jl3VCZPGj/24nm3wYXGpgYn8AXJD0CLx8Mja/yDIwdZxX+LsBZrgFLBRZguMn/woc\
fyY0Rv/vouC2A7+lWalfrB7P2BlcV6wmfO60wve37t0u+kg3+diAV8eJnoSb5cPHiY1JJt7bHQ0XMgeWu2pXcUwe5O\
7ASu9QraxuT9a+8U7/75b0cpefac9HKI0CuRTgdwgBWQXyyn2SMO/YvpZfL0lAtzEl71aFZUYN1IwC2HKXjNVztMny\
/RaMNhQR+uTsqFhTNGBCKUG3din9aEU3apGgSzrYdkqoKqkfp0LvglT7AZCU1w2roUlyw/zzlEZEuxLiDfc8oR5gwH\
gpImreCYAqeE2oDLhe+0I/ceeXF/6OSXOU2umGpsSBP7Zab4MmNvZM7fQbxotrdxzTdgc6iOXNsEEbva5wCfVaE0hq\
18OOnAMasb+JVlcO9xwLTQc91ugNHtBm3bi7zQrtm+O3WPsV6n0lvAEswu9Em3bWt87/Mkl4W8VNV1qiAHHf/pjKtD\
cnCeKImXoA4cu2zHOVwj4TG75IJvYr7z7y/DsimrHWYLvil4rS1mUCVg3FtecDgjIK3Kv3/YXKtqg5pWLBjTnZMqDI\
Gx6k/bOjzu"];

nbcontent = notebookStr // ToExpression // InputForm;


Define a function for display the headers and footers setting:

Clear[HeaderFooterSettingView]
Function[hf,
Cases[nbcontent, (hf -> expr_) :> expr, \[Infinity]] //
If[# === {},
{{None, None, None}, {None, None, None}},
#[[1]]] & //
Column[{
Style[ToString[hf] <> " Settings:", 20],
Grid[Prepend[
Map[If[# === None,
Item[Spacer[20], Background -> LightBlue],
Style[InputForm@#, 8]] &, #, {2}]\[Transpose],
Item[#, Background -> LightYellow] & /@
{"Right page", "Left Page"}
]\[Transpose],
Dividers -> {
{False, Black, GrayLevel[.8], GrayLevel[.8]},
2 -> Directive[Black, Thick]}]
}] &] /@ {PageHeaders, PageFooters} //
Column[#, Frame -> All, FrameStyle -> GrayLevel[.8]] &



Here the light-blue cells indicate empty slots for headers/footers.

Now we insert a Graphics at the right corner footer of right pages:

nbcontentNew = nbcontent /.
(PageFooters -> expr_) :>
(PageFooters -> ReplacePart[expr,
{1, 3} ->
Cell[BoxData[ToBoxes[
Graphics[{Circle[], Inset[x^2 + y^2 == r^2, {0, 0}]},
Frame -> True, ImageSize -> 100]
]]]
]);

nbNew = nbcontentNew[[1]] // NotebookPut


NotebookPrint gave a terrible result on my computer, so I manually selected the virtual pdf printer from Print dialog in the File menu to print the generated Notebook:

-
Thank you Silvia, and now this is really useful. I don't get the Simple Program Example, but as I understand it's just way how to do upper part of answer, by code. Or is it? I mean the result is same or does this "code approach" add any new capabilities. (I'm asking this because I'm not MMA expert so it's not easy task for me to analyze this code, but if it's useful I certainly will). And once again thank you for your explanations. –  balboa Aug 15 '12 at 19:12
@balboa You're welcome:) Sorry for the unclearness in my post. Yes I tried to demonstrate how to do similar thing programmatically. I think sometimes it may feel more flexible and explicit than using the GUI. –  Silvia Aug 16 '12 at 5:06
@balboa In case you care about only how to specify the headers and footers, it's safe to skip the HeaderFooterSettingView function, concern only the code which converts nbcontent to nbcontentNew. –  Silvia Aug 16 '12 at 5:15

It is easier to create a notebook object and set options. For example, if I want a PDF with some plots and an equation and save it as a PDF in Landscape form (so its not cut off):

newbook = CreateDocument[{plot1, plot2, plot3, equations1}]

SetOptions[newbook,
PrintingOptions -> {"PaperOrientation" -> "Landscape"}]

Export[NotebookDirectory[] ~~ "myfile.pdf", newbook]


(The export command puts the new PDF in the same directory as the notebook with all theses commands.) You can get any number of notebook options by going to the "Format->option inspector" choose your notebook, find the option you want, change it, then view as text or do a

Options[newbook]


and see what option was added (and do a copy and paste)

Once you determine what options you want, you can programmatically set all aspects of the new notebook (Headers, Footers, etc.) and then save it as a PDF. I think this is the easiest approach to doing this.

-