I need certain user defined functions over and over. I was wondering how can I define and where and how to save them such that each time I start a notebook, these functions are available and need not to be defined again.
1 Answer
Best place is to make a package. But if you do not feel like it, you can put the definitions in the init.m file
using init.m
see http://reference.wolfram.com/mathematica/ref/file/init.m.html for more information on using init.m
. From the above:
"Possible locations for init.m files include the following:"
$BaseDirectory/Kernel kernel initialization code for all users
$UserBaseDirectory/Kernel kernel initialization code for the currently logged-in user
$BaseDirectory/FrontEnd front end initialization code for all users
$UserBaseDirectory/FrontEnd front end initialization code for the currently logged-in user
When using init.m
you do not need to load anything, as init.m is read automatically if is is found when Mathematica starts.
Using a package
If you put the definitions in a package, say foo.m
and then you can load your package, like this
Get["c:\\mydata\\foo.m"]
or if the package is in one of the standard locations in the Mathematica $Path
you can write
Needs["foo`"]
whenever you need to use the functions.
To make a simple package, here is a note I wrote here it has more information.
See also this question here at how to install and use a package https://stackoverflow.com/questions/4641512/how-to-install-new-packages-for-mathematica
also WRI page on packages http://reference.wolfram.com/mathematica/tutorial/SettingUpMathematicaPackages.html
Autoloading packages
For advanced packages, you can make a package that will also load automatically when Mathematica starts. These has to go to a special location though, called AutoLoad
.
This link below is very useful to tell one where to put everything in Mathematica and talks more about this autoloading
http://reference.wolfram.com/mathematica/tutorial/MathematicaFileOrganization.html
-
$\begingroup$ Unforunately the last two hyperlinks became orphans. $\endgroup$ Feb 6, 2016 at 7:56
-
$\begingroup$ The last hyperlink may have been superseded by Wolfram System File Organization. The penultimate hyperlink may have been superseded by Setting Up Wolfram Language Packages $\endgroup$– LouisBJan 19, 2022 at 23:29