{smcl} {* *! version 2.1.3}{...} {vieweralsosee "boilerplate" "help boilerplate"}{...} {vieweralsosee "mkproject" "help mkproject"}{...} {viewerjumpto "Syntax" "mkproject##syntax"}{...} {viewerjumpto "Description" "mkproject##description"}{...} {viewerjumpto "Example" "mkproject##example"}{...} {title:Title} {phang} {bf:mkproject, create} {hline 2} Create new templates for the {cmd:mkproject} command. {title:Description} {pstd}To create a new template you are going to create a text file with two parts:{p_end} {pmore}a part within the {cmd:<header>} and {cmd:</header>} tags containing meta-data, like a label, and{p_end} {pmore}a part within the {cmd:<body>} and {cmd:</body>} tags containing the actual steps you want {cmd:mkproject} to take when creating a new project.{p_end} {pstd} After creating that file you type in Stata {cmd:mkproject, create(}{it:that_text_file}{cmd:)}. Based on that text file {cmd:mkproject} will create the template, and the corresponding help file. {pstd} This template is going to be used at three times when {cmd:mkproject} makes a project folder: {pmore} First, {cmd:mkproject} creates the project folder, and any sub-folders specified in the template. It changes the current working directory to the project folder. {pmore} Second, {cmd:mkproject} creates any files specified in the template, using {help boilerplate}. {pmore} Third, {cmd:mkproject} executes any commands specified in the template. {pstd} So a template should tell {cmd:mkproject} what subdirectories it needs to create, what files it needs to create, and what commands it needs to execute. On top of that you can add various meta-data in the header. {pstd} Lets look at an example. Below is the template for {help mp_p_course:course}. You can look at the source code for any template by typing {cmd:mkproject, query}, click on any template you are interested in, that opens a help-file, and at the bottom there is a link that will show the source code for that template in the viewer. --------------- begin template ------------------- {cmd}{...} <header> <mkproject> project <version> 2.1.2 <label> Small research project as part of a course <reqs> dirtree <description> {c -(}pstd{c )-} This template is for a small research project that takes place over a short period of time that does not require snapshots. A typical example would be a project someone has to do for a course. </description> </header> <body> <dir> docu <dir> data <dir> ana <dir> txt <file> rlogc docu/research_log.md <file> main ana/<abbrev>_main.do <file> dta_c ana/<abbrev>_dta01.do <file> ana ana/<abbrev>_ana01.do <cmd> dirtree </body> {txt}{...} -------------- end template -------------------- {pstd} Lines between {cmd:<header>} and {cmd:</header>} contain meta-information, like the label for that template. {pstd} Within the header you can add five types of meta-data: {pmore} {cmd:<mkproject>} Indicates that this is a template, and the word after it can be either {cmd:project} or {cmd:boilerplate}, to indicate whether this is a {cmd:mkproject} or {cmd:boilerplate} template. You can specify it in your text file or if you don't specify it, {cmd:mkproject, create()} will add it for you. {pmore} {cmd:<version>} Indicates which version of {cmd:mkproject} is used to create this template. {cmd:mkproject} uses that information to ensure backwards compatability; if a new version of {cmd:mkproject} becomes available, you can install that without fearing that it will break your older templates. You can specify it yourself, or if you don't specify it, {cmd:mkproject, create()} will set it to the current version of {cmd:mkproject} {pmore} {cmd:<label>} gives the short description of your template, that will be shown with {cmd:mkproject, query} {pmore} {cmd:<reqs>} specifies a community contributed package that is required for this template. If any of the {cmd:boilerplate} templates used in the {cmd:<file>} tag have a requirement, then that will be automatically copied here by {cmd:mkproject, create()}. {pmore} The lines between {cmd:<description>} and {cmd:</description>} give a longer description of the template as it will appear in the help-fearing. It may contain {help smcl} tags. {pstd} Within the {cmd:<body>} and {cmd:</body>} tags is the actual template: {pstd} Lines starting with {cmd:<dir>} tell you what sub-directories that template will create {pstd} Lines starting with {cmd:<file>} have two elements, the first "word" is the name of the template that {help boilerplate} will use to create a file, and the second "word" is the filename. This filename can contain the tag {cmd:<abbrev>} which {cmd:mkproject} will replace with the {it:proj_abbrev} you will specify when using {cmd:mkproject} to create a project folder. {pstd} Lines starting with {cmd:<cmd>} tell you what commands {cmd:mkproject} will run after creating those directories and files {pstd} In practice, the easiest way to create a new template is usually to look for a template that is close to what you want, and copy and adapt the source of that template.