docrev 0.9.13 → 0.9.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +9 -9
- package/.gitattributes +1 -1
- package/CHANGELOG.md +149 -149
- package/PLAN-tables-and-postprocess.md +850 -850
- package/README.md +391 -391
- package/bin/rev.js +11 -11
- package/bin/rev.ts +145 -145
- package/completions/rev.bash +127 -127
- package/completions/rev.ps1 +210 -210
- package/completions/rev.zsh +207 -207
- package/dev_notes/stress2/build_adversarial.ts +186 -186
- package/dev_notes/stress2/drift_matcher.ts +62 -62
- package/dev_notes/stress2/probe_anchors.ts +35 -35
- package/dev_notes/stress2/project/discussion.before.md +3 -3
- package/dev_notes/stress2/project/discussion.md +3 -3
- package/dev_notes/stress2/project/methods.before.md +20 -20
- package/dev_notes/stress2/project/methods.md +20 -20
- package/dev_notes/stress2/project/rev.yaml +5 -5
- package/dev_notes/stress2/project/sections.yaml +4 -4
- package/dev_notes/stress2/sections.yaml +5 -5
- package/dev_notes/stress2/trace_placement.ts +50 -50
- package/dev_notes/stresstest_boundaries.ts +27 -27
- package/dev_notes/stresstest_drift_apply.ts +43 -43
- package/dev_notes/stresstest_drift_compare.ts +43 -43
- package/dev_notes/stresstest_drift_v2.ts +54 -54
- package/dev_notes/stresstest_inspect.ts +54 -54
- package/dev_notes/stresstest_pstyle.ts +55 -55
- package/dev_notes/stresstest_section_debug.ts +23 -23
- package/dev_notes/stresstest_split.ts +70 -70
- package/dev_notes/stresstest_trace.ts +19 -19
- package/dev_notes/stresstest_verify_no_overwrite.ts +40 -40
- package/dist/lib/build.d.ts +38 -1
- package/dist/lib/build.d.ts.map +1 -1
- package/dist/lib/build.js +68 -30
- package/dist/lib/build.js.map +1 -1
- package/dist/lib/commands/build.d.ts.map +1 -1
- package/dist/lib/commands/build.js +38 -5
- package/dist/lib/commands/build.js.map +1 -1
- package/dist/lib/commands/utilities.js +164 -164
- package/dist/lib/commands/word-tools.js +8 -8
- package/dist/lib/grammar.js +3 -3
- package/dist/lib/pdf-comments.js +44 -44
- package/dist/lib/plugins.js +57 -57
- package/dist/lib/pptx-themes.js +115 -115
- package/dist/lib/spelling.js +2 -2
- package/dist/lib/templates.js +387 -387
- package/dist/lib/themes.js +51 -51
- package/eslint.config.js +27 -27
- package/lib/anchor-match.ts +276 -276
- package/lib/annotations.ts +644 -644
- package/lib/build.ts +1300 -1251
- package/lib/citations.ts +160 -160
- package/lib/commands/build.ts +833 -801
- package/lib/commands/citations.ts +515 -515
- package/lib/commands/comments.ts +1050 -1050
- package/lib/commands/context.ts +174 -174
- package/lib/commands/core.ts +309 -309
- package/lib/commands/doi.ts +435 -435
- package/lib/commands/file-ops.ts +372 -372
- package/lib/commands/history.ts +320 -320
- package/lib/commands/index.ts +87 -87
- package/lib/commands/init.ts +259 -259
- package/lib/commands/merge-resolve.ts +378 -378
- package/lib/commands/preview.ts +178 -178
- package/lib/commands/project-info.ts +244 -244
- package/lib/commands/quality.ts +517 -517
- package/lib/commands/response.ts +454 -454
- package/lib/commands/section-boundaries.ts +82 -82
- package/lib/commands/sections.ts +451 -451
- package/lib/commands/sync.ts +706 -706
- package/lib/commands/text-ops.ts +449 -449
- package/lib/commands/utilities.ts +448 -448
- package/lib/commands/verify-anchors.ts +272 -272
- package/lib/commands/word-tools.ts +340 -340
- package/lib/comment-realign.ts +517 -517
- package/lib/config.ts +84 -84
- package/lib/crossref.ts +781 -781
- package/lib/csl.ts +191 -191
- package/lib/dependencies.ts +98 -98
- package/lib/diff-engine.ts +465 -465
- package/lib/doi-cache.ts +115 -115
- package/lib/doi.ts +897 -897
- package/lib/equations.ts +506 -506
- package/lib/errors.ts +346 -346
- package/lib/format.ts +541 -541
- package/lib/git.ts +326 -326
- package/lib/grammar.ts +303 -303
- package/lib/image-registry.ts +180 -180
- package/lib/import.ts +911 -911
- package/lib/journals.ts +543 -543
- package/lib/merge.ts +633 -633
- package/lib/orcid.ts +144 -144
- package/lib/pdf-comments.ts +263 -263
- package/lib/pdf-import.ts +524 -524
- package/lib/plugins.ts +362 -362
- package/lib/postprocess.ts +188 -188
- package/lib/pptx-color-filter.lua +37 -37
- package/lib/pptx-template.ts +469 -469
- package/lib/pptx-themes.ts +483 -483
- package/lib/protect-restore.ts +520 -520
- package/lib/rate-limiter.ts +94 -94
- package/lib/response.ts +197 -197
- package/lib/restore-references.ts +240 -240
- package/lib/review.ts +327 -327
- package/lib/schema.ts +417 -417
- package/lib/scientific-words.ts +73 -73
- package/lib/sections.ts +335 -335
- package/lib/slides.ts +756 -756
- package/lib/spelling.ts +334 -334
- package/lib/templates.ts +526 -526
- package/lib/themes.ts +742 -742
- package/lib/trackchanges.ts +247 -247
- package/lib/tui.ts +450 -450
- package/lib/types.ts +550 -550
- package/lib/undo.ts +250 -250
- package/lib/utils.ts +69 -69
- package/lib/variables.ts +179 -179
- package/lib/word-extraction.ts +806 -806
- package/lib/word.ts +643 -643
- package/lib/wordcomments.ts +817 -817
- package/package.json +137 -137
- package/scripts/postbuild.js +28 -28
- package/skill/REFERENCE.md +431 -431
- package/skill/SKILL.md +258 -258
- package/tsconfig.json +26 -26
- package/types/index.d.ts +525 -525
package/lib/templates.ts
CHANGED
|
@@ -1,526 +1,526 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Built-in templates for project scaffolding
|
|
3
|
-
*
|
|
4
|
-
* Used by `rev new` command to create new paper projects
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
interface TemplateDefinition {
|
|
8
|
-
name: string;
|
|
9
|
-
description: string;
|
|
10
|
-
files: Record<string, string>;
|
|
11
|
-
directories: string[];
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export const TEMPLATES: Record<string, TemplateDefinition> = {
|
|
15
|
-
/**
|
|
16
|
-
* Standard academic paper structure
|
|
17
|
-
*/
|
|
18
|
-
paper: {
|
|
19
|
-
name: 'Academic Paper',
|
|
20
|
-
description: 'Standard paper with introduction, methods, results, discussion',
|
|
21
|
-
files: {
|
|
22
|
-
'rev.yaml': `# Paper configuration
|
|
23
|
-
title: "Your Paper Title"
|
|
24
|
-
authors:
|
|
25
|
-
- name: First Author
|
|
26
|
-
affiliation: Institution
|
|
27
|
-
email: author@example.com
|
|
28
|
-
|
|
29
|
-
# Section files in order
|
|
30
|
-
sections:
|
|
31
|
-
- introduction.md
|
|
32
|
-
- methods.md
|
|
33
|
-
- results.md
|
|
34
|
-
- discussion.md
|
|
35
|
-
|
|
36
|
-
# Bibliography (optional)
|
|
37
|
-
bibliography: references.bib
|
|
38
|
-
csl: null # uses default CSL
|
|
39
|
-
|
|
40
|
-
# Cross-reference settings
|
|
41
|
-
crossref:
|
|
42
|
-
figureTitle: Figure
|
|
43
|
-
tableTitle: Table
|
|
44
|
-
figPrefix: [Fig., Figs.]
|
|
45
|
-
tblPrefix: [Table, Tables]
|
|
46
|
-
linkReferences: true
|
|
47
|
-
|
|
48
|
-
# PDF output settings
|
|
49
|
-
pdf:
|
|
50
|
-
documentclass: article
|
|
51
|
-
fontsize: 12pt
|
|
52
|
-
geometry: margin=1in
|
|
53
|
-
linestretch: 1.5
|
|
54
|
-
numbersections: false
|
|
55
|
-
|
|
56
|
-
# Word output settings
|
|
57
|
-
docx:
|
|
58
|
-
reference: null # path to reference.docx template
|
|
59
|
-
keepComments: true
|
|
60
|
-
`,
|
|
61
|
-
'introduction.md': `# Introduction
|
|
62
|
-
|
|
63
|
-
Your introduction goes here. Use dynamic figure references like @fig:example.
|
|
64
|
-
|
|
65
|
-
`,
|
|
66
|
-
'methods.md': `# Methods
|
|
67
|
-
|
|
68
|
-
## Study Design
|
|
69
|
-
|
|
70
|
-
Describe your methodology here.
|
|
71
|
-
|
|
72
|
-
## Data Analysis
|
|
73
|
-
|
|
74
|
-
Reference tables with @tbl:summary.
|
|
75
|
-
|
|
76
|
-
`,
|
|
77
|
-
'results.md': `# Results
|
|
78
|
-
|
|
79
|
-
Present your findings. See @fig:results for the main analysis.
|
|
80
|
-
|
|
81
|
-
{#fig:results}
|
|
82
|
-
|
|
83
|
-
`,
|
|
84
|
-
'discussion.md': `# Discussion
|
|
85
|
-
|
|
86
|
-
Interpret your results here.
|
|
87
|
-
|
|
88
|
-
## Conclusions
|
|
89
|
-
|
|
90
|
-
Summarize key findings.
|
|
91
|
-
|
|
92
|
-
`,
|
|
93
|
-
'references.bib': `@article{example2024,
|
|
94
|
-
author = {Author, A. and Coauthor, B.},
|
|
95
|
-
title = {An Example Paper Title},
|
|
96
|
-
journal = {Journal Name},
|
|
97
|
-
year = {2024},
|
|
98
|
-
volume = {1},
|
|
99
|
-
pages = {1--10}
|
|
100
|
-
}
|
|
101
|
-
`,
|
|
102
|
-
'.gitignore': `# Build outputs
|
|
103
|
-
*.pdf
|
|
104
|
-
*.docx
|
|
105
|
-
*.tex
|
|
106
|
-
paper.md
|
|
107
|
-
.paper-*.md
|
|
108
|
-
|
|
109
|
-
# System
|
|
110
|
-
.DS_Store
|
|
111
|
-
`,
|
|
112
|
-
},
|
|
113
|
-
directories: ['figures'],
|
|
114
|
-
},
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Minimal single-section document
|
|
118
|
-
*/
|
|
119
|
-
minimal: {
|
|
120
|
-
name: 'Minimal',
|
|
121
|
-
description: 'Single document with basic config',
|
|
122
|
-
files: {
|
|
123
|
-
'rev.yaml': `title: "Document Title"
|
|
124
|
-
authors: []
|
|
125
|
-
sections:
|
|
126
|
-
- content.md
|
|
127
|
-
`,
|
|
128
|
-
'content.md': `# Your Document
|
|
129
|
-
|
|
130
|
-
Write your content here.
|
|
131
|
-
|
|
132
|
-
`,
|
|
133
|
-
},
|
|
134
|
-
directories: [],
|
|
135
|
-
},
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* Thesis chapter structure
|
|
139
|
-
*/
|
|
140
|
-
thesis: {
|
|
141
|
-
name: 'Thesis Chapter',
|
|
142
|
-
description: 'Thesis-style with abstract, sections, appendix',
|
|
143
|
-
files: {
|
|
144
|
-
'rev.yaml': `title: "Chapter Title"
|
|
145
|
-
authors:
|
|
146
|
-
- name: Your Name
|
|
147
|
-
affiliation: University
|
|
148
|
-
|
|
149
|
-
sections:
|
|
150
|
-
- abstract.md
|
|
151
|
-
- introduction.md
|
|
152
|
-
- literature.md
|
|
153
|
-
- methods.md
|
|
154
|
-
- results.md
|
|
155
|
-
- discussion.md
|
|
156
|
-
- conclusion.md
|
|
157
|
-
- appendix.md
|
|
158
|
-
|
|
159
|
-
bibliography: references.bib
|
|
160
|
-
|
|
161
|
-
pdf:
|
|
162
|
-
documentclass: report
|
|
163
|
-
fontsize: 11pt
|
|
164
|
-
geometry: "margin=1in"
|
|
165
|
-
linestretch: 2
|
|
166
|
-
numbersections: true
|
|
167
|
-
`,
|
|
168
|
-
'abstract.md': `# Abstract
|
|
169
|
-
|
|
170
|
-
Brief summary of the chapter (150-300 words).
|
|
171
|
-
|
|
172
|
-
`,
|
|
173
|
-
'introduction.md': `# Introduction
|
|
174
|
-
|
|
175
|
-
Background and research questions.
|
|
176
|
-
|
|
177
|
-
`,
|
|
178
|
-
'literature.md': `# Literature Review
|
|
179
|
-
|
|
180
|
-
Review of relevant prior work.
|
|
181
|
-
|
|
182
|
-
`,
|
|
183
|
-
'methods.md': `# Materials and Methods
|
|
184
|
-
|
|
185
|
-
Detailed methodology.
|
|
186
|
-
|
|
187
|
-
`,
|
|
188
|
-
'results.md': `# Results
|
|
189
|
-
|
|
190
|
-
Findings and analysis.
|
|
191
|
-
|
|
192
|
-
`,
|
|
193
|
-
'discussion.md': `# Discussion
|
|
194
|
-
|
|
195
|
-
Interpretation of results.
|
|
196
|
-
|
|
197
|
-
`,
|
|
198
|
-
'conclusion.md': `# Conclusion
|
|
199
|
-
|
|
200
|
-
Summary and implications.
|
|
201
|
-
|
|
202
|
-
`,
|
|
203
|
-
'appendix.md': `# Appendix
|
|
204
|
-
|
|
205
|
-
## Supplementary Materials
|
|
206
|
-
|
|
207
|
-
Additional details here.
|
|
208
|
-
|
|
209
|
-
`,
|
|
210
|
-
'references.bib': ``,
|
|
211
|
-
'.gitignore': `*.pdf
|
|
212
|
-
*.docx
|
|
213
|
-
*.tex
|
|
214
|
-
paper.md
|
|
215
|
-
.paper-*.md
|
|
216
|
-
.DS_Store
|
|
217
|
-
`,
|
|
218
|
-
},
|
|
219
|
-
directories: ['figures', 'tables'],
|
|
220
|
-
},
|
|
221
|
-
|
|
222
|
-
/**
|
|
223
|
-
* LaTeX-focused project with direct .tex output
|
|
224
|
-
*/
|
|
225
|
-
latex: {
|
|
226
|
-
name: 'LaTeX Project',
|
|
227
|
-
description: 'LaTeX-native with journal template support',
|
|
228
|
-
files: {
|
|
229
|
-
'rev.yaml': `# LaTeX Paper Configuration
|
|
230
|
-
title: "Paper Title"
|
|
231
|
-
authors:
|
|
232
|
-
- name: First Author
|
|
233
|
-
affiliation: University
|
|
234
|
-
email: author@example.edu
|
|
235
|
-
orcid: 0000-0000-0000-0000
|
|
236
|
-
|
|
237
|
-
sections:
|
|
238
|
-
- introduction.md
|
|
239
|
-
- methods.md
|
|
240
|
-
- results.md
|
|
241
|
-
- discussion.md
|
|
242
|
-
|
|
243
|
-
bibliography: references.bib
|
|
244
|
-
csl: null
|
|
245
|
-
|
|
246
|
-
# LaTeX-specific settings
|
|
247
|
-
pdf:
|
|
248
|
-
documentclass: article
|
|
249
|
-
classoption: [11pt, a4paper]
|
|
250
|
-
fontsize: 11pt
|
|
251
|
-
geometry: "margin=2.5cm"
|
|
252
|
-
linestretch: 1.5
|
|
253
|
-
numbersections: true
|
|
254
|
-
header-includes: |
|
|
255
|
-
\\usepackage{amsmath}
|
|
256
|
-
\\usepackage{graphicx}
|
|
257
|
-
\\usepackage{booktabs}
|
|
258
|
-
\\usepackage{hyperref}
|
|
259
|
-
\\usepackage{natbib}
|
|
260
|
-
|
|
261
|
-
# TEX output settings
|
|
262
|
-
tex:
|
|
263
|
-
standalone: true
|
|
264
|
-
keep-tex: true
|
|
265
|
-
`,
|
|
266
|
-
'introduction.md': `# Introduction
|
|
267
|
-
|
|
268
|
-
Background and motivation.
|
|
269
|
-
|
|
270
|
-
## Objectives
|
|
271
|
-
|
|
272
|
-
State your research questions.
|
|
273
|
-
|
|
274
|
-
`,
|
|
275
|
-
'methods.md': `# Materials and Methods
|
|
276
|
-
|
|
277
|
-
## Study Area
|
|
278
|
-
|
|
279
|
-
Describe the study area or data sources.
|
|
280
|
-
|
|
281
|
-
## Statistical Analysis
|
|
282
|
-
|
|
283
|
-
All analyses were performed in R [@R2024].
|
|
284
|
-
|
|
285
|
-
`,
|
|
286
|
-
'results.md': `# Results
|
|
287
|
-
|
|
288
|
-
Main findings presented here.
|
|
289
|
-
|
|
290
|
-
{#fig:main width=100%}
|
|
291
|
-
|
|
292
|
-
See @fig:main for the main results.
|
|
293
|
-
|
|
294
|
-
| Variable | Value | SE |
|
|
295
|
-
|----------|-------|------|
|
|
296
|
-
| A | 1.23 | 0.05 |
|
|
297
|
-
| B | 4.56 | 0.12 |
|
|
298
|
-
|
|
299
|
-
: Summary statistics {#tbl:summary}
|
|
300
|
-
|
|
301
|
-
`,
|
|
302
|
-
'discussion.md': `# Discussion
|
|
303
|
-
|
|
304
|
-
Interpretation of findings.
|
|
305
|
-
|
|
306
|
-
## Limitations
|
|
307
|
-
|
|
308
|
-
Study limitations.
|
|
309
|
-
|
|
310
|
-
## Conclusions
|
|
311
|
-
|
|
312
|
-
Key takeaways.
|
|
313
|
-
|
|
314
|
-
`,
|
|
315
|
-
'references.bib': `@Manual{R2024,
|
|
316
|
-
title = {R: A Language and Environment for Statistical Computing},
|
|
317
|
-
author = {{R Core Team}},
|
|
318
|
-
organization = {R Foundation for Statistical Computing},
|
|
319
|
-
address = {Vienna, Austria},
|
|
320
|
-
year = {2024},
|
|
321
|
-
url = {https://www.R-project.org/}
|
|
322
|
-
}
|
|
323
|
-
`,
|
|
324
|
-
'.gitignore': `# Build outputs
|
|
325
|
-
*.pdf
|
|
326
|
-
*.docx
|
|
327
|
-
paper.md
|
|
328
|
-
.paper-*.md
|
|
329
|
-
|
|
330
|
-
# Keep .tex for version control
|
|
331
|
-
# *.tex
|
|
332
|
-
|
|
333
|
-
# LaTeX auxiliary files
|
|
334
|
-
*.aux
|
|
335
|
-
*.bbl
|
|
336
|
-
*.blg
|
|
337
|
-
*.log
|
|
338
|
-
*.out
|
|
339
|
-
*.toc
|
|
340
|
-
*.fdb_latexmk
|
|
341
|
-
*.fls
|
|
342
|
-
*.synctex.gz
|
|
343
|
-
|
|
344
|
-
# System
|
|
345
|
-
.DS_Store
|
|
346
|
-
`,
|
|
347
|
-
},
|
|
348
|
-
directories: ['figures', 'tables'],
|
|
349
|
-
},
|
|
350
|
-
|
|
351
|
-
/**
|
|
352
|
-
* Review article structure
|
|
353
|
-
*/
|
|
354
|
-
review: {
|
|
355
|
-
name: 'Review Article',
|
|
356
|
-
description: 'Literature review or synthesis paper',
|
|
357
|
-
files: {
|
|
358
|
-
'rev.yaml': `title: "Review Title"
|
|
359
|
-
authors:
|
|
360
|
-
- name: Author Name
|
|
361
|
-
affiliation: Institution
|
|
362
|
-
|
|
363
|
-
sections:
|
|
364
|
-
- introduction.md
|
|
365
|
-
- section1.md
|
|
366
|
-
- section2.md
|
|
367
|
-
- section3.md
|
|
368
|
-
- synthesis.md
|
|
369
|
-
- conclusion.md
|
|
370
|
-
|
|
371
|
-
bibliography: references.bib
|
|
372
|
-
|
|
373
|
-
crossref:
|
|
374
|
-
figureTitle: Figure
|
|
375
|
-
tableTitle: Table
|
|
376
|
-
figPrefix: [Fig., Figs.]
|
|
377
|
-
tblPrefix: [Table, Tables]
|
|
378
|
-
`,
|
|
379
|
-
'introduction.md': `# Introduction
|
|
380
|
-
|
|
381
|
-
Scope and objectives of the review.
|
|
382
|
-
|
|
383
|
-
`,
|
|
384
|
-
'section1.md': `# Theme One
|
|
385
|
-
|
|
386
|
-
First major theme or topic.
|
|
387
|
-
|
|
388
|
-
`,
|
|
389
|
-
'section2.md': `# Theme Two
|
|
390
|
-
|
|
391
|
-
Second major theme.
|
|
392
|
-
|
|
393
|
-
`,
|
|
394
|
-
'section3.md': `# Theme Three
|
|
395
|
-
|
|
396
|
-
Third major theme.
|
|
397
|
-
|
|
398
|
-
`,
|
|
399
|
-
'synthesis.md': `# Synthesis
|
|
400
|
-
|
|
401
|
-
Integration of themes and emerging patterns.
|
|
402
|
-
|
|
403
|
-
`,
|
|
404
|
-
'conclusion.md': `# Conclusion and Future Directions
|
|
405
|
-
|
|
406
|
-
Key takeaways and research gaps.
|
|
407
|
-
|
|
408
|
-
`,
|
|
409
|
-
'references.bib': ``,
|
|
410
|
-
'.gitignore': `*.pdf
|
|
411
|
-
*.docx
|
|
412
|
-
*.tex
|
|
413
|
-
paper.md
|
|
414
|
-
.paper-*.md
|
|
415
|
-
.DS_Store
|
|
416
|
-
`,
|
|
417
|
-
},
|
|
418
|
-
directories: ['figures'],
|
|
419
|
-
},
|
|
420
|
-
};
|
|
421
|
-
|
|
422
|
-
/**
|
|
423
|
-
* Get template by name
|
|
424
|
-
*/
|
|
425
|
-
export function getTemplate(name: string): TemplateDefinition | null {
|
|
426
|
-
return TEMPLATES[name.toLowerCase()] || null;
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
/**
|
|
430
|
-
* List available templates
|
|
431
|
-
*/
|
|
432
|
-
export function listTemplates(): Array<{ id: string; name: string; description: string }> {
|
|
433
|
-
return Object.entries(TEMPLATES).map(([id, template]) => ({
|
|
434
|
-
id,
|
|
435
|
-
name: template.name,
|
|
436
|
-
description: template.description,
|
|
437
|
-
}));
|
|
438
|
-
}
|
|
439
|
-
|
|
440
|
-
/**
|
|
441
|
-
* Convert string to title case for headers
|
|
442
|
-
*/
|
|
443
|
-
function titleCase(str: string): string {
|
|
444
|
-
return str
|
|
445
|
-
.split(/[-_\s]+/)
|
|
446
|
-
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
447
|
-
.join(' ');
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
/**
|
|
451
|
-
* Generate a custom template with specified sections
|
|
452
|
-
*/
|
|
453
|
-
export function generateCustomTemplate(
|
|
454
|
-
sections: string[],
|
|
455
|
-
baseTemplate?: TemplateDefinition
|
|
456
|
-
): TemplateDefinition {
|
|
457
|
-
const base = baseTemplate || TEMPLATES.paper;
|
|
458
|
-
const files: Record<string, string> = {};
|
|
459
|
-
|
|
460
|
-
// Generate rev.yaml with custom sections
|
|
461
|
-
const sectionsList = sections.map((s) => ` - ${s}.md`).join('\n');
|
|
462
|
-
files['rev.yaml'] = `# Paper configuration
|
|
463
|
-
title: "Your Paper Title"
|
|
464
|
-
authors:
|
|
465
|
-
- name: First Author
|
|
466
|
-
affiliation: Institution
|
|
467
|
-
email: author@example.com
|
|
468
|
-
|
|
469
|
-
# Section files in order
|
|
470
|
-
sections:
|
|
471
|
-
${sectionsList}
|
|
472
|
-
|
|
473
|
-
# Bibliography (optional)
|
|
474
|
-
bibliography: references.bib
|
|
475
|
-
csl: null # uses default CSL
|
|
476
|
-
|
|
477
|
-
# Cross-reference settings
|
|
478
|
-
crossref:
|
|
479
|
-
figureTitle: Figure
|
|
480
|
-
tableTitle: Table
|
|
481
|
-
figPrefix: [Fig., Figs.]
|
|
482
|
-
tblPrefix: [Table, Tables]
|
|
483
|
-
linkReferences: true
|
|
484
|
-
|
|
485
|
-
# PDF output settings
|
|
486
|
-
pdf:
|
|
487
|
-
documentclass: article
|
|
488
|
-
fontsize: 12pt
|
|
489
|
-
geometry: margin=1in
|
|
490
|
-
linestretch: 1.5
|
|
491
|
-
numbersections: false
|
|
492
|
-
|
|
493
|
-
# Word output settings
|
|
494
|
-
docx:
|
|
495
|
-
reference: null # path to reference.docx template
|
|
496
|
-
keepComments: true
|
|
497
|
-
`;
|
|
498
|
-
|
|
499
|
-
// Generate section files
|
|
500
|
-
for (const section of sections) {
|
|
501
|
-
const header = titleCase(section);
|
|
502
|
-
files[`${section}.md`] = `# ${header}
|
|
503
|
-
|
|
504
|
-
`;
|
|
505
|
-
}
|
|
506
|
-
|
|
507
|
-
// Add common files
|
|
508
|
-
files['references.bib'] = base.files['references.bib'] || '';
|
|
509
|
-
files['.gitignore'] = base.files['.gitignore'] || `# Build outputs
|
|
510
|
-
*.pdf
|
|
511
|
-
*.docx
|
|
512
|
-
*.tex
|
|
513
|
-
paper.md
|
|
514
|
-
.paper-*.md
|
|
515
|
-
|
|
516
|
-
# System
|
|
517
|
-
.DS_Store
|
|
518
|
-
`;
|
|
519
|
-
|
|
520
|
-
return {
|
|
521
|
-
name: 'Custom',
|
|
522
|
-
description: 'Custom sections',
|
|
523
|
-
files,
|
|
524
|
-
directories: base.directories || ['figures'],
|
|
525
|
-
};
|
|
526
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Built-in templates for project scaffolding
|
|
3
|
+
*
|
|
4
|
+
* Used by `rev new` command to create new paper projects
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
interface TemplateDefinition {
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
files: Record<string, string>;
|
|
11
|
+
directories: string[];
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const TEMPLATES: Record<string, TemplateDefinition> = {
|
|
15
|
+
/**
|
|
16
|
+
* Standard academic paper structure
|
|
17
|
+
*/
|
|
18
|
+
paper: {
|
|
19
|
+
name: 'Academic Paper',
|
|
20
|
+
description: 'Standard paper with introduction, methods, results, discussion',
|
|
21
|
+
files: {
|
|
22
|
+
'rev.yaml': `# Paper configuration
|
|
23
|
+
title: "Your Paper Title"
|
|
24
|
+
authors:
|
|
25
|
+
- name: First Author
|
|
26
|
+
affiliation: Institution
|
|
27
|
+
email: author@example.com
|
|
28
|
+
|
|
29
|
+
# Section files in order
|
|
30
|
+
sections:
|
|
31
|
+
- introduction.md
|
|
32
|
+
- methods.md
|
|
33
|
+
- results.md
|
|
34
|
+
- discussion.md
|
|
35
|
+
|
|
36
|
+
# Bibliography (optional)
|
|
37
|
+
bibliography: references.bib
|
|
38
|
+
csl: null # uses default CSL
|
|
39
|
+
|
|
40
|
+
# Cross-reference settings
|
|
41
|
+
crossref:
|
|
42
|
+
figureTitle: Figure
|
|
43
|
+
tableTitle: Table
|
|
44
|
+
figPrefix: [Fig., Figs.]
|
|
45
|
+
tblPrefix: [Table, Tables]
|
|
46
|
+
linkReferences: true
|
|
47
|
+
|
|
48
|
+
# PDF output settings
|
|
49
|
+
pdf:
|
|
50
|
+
documentclass: article
|
|
51
|
+
fontsize: 12pt
|
|
52
|
+
geometry: margin=1in
|
|
53
|
+
linestretch: 1.5
|
|
54
|
+
numbersections: false
|
|
55
|
+
|
|
56
|
+
# Word output settings
|
|
57
|
+
docx:
|
|
58
|
+
reference: null # path to reference.docx template
|
|
59
|
+
keepComments: true
|
|
60
|
+
`,
|
|
61
|
+
'introduction.md': `# Introduction
|
|
62
|
+
|
|
63
|
+
Your introduction goes here. Use dynamic figure references like @fig:example.
|
|
64
|
+
|
|
65
|
+
`,
|
|
66
|
+
'methods.md': `# Methods
|
|
67
|
+
|
|
68
|
+
## Study Design
|
|
69
|
+
|
|
70
|
+
Describe your methodology here.
|
|
71
|
+
|
|
72
|
+
## Data Analysis
|
|
73
|
+
|
|
74
|
+
Reference tables with @tbl:summary.
|
|
75
|
+
|
|
76
|
+
`,
|
|
77
|
+
'results.md': `# Results
|
|
78
|
+
|
|
79
|
+
Present your findings. See @fig:results for the main analysis.
|
|
80
|
+
|
|
81
|
+
{#fig:results}
|
|
82
|
+
|
|
83
|
+
`,
|
|
84
|
+
'discussion.md': `# Discussion
|
|
85
|
+
|
|
86
|
+
Interpret your results here.
|
|
87
|
+
|
|
88
|
+
## Conclusions
|
|
89
|
+
|
|
90
|
+
Summarize key findings.
|
|
91
|
+
|
|
92
|
+
`,
|
|
93
|
+
'references.bib': `@article{example2024,
|
|
94
|
+
author = {Author, A. and Coauthor, B.},
|
|
95
|
+
title = {An Example Paper Title},
|
|
96
|
+
journal = {Journal Name},
|
|
97
|
+
year = {2024},
|
|
98
|
+
volume = {1},
|
|
99
|
+
pages = {1--10}
|
|
100
|
+
}
|
|
101
|
+
`,
|
|
102
|
+
'.gitignore': `# Build outputs
|
|
103
|
+
*.pdf
|
|
104
|
+
*.docx
|
|
105
|
+
*.tex
|
|
106
|
+
paper.md
|
|
107
|
+
.paper-*.md
|
|
108
|
+
|
|
109
|
+
# System
|
|
110
|
+
.DS_Store
|
|
111
|
+
`,
|
|
112
|
+
},
|
|
113
|
+
directories: ['figures'],
|
|
114
|
+
},
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Minimal single-section document
|
|
118
|
+
*/
|
|
119
|
+
minimal: {
|
|
120
|
+
name: 'Minimal',
|
|
121
|
+
description: 'Single document with basic config',
|
|
122
|
+
files: {
|
|
123
|
+
'rev.yaml': `title: "Document Title"
|
|
124
|
+
authors: []
|
|
125
|
+
sections:
|
|
126
|
+
- content.md
|
|
127
|
+
`,
|
|
128
|
+
'content.md': `# Your Document
|
|
129
|
+
|
|
130
|
+
Write your content here.
|
|
131
|
+
|
|
132
|
+
`,
|
|
133
|
+
},
|
|
134
|
+
directories: [],
|
|
135
|
+
},
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Thesis chapter structure
|
|
139
|
+
*/
|
|
140
|
+
thesis: {
|
|
141
|
+
name: 'Thesis Chapter',
|
|
142
|
+
description: 'Thesis-style with abstract, sections, appendix',
|
|
143
|
+
files: {
|
|
144
|
+
'rev.yaml': `title: "Chapter Title"
|
|
145
|
+
authors:
|
|
146
|
+
- name: Your Name
|
|
147
|
+
affiliation: University
|
|
148
|
+
|
|
149
|
+
sections:
|
|
150
|
+
- abstract.md
|
|
151
|
+
- introduction.md
|
|
152
|
+
- literature.md
|
|
153
|
+
- methods.md
|
|
154
|
+
- results.md
|
|
155
|
+
- discussion.md
|
|
156
|
+
- conclusion.md
|
|
157
|
+
- appendix.md
|
|
158
|
+
|
|
159
|
+
bibliography: references.bib
|
|
160
|
+
|
|
161
|
+
pdf:
|
|
162
|
+
documentclass: report
|
|
163
|
+
fontsize: 11pt
|
|
164
|
+
geometry: "margin=1in"
|
|
165
|
+
linestretch: 2
|
|
166
|
+
numbersections: true
|
|
167
|
+
`,
|
|
168
|
+
'abstract.md': `# Abstract
|
|
169
|
+
|
|
170
|
+
Brief summary of the chapter (150-300 words).
|
|
171
|
+
|
|
172
|
+
`,
|
|
173
|
+
'introduction.md': `# Introduction
|
|
174
|
+
|
|
175
|
+
Background and research questions.
|
|
176
|
+
|
|
177
|
+
`,
|
|
178
|
+
'literature.md': `# Literature Review
|
|
179
|
+
|
|
180
|
+
Review of relevant prior work.
|
|
181
|
+
|
|
182
|
+
`,
|
|
183
|
+
'methods.md': `# Materials and Methods
|
|
184
|
+
|
|
185
|
+
Detailed methodology.
|
|
186
|
+
|
|
187
|
+
`,
|
|
188
|
+
'results.md': `# Results
|
|
189
|
+
|
|
190
|
+
Findings and analysis.
|
|
191
|
+
|
|
192
|
+
`,
|
|
193
|
+
'discussion.md': `# Discussion
|
|
194
|
+
|
|
195
|
+
Interpretation of results.
|
|
196
|
+
|
|
197
|
+
`,
|
|
198
|
+
'conclusion.md': `# Conclusion
|
|
199
|
+
|
|
200
|
+
Summary and implications.
|
|
201
|
+
|
|
202
|
+
`,
|
|
203
|
+
'appendix.md': `# Appendix
|
|
204
|
+
|
|
205
|
+
## Supplementary Materials
|
|
206
|
+
|
|
207
|
+
Additional details here.
|
|
208
|
+
|
|
209
|
+
`,
|
|
210
|
+
'references.bib': ``,
|
|
211
|
+
'.gitignore': `*.pdf
|
|
212
|
+
*.docx
|
|
213
|
+
*.tex
|
|
214
|
+
paper.md
|
|
215
|
+
.paper-*.md
|
|
216
|
+
.DS_Store
|
|
217
|
+
`,
|
|
218
|
+
},
|
|
219
|
+
directories: ['figures', 'tables'],
|
|
220
|
+
},
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* LaTeX-focused project with direct .tex output
|
|
224
|
+
*/
|
|
225
|
+
latex: {
|
|
226
|
+
name: 'LaTeX Project',
|
|
227
|
+
description: 'LaTeX-native with journal template support',
|
|
228
|
+
files: {
|
|
229
|
+
'rev.yaml': `# LaTeX Paper Configuration
|
|
230
|
+
title: "Paper Title"
|
|
231
|
+
authors:
|
|
232
|
+
- name: First Author
|
|
233
|
+
affiliation: University
|
|
234
|
+
email: author@example.edu
|
|
235
|
+
orcid: 0000-0000-0000-0000
|
|
236
|
+
|
|
237
|
+
sections:
|
|
238
|
+
- introduction.md
|
|
239
|
+
- methods.md
|
|
240
|
+
- results.md
|
|
241
|
+
- discussion.md
|
|
242
|
+
|
|
243
|
+
bibliography: references.bib
|
|
244
|
+
csl: null
|
|
245
|
+
|
|
246
|
+
# LaTeX-specific settings
|
|
247
|
+
pdf:
|
|
248
|
+
documentclass: article
|
|
249
|
+
classoption: [11pt, a4paper]
|
|
250
|
+
fontsize: 11pt
|
|
251
|
+
geometry: "margin=2.5cm"
|
|
252
|
+
linestretch: 1.5
|
|
253
|
+
numbersections: true
|
|
254
|
+
header-includes: |
|
|
255
|
+
\\usepackage{amsmath}
|
|
256
|
+
\\usepackage{graphicx}
|
|
257
|
+
\\usepackage{booktabs}
|
|
258
|
+
\\usepackage{hyperref}
|
|
259
|
+
\\usepackage{natbib}
|
|
260
|
+
|
|
261
|
+
# TEX output settings
|
|
262
|
+
tex:
|
|
263
|
+
standalone: true
|
|
264
|
+
keep-tex: true
|
|
265
|
+
`,
|
|
266
|
+
'introduction.md': `# Introduction
|
|
267
|
+
|
|
268
|
+
Background and motivation.
|
|
269
|
+
|
|
270
|
+
## Objectives
|
|
271
|
+
|
|
272
|
+
State your research questions.
|
|
273
|
+
|
|
274
|
+
`,
|
|
275
|
+
'methods.md': `# Materials and Methods
|
|
276
|
+
|
|
277
|
+
## Study Area
|
|
278
|
+
|
|
279
|
+
Describe the study area or data sources.
|
|
280
|
+
|
|
281
|
+
## Statistical Analysis
|
|
282
|
+
|
|
283
|
+
All analyses were performed in R [@R2024].
|
|
284
|
+
|
|
285
|
+
`,
|
|
286
|
+
'results.md': `# Results
|
|
287
|
+
|
|
288
|
+
Main findings presented here.
|
|
289
|
+
|
|
290
|
+
{#fig:main width=100%}
|
|
291
|
+
|
|
292
|
+
See @fig:main for the main results.
|
|
293
|
+
|
|
294
|
+
| Variable | Value | SE |
|
|
295
|
+
|----------|-------|------|
|
|
296
|
+
| A | 1.23 | 0.05 |
|
|
297
|
+
| B | 4.56 | 0.12 |
|
|
298
|
+
|
|
299
|
+
: Summary statistics {#tbl:summary}
|
|
300
|
+
|
|
301
|
+
`,
|
|
302
|
+
'discussion.md': `# Discussion
|
|
303
|
+
|
|
304
|
+
Interpretation of findings.
|
|
305
|
+
|
|
306
|
+
## Limitations
|
|
307
|
+
|
|
308
|
+
Study limitations.
|
|
309
|
+
|
|
310
|
+
## Conclusions
|
|
311
|
+
|
|
312
|
+
Key takeaways.
|
|
313
|
+
|
|
314
|
+
`,
|
|
315
|
+
'references.bib': `@Manual{R2024,
|
|
316
|
+
title = {R: A Language and Environment for Statistical Computing},
|
|
317
|
+
author = {{R Core Team}},
|
|
318
|
+
organization = {R Foundation for Statistical Computing},
|
|
319
|
+
address = {Vienna, Austria},
|
|
320
|
+
year = {2024},
|
|
321
|
+
url = {https://www.R-project.org/}
|
|
322
|
+
}
|
|
323
|
+
`,
|
|
324
|
+
'.gitignore': `# Build outputs
|
|
325
|
+
*.pdf
|
|
326
|
+
*.docx
|
|
327
|
+
paper.md
|
|
328
|
+
.paper-*.md
|
|
329
|
+
|
|
330
|
+
# Keep .tex for version control
|
|
331
|
+
# *.tex
|
|
332
|
+
|
|
333
|
+
# LaTeX auxiliary files
|
|
334
|
+
*.aux
|
|
335
|
+
*.bbl
|
|
336
|
+
*.blg
|
|
337
|
+
*.log
|
|
338
|
+
*.out
|
|
339
|
+
*.toc
|
|
340
|
+
*.fdb_latexmk
|
|
341
|
+
*.fls
|
|
342
|
+
*.synctex.gz
|
|
343
|
+
|
|
344
|
+
# System
|
|
345
|
+
.DS_Store
|
|
346
|
+
`,
|
|
347
|
+
},
|
|
348
|
+
directories: ['figures', 'tables'],
|
|
349
|
+
},
|
|
350
|
+
|
|
351
|
+
/**
|
|
352
|
+
* Review article structure
|
|
353
|
+
*/
|
|
354
|
+
review: {
|
|
355
|
+
name: 'Review Article',
|
|
356
|
+
description: 'Literature review or synthesis paper',
|
|
357
|
+
files: {
|
|
358
|
+
'rev.yaml': `title: "Review Title"
|
|
359
|
+
authors:
|
|
360
|
+
- name: Author Name
|
|
361
|
+
affiliation: Institution
|
|
362
|
+
|
|
363
|
+
sections:
|
|
364
|
+
- introduction.md
|
|
365
|
+
- section1.md
|
|
366
|
+
- section2.md
|
|
367
|
+
- section3.md
|
|
368
|
+
- synthesis.md
|
|
369
|
+
- conclusion.md
|
|
370
|
+
|
|
371
|
+
bibliography: references.bib
|
|
372
|
+
|
|
373
|
+
crossref:
|
|
374
|
+
figureTitle: Figure
|
|
375
|
+
tableTitle: Table
|
|
376
|
+
figPrefix: [Fig., Figs.]
|
|
377
|
+
tblPrefix: [Table, Tables]
|
|
378
|
+
`,
|
|
379
|
+
'introduction.md': `# Introduction
|
|
380
|
+
|
|
381
|
+
Scope and objectives of the review.
|
|
382
|
+
|
|
383
|
+
`,
|
|
384
|
+
'section1.md': `# Theme One
|
|
385
|
+
|
|
386
|
+
First major theme or topic.
|
|
387
|
+
|
|
388
|
+
`,
|
|
389
|
+
'section2.md': `# Theme Two
|
|
390
|
+
|
|
391
|
+
Second major theme.
|
|
392
|
+
|
|
393
|
+
`,
|
|
394
|
+
'section3.md': `# Theme Three
|
|
395
|
+
|
|
396
|
+
Third major theme.
|
|
397
|
+
|
|
398
|
+
`,
|
|
399
|
+
'synthesis.md': `# Synthesis
|
|
400
|
+
|
|
401
|
+
Integration of themes and emerging patterns.
|
|
402
|
+
|
|
403
|
+
`,
|
|
404
|
+
'conclusion.md': `# Conclusion and Future Directions
|
|
405
|
+
|
|
406
|
+
Key takeaways and research gaps.
|
|
407
|
+
|
|
408
|
+
`,
|
|
409
|
+
'references.bib': ``,
|
|
410
|
+
'.gitignore': `*.pdf
|
|
411
|
+
*.docx
|
|
412
|
+
*.tex
|
|
413
|
+
paper.md
|
|
414
|
+
.paper-*.md
|
|
415
|
+
.DS_Store
|
|
416
|
+
`,
|
|
417
|
+
},
|
|
418
|
+
directories: ['figures'],
|
|
419
|
+
},
|
|
420
|
+
};
|
|
421
|
+
|
|
422
|
+
/**
|
|
423
|
+
* Get template by name
|
|
424
|
+
*/
|
|
425
|
+
export function getTemplate(name: string): TemplateDefinition | null {
|
|
426
|
+
return TEMPLATES[name.toLowerCase()] || null;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
/**
|
|
430
|
+
* List available templates
|
|
431
|
+
*/
|
|
432
|
+
export function listTemplates(): Array<{ id: string; name: string; description: string }> {
|
|
433
|
+
return Object.entries(TEMPLATES).map(([id, template]) => ({
|
|
434
|
+
id,
|
|
435
|
+
name: template.name,
|
|
436
|
+
description: template.description,
|
|
437
|
+
}));
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
/**
|
|
441
|
+
* Convert string to title case for headers
|
|
442
|
+
*/
|
|
443
|
+
function titleCase(str: string): string {
|
|
444
|
+
return str
|
|
445
|
+
.split(/[-_\s]+/)
|
|
446
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
447
|
+
.join(' ');
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
/**
|
|
451
|
+
* Generate a custom template with specified sections
|
|
452
|
+
*/
|
|
453
|
+
export function generateCustomTemplate(
|
|
454
|
+
sections: string[],
|
|
455
|
+
baseTemplate?: TemplateDefinition
|
|
456
|
+
): TemplateDefinition {
|
|
457
|
+
const base = baseTemplate || TEMPLATES.paper;
|
|
458
|
+
const files: Record<string, string> = {};
|
|
459
|
+
|
|
460
|
+
// Generate rev.yaml with custom sections
|
|
461
|
+
const sectionsList = sections.map((s) => ` - ${s}.md`).join('\n');
|
|
462
|
+
files['rev.yaml'] = `# Paper configuration
|
|
463
|
+
title: "Your Paper Title"
|
|
464
|
+
authors:
|
|
465
|
+
- name: First Author
|
|
466
|
+
affiliation: Institution
|
|
467
|
+
email: author@example.com
|
|
468
|
+
|
|
469
|
+
# Section files in order
|
|
470
|
+
sections:
|
|
471
|
+
${sectionsList}
|
|
472
|
+
|
|
473
|
+
# Bibliography (optional)
|
|
474
|
+
bibliography: references.bib
|
|
475
|
+
csl: null # uses default CSL
|
|
476
|
+
|
|
477
|
+
# Cross-reference settings
|
|
478
|
+
crossref:
|
|
479
|
+
figureTitle: Figure
|
|
480
|
+
tableTitle: Table
|
|
481
|
+
figPrefix: [Fig., Figs.]
|
|
482
|
+
tblPrefix: [Table, Tables]
|
|
483
|
+
linkReferences: true
|
|
484
|
+
|
|
485
|
+
# PDF output settings
|
|
486
|
+
pdf:
|
|
487
|
+
documentclass: article
|
|
488
|
+
fontsize: 12pt
|
|
489
|
+
geometry: margin=1in
|
|
490
|
+
linestretch: 1.5
|
|
491
|
+
numbersections: false
|
|
492
|
+
|
|
493
|
+
# Word output settings
|
|
494
|
+
docx:
|
|
495
|
+
reference: null # path to reference.docx template
|
|
496
|
+
keepComments: true
|
|
497
|
+
`;
|
|
498
|
+
|
|
499
|
+
// Generate section files
|
|
500
|
+
for (const section of sections) {
|
|
501
|
+
const header = titleCase(section);
|
|
502
|
+
files[`${section}.md`] = `# ${header}
|
|
503
|
+
|
|
504
|
+
`;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
// Add common files
|
|
508
|
+
files['references.bib'] = base.files['references.bib'] || '';
|
|
509
|
+
files['.gitignore'] = base.files['.gitignore'] || `# Build outputs
|
|
510
|
+
*.pdf
|
|
511
|
+
*.docx
|
|
512
|
+
*.tex
|
|
513
|
+
paper.md
|
|
514
|
+
.paper-*.md
|
|
515
|
+
|
|
516
|
+
# System
|
|
517
|
+
.DS_Store
|
|
518
|
+
`;
|
|
519
|
+
|
|
520
|
+
return {
|
|
521
|
+
name: 'Custom',
|
|
522
|
+
description: 'Custom sections',
|
|
523
|
+
files,
|
|
524
|
+
directories: base.directories || ['figures'],
|
|
525
|
+
};
|
|
526
|
+
}
|