Skip to content

Commit 7fe856f

Browse files
authored
Allow all code blocks to span multiple pages. (#266)
Currently, code blocks with classes are rendered with the Shaded environment, which disables page breaking. This change redefines that environment to use tcolorbox, which does allow page breaking. This environment can be used exclusively for code blocks, allowing the customcodeblock environment to be retired. This change also adds a dummy class to all code blocks, ensuring they all use the Shaded environment and pick up the tcolorbox tweaks.
1 parent 0c577c2 commit 7fe856f

File tree

4 files changed

+104
-8
lines changed

4 files changed

+104
-8
lines changed

Dockerfile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ RUN tlmgr update --self --all && tlmgr install \
187187
multirow \
188188
needspace \
189189
newunicodechar \
190+
pdfcol \
190191
pagecolor \
191192
pdfcomment \
192193
pdflscape \
@@ -196,8 +197,10 @@ RUN tlmgr update --self --all && tlmgr install \
196197
selnolig \
197198
setspace \
198199
soulpos \
200+
tcolorbox \
199201
textpos \
200202
titling \
203+
tikzfill \
201204
ulem \
202205
unicode-math \
203206
upquote \

filter/divide-code-blocks.lua

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ function CodeBlock(block)
2323
end
2424
end
2525

26+
-- Without any classes, code blocks are rendered with \verbatim instead of
27+
-- the Shaded environment. Forcing the addition of a class ensures that
28+
-- all code blocks are rendered consistently.
29+
table.insert(block.classes, "_placeholder")
30+
2631
font = class_spec["font"]
2732
return {
2833
pandoc.RawInline('latex', string.format([[

guide.tcg

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,84 @@ You can use `.normal`, `.small`, or `.tiny` (illustrated below):
471471

472472
The default case is `.normal`.
473473

474+
Code blocks will automatically break if they need to span across pages.
475+
476+
```
477+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas imperdiet arcu
478+
non pretium hendrerit. Fusce nec est elit. Etiam at fringilla magna, a placerat
479+
dolor. In non commodo purus. Suspendisse potenti. Vestibulum ante ipsum primis
480+
in faucibus orci luctus et ultrices posuere cubilia curae; Aliquam erat volutpat.
481+
Phasellus tincidunt lorem sed ligula commodo, ut tincidunt velit lobortis.
482+
Suspendisse quis aliquet tellus, et lacinia augue. Suspendisse posuere imperdiet
483+
turpis, id aliquet quam lobortis quis. Sed augue lacus, dictum et posuere sed,
484+
ultricies eget mi. Nullam interdum et risus sollicitudin finibus. Sed luctus diam
485+
eget metus consequat blandit. Sed sem dui, fringilla ac nisl a, faucibus convallis
486+
nunc.
487+
488+
Donec aliquet enim sed odio elementum, feugiat semper elit bibendum. Nam placerat
489+
posuere velit egestas rutrum. Curabitur iaculis orci turpis, et malesuada augue
490+
feugiat vel. Vivamus ut convallis nulla. Quisque vehicula, nisi eu maximus luctus,
491+
enim massa molestie nisl, sed tincidunt sapien nibh non risus. Etiam maximus nisi
492+
eget erat bibendum auctor. Suspendisse faucibus placerat tellus, vitae malesuada
493+
est tempus sit amet. Mauris pulvinar mollis lectus, nec rhoncus felis. Nullam
494+
venenatis feugiat tristique. Vestibulum tempus dolor vel tortor consectetur
495+
imperdiet. Nam placerat, erat ut venenatis vulputate, nibh purus pulvinar neque,
496+
et sollicitudin ipsum dui non ipsum. Nullam a sapien erat. Proin fermentum, arcu
497+
et vestibulum rutrum, dolor urna consectetur velit, ac commodo ex ex et nisi.
498+
Aliquam tincidunt turpis vel porttitor convallis.
499+
500+
Fusce eu enim enim. Donec at arcu venenatis, suscipit nulla eget, luctus nulla.
501+
Cras semper dolor sed purus mollis tristique. Donec vitae nisl id tortor dapibus
502+
posuere. Pellentesque ut orci leo. Donec a imperdiet purus. Phasellus vel lorem
503+
vel augue porta eleifend viverra ut leo. Nam vel neque fermentum, finibus ante at,
504+
venenatis arcu. Ut tincidunt placerat mi sed suscipit. Duis ut justo et mi gravida
505+
volutpat ut vel metus. Morbi non dapibus dui. Donec pulvinar, justo at ultricies
506+
consectetur, ante erat accumsan justo, a convallis massa tortor at nisl. Curabitur
507+
non elit ac elit ultricies lacinia. Vivamus viverra quam felis, sed auctor nisl
508+
commodo vel. Pellentesque habitant morbi tristique senectus et netus et malesuada
509+
fames ac turpis egestas.
510+
511+
Mauris in sapien blandit, accumsan nibh vel, ornare erat. Proin condimentum
512+
fringilla nunc ut posuere. Donec laoreet magna sed felis volutpat finibus. Morbi
513+
sagittis neque eget lectus vestibulum vestibulum. Nullam eu sapien tempus, gravida
514+
ligula mattis, auctor libero. Curabitur semper, quam non convallis cursus, turpis
515+
sapien efficitur justo, rutrum ultricies nisi metus porttitor velit. Sed elementum
516+
libero hendrerit, scelerisque velit vitae, fermentum urna. Duis mollis enim vitae
517+
lectus tincidunt, vitae eleifend ex volutpat. Quisque eu libero quis augue
518+
consectetur pulvinar in posuere mi. Maecenas fermentum commodo tortor, sed elementum
519+
erat auctor et. Vivamus quam orci, interdum at porttitor quis, mattis quis mi.
520+
Vestibulum rhoncus condimentum velit at rhoncus. Aliquam sit amet ligula tellus.
521+
522+
Nunc suscipit, velit eget facilisis scelerisque, erat tortor fermentum ante, et
523+
viverra velit dui eu elit. Vestibulum elementum rutrum felis. Morbi facilisis, quam
524+
eu pellentesque pulvinar, arcu est euismod nisi, ut ultricies erat lacus quis nulla.
525+
Vestibulum aliquam, purus nec tempor dictum, lorem ligula congue dui, non sagittis
526+
purus purus vitae mi. Quisque vitae eros non felis euismod volutpat sit amet id nulla.
527+
Maecenas ut est mi. In diam lacus, tempus non arcu in, interdum pulvinar lacus. Cras
528+
vitae tortor nec mi rhoncus malesuada efficitur id nunc. Ut mollis semper nisi, in
529+
tempor massa hendrerit ac. Mauris pretium nisl risus, a commodo ante aliquet eget.
530+
Nullam condimentum lectus quis erat porta, a tincidunt augue placerat. Etiam leo
531+
tortor, facilisis eu gravida sed, malesuada in tortor. In hac habitasse platea
532+
dictumst. Nulla lacinia velit vitae odio laoreet, nec dictum magna tincidunt. Aliquam
533+
at purus elit. Fusce luctus a magna in pulvinar.
534+
535+
Vivamus pellentesque placerat dui sed varius. Integer a tincidunt eros. Nam lacus
536+
libero, fermentum sit amet nulla vel, tempus dapibus augue. Nam semper mauris vel
537+
pretium posuere. Suspendisse nec dolor eget lacus tincidunt tristique. Mauris
538+
consectetur malesuada dolor non aliquam. Sed ornare velit mi, nec tempus velit
539+
efficitur vel. Fusce at enim sed neque cursus fringilla id quis urna. Interdum et
540+
malesuada fames ac ante ipsum primis in faucibus.
541+
542+
In hac habitasse platea dictumst. Pellentesque euismod arcu mauris. Praesent
543+
placerat cursus enim. Mauris luctus elementum turpis, sit amet finibus sapien
544+
sollicitudin sit amet. Proin eu neque nulla. Duis posuere viverra mollis. Donec
545+
fringilla molestie euismod. Phasellus dignissim turpis erat, id sodales magna
546+
vulputate et. Ut cursus vulputate sapien, et finibus nunc viverra at. Praesent
547+
ac sapien nisi. Pellentesque a posuere lacus. Suspendisse potenti. Aliquam semper
548+
auctor lorem, ultricies vehicula orci aliquam sed. Praesent interdum leo metus,
549+
ut rhoncus sem consequat a.
550+
```
551+
474552
## Footnotes {#sec:footnotes}
475553

476554
```md

template/tcg.tex

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,14 @@
8484

8585
\newcommand{\BeginCodeBlock}[1]{
8686
\vskip 3pt
87-
\begin{customcodeblock}
87+
\begingroup
8888
\textbf{\textit{\textcolor{codeblock-header}{\small \BeginDemarcated{Code}}}}
8989
#1
9090
}
9191

9292
\newcommand{\EndCodeBlock}{
9393
\textbf{\textit{\textcolor{codeblock-header}{\small \EndDemarcated{Code}}}}
94-
\end{customcodeblock}
94+
\endgroup
9595
}
9696

9797
% Use upquote if available, for straight quotes in verbatim environments
@@ -368,18 +368,28 @@
368368
\definecolor{codeblock-background}{RGB}{255,255,255}
369369
\definecolor{codeblock-header}{RGB}{35,61,130}
370370
\usepackage{mdframed}
371-
\newmdenv[
372-
linewidth=1pt,
373-
linecolor=codeblock-line,
374-
backgroundcolor=codeblock-background,
375-
skipabove=5pt,
376-
nobreak=true]{customcodeblock}
377371
\newmdenv[
378372
linewidth=0pt,
379373
backgroundcolor=informative-background,
380374
skipabove=5pt,
381375
nobreak=true]{informative}
382376

377+
\usepackage{tcolorbox}
378+
\tcbuselibrary{breakable, skins}
379+
\tcbset{enhanced}
380+
381+
\renewenvironment{Shaded}{
382+
\begin{tcolorbox}[
383+
breakable,
384+
arc=0pt,
385+
boxrule=1pt,
386+
colback=codeblock-background,
387+
colframe=codeblock-line,
388+
]
389+
}{
390+
\end{tcolorbox}
391+
}
392+
383393
\newcommand{\hlineifmdframed}{}
384394
\newcommand{\BeginInformative}[1]{
385395
% HACK: We need to add an extra hline to the ends of tables inside of notes, because

0 commit comments

Comments
 (0)