Skip to content

Commit a4eeb83

Browse files
committed
enable writing to any file type, implement code-appendix-write
1 parent 7ab8160 commit a4eeb83

File tree

2 files changed

+50
-19
lines changed

2 files changed

+50
-19
lines changed

_extensions/code-appendix/code-appendix.lua

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ function CodeBlock(el)
1515
end
1616

1717
-- reads yaml to obtain desired header for code appendix
18-
-- writes appendix to txt file if desired
18+
-- writes appendix to file
1919
function Meta(m)
2020

2121
if m["code-appendix-title"] ~= nil then
@@ -30,19 +30,39 @@ function Meta(m)
3030
codeAppendixHeaderLevel = 1
3131
end
3232

33-
-- write appendix to text file
3433
if m["code-appendix-write"] ~= nil then
34+
codeAppendixWrite = m["code-appendix-write"]
35+
else
36+
codeAppendixWrite = true
37+
end
38+
39+
-- write appendix to file
40+
if m["code-appendix-file"] ~= nil then
41+
42+
codeAppendixFile = pandoc.utils.stringify(m["code-appendix-file"])
43+
codeAppendixExt = codeAppendixFile:match("%.[^.]+$")
3544

36-
codeAppendixWrite = pandoc.utils.stringify(m["code-appendix-write"])
45+
if codeAppendixExt == nil then
46+
codeAppendixExt = ".md"
47+
codeAppendixFile = codeAppendixFile .. codeAppendixExt
48+
end
3749

38-
if codeAppendixWrite == "true" then
39-
local f = io.open(pandoc.system.get_working_directory() .. '/code-appendix.txt', 'w')
40-
for index, value in ipairs(pandoc.List(appendix)) do
41-
f:write(pandoc.List(appendix)[index].text .. "\n\n")
50+
local f = io.open(pandoc.system.get_working_directory() .. "/" .. codeAppendixFile, 'w')
51+
52+
for index, value in ipairs(pandoc.List(appendix)) do
53+
if codeAppendixExt == ".md" or codeAppendixExt == ".qmd" then
54+
f:write(
55+
"```" .. "\n" .. pandoc.List(appendix)[index].text .. "\n" .. "```" .. "\n\n"
56+
)
57+
else
58+
f:write(
59+
pandoc.List(appendix)[index].text .. "\n\n"
60+
)
4261
end
43-
f:close()
4462
end
45-
63+
64+
f:close()
65+
4666
end
4767

4868
return m
@@ -51,10 +71,12 @@ end
5171

5272
-- append pandoc document with source code
5373
function Pandoc(doc)
54-
55-
appendixHeader = pandoc.Header(codeAppendixHeaderLevel, codeAppendixTitle)
56-
doc.blocks:extend(pandoc.List({appendixHeader}))
57-
doc.blocks:extend(pandoc.List(appendix))
74+
75+
if codeAppendixWrite then
76+
appendixHeader = pandoc.Header(codeAppendixHeaderLevel, codeAppendixTitle)
77+
doc.blocks:extend(pandoc.List({appendixHeader}))
78+
doc.blocks:extend(pandoc.List(appendix))
79+
end
5880

5981
return doc
6082

example.qmd

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
---
22
title: "Code-appendix Example"
3-
format: typst
3+
format: pdf
44
filters:
55
- code-appendix
66
code-appendix-title: "Source Code:"
77
code-appendix-header-level: 2
8-
code-appendix-write: false
8+
code-appendix-file: code-appendix.r
9+
code-appendix-write: true
910
---
1011

1112
This filter moves the source code generating the following text
@@ -16,17 +17,25 @@ to_end <- "move source code to an appendix please, thx"
1617
to_end
1718
```
1819

19-
as well as this plot
20+
as well as this table
2021

2122
```{r}
22-
plot(mtcars[,c("mpg", "cyl")])
23+
knitr::kable(data.frame(X = 1:3, Y = letters[1:3]))
2324
```
2425

2526

2627
to an appendix at the end of the document, (but keeps the output in its usual place).
2728
Force a page break in the `.qmd` to display appendix on separate page. Note that
2829
you can change the appendix header using the `code-appendix-title` and
29-
`code-appendix-header-level` options in the document YAML. Set
30-
`code-appendix-write: true` to print source code to a `txt` file.
30+
`code-appendix-header-level` options in the document YAML.
31+
32+
To write the source code to a file, set `code-appendix-file:` to a string pointing to
33+
the file you would like to write to. Include file paths (relative to `.qmd`) and
34+
file extensions (defaults to `.md`). In this example, `code-appendix-file: code-appendix.r`
35+
tells the filter to write the source code generating the above text and table
36+
to an executable `.r` file. The automatic creation of the appendix can be turned
37+
off with `code-appendix-write: false` if you would like to just write the source
38+
to a file.
3139

3240
{{< pagebreak >}}
41+

0 commit comments

Comments
 (0)