Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2743ebb09c |
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
Package: civilytics
|
Package: civilytics
|
||||||
Type: Package
|
Type: Package
|
||||||
Title: Brand Themes, Color Palettes, and Utility Functions for Civilytics
|
Title: Brand Themes, Color Palettes, and Utility Functions for Civilytics
|
||||||
Version: 0.3.1
|
Version: 0.2.0
|
||||||
Authors@R:
|
Authors@R:
|
||||||
person("Jared", "E. Knowles", email = "jared@civilytics.com",
|
person("Jared", "E. Knowles", email = "jared@civilytics.com",
|
||||||
role = c("aut", "cre"))
|
role = c("aut", "cre"))
|
||||||
|
|||||||
+7
-9
@@ -135,12 +135,12 @@ use_civilytics_theme <- function(path = ".", force = FALSE) {
|
|||||||
.copy_pkg_file(file.path("quarto/latex", f), file.path("latex", f), path, force)
|
.copy_pkg_file(file.path("quarto/latex", f), file.path("latex", f), path, force)
|
||||||
}
|
}
|
||||||
|
|
||||||
# Typst — shipped as template-partials so Quarto keeps its Skylighting
|
# Typst
|
||||||
# definitions and syntax-highlighted code blocks render (see issue #12)
|
.copy_pkg_file(
|
||||||
typst_files <- c("typst-template.typ", "typst-show.typ")
|
"quarto/typst/civilytics-typst.typ",
|
||||||
for (f in typst_files) {
|
"typst/civilytics-typst.typ",
|
||||||
.copy_pkg_file(file.path("quarto/typst", f), file.path("typst", f), path, force)
|
path, force
|
||||||
}
|
)
|
||||||
|
|
||||||
# Logos — for _brand.yml (expects assets/logo/)
|
# Logos — for _brand.yml (expects assets/logo/)
|
||||||
.copy_logos("assets/logo", path, force)
|
.copy_logos("assets/logo", path, force)
|
||||||
@@ -158,9 +158,7 @@ use_civilytics_theme <- function(path = ".", force = FALSE) {
|
|||||||
message(" include-in-header: latex/civilytics.tex")
|
message(" include-in-header: latex/civilytics.tex")
|
||||||
message(" include-before-body: latex/civilytics-title.tex")
|
message(" include-before-body: latex/civilytics-title.tex")
|
||||||
message(" typst:")
|
message(" typst:")
|
||||||
message(" template-partials:")
|
message(" template: typst/civilytics-typst.typ")
|
||||||
message(" - typst/typst-template.typ")
|
|
||||||
message(" - typst/typst-show.typ")
|
|
||||||
message("---")
|
message("---")
|
||||||
message("\nSee examples/report.qmd for a complete example.")
|
message("\nSee examples/report.qmd for a complete example.")
|
||||||
invisible(NULL)
|
invisible(NULL)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
title: "Who pays when rent outpaces wages?"
|
title: "Who pays when rent outpaces wages?"
|
||||||
subtitle: "A 12-county analysis of cost-burdened renter households, 2019–2024."
|
subtitle: "A 12-county analysis of cost-burdened renter households, 2019–2024."
|
||||||
author:
|
author:
|
||||||
- name: "Jared Knowles"
|
- name: "Civilytics Research"
|
||||||
affiliation: "Civilytics Consulting"
|
affiliation: "Civilytics Consulting"
|
||||||
date: "2026-04-15"
|
date: "2026-04-15"
|
||||||
abstract: |
|
abstract: |
|
||||||
@@ -19,9 +19,7 @@ format:
|
|||||||
toc: true
|
toc: true
|
||||||
toc-location: right
|
toc-location: right
|
||||||
typst:
|
typst:
|
||||||
template-partials:
|
template: ../typst/civilytics-typst.typ
|
||||||
- ../typst/typst-template.typ
|
|
||||||
- ../typst/typst-show.typ
|
|
||||||
pdf:
|
pdf:
|
||||||
include-in-header: ../latex/civilytics.tex
|
include-in-header: ../latex/civilytics.tex
|
||||||
include-before-body: ../latex/civilytics-title.tex
|
include-before-body: ../latex/civilytics-title.tex
|
||||||
|
|||||||
@@ -55,11 +55,11 @@ Big idea goes here.
|
|||||||
|
|
||||||
> Rent has outpaced wages in every county we studied.
|
> Rent has outpaced wages in every county we studied.
|
||||||
|
|
||||||
Civilytics Consulting, 2026
|
Civilytics Research, 2026
|
||||||
|
|
||||||
## Thank you {.thank-you}
|
## Thank you {.thank-you}
|
||||||
|
|
||||||
Questions?
|
Questions?
|
||||||
|
|
||||||
- jared@civilytics.com
|
- jared@civilytics.com
|
||||||
- civilytics.com
|
- civilytics.consulting
|
||||||
|
|||||||
@@ -2,16 +2,11 @@
|
|||||||
% Replaces Quarto's default \maketitle. Uses values from YAML
|
% Replaces Quarto's default \maketitle. Uses values from YAML
|
||||||
% (\thetitle, \theauthor, \thedate) plus an \ifabstract block.
|
% (\thetitle, \theauthor, \thedate) plus an \ifabstract block.
|
||||||
|
|
||||||
% Guard: \thesubtitle is normally defined by civilytics.tex's subtitle
|
|
||||||
% capture; provide a fallback so this partial degrades gracefully if used
|
|
||||||
% without that preamble. See civilyticsR issue #13.
|
|
||||||
\providecommand{\thesubtitle}{}
|
|
||||||
|
|
||||||
\begin{titlepage}
|
\begin{titlepage}
|
||||||
\pagecolor{paper}
|
\pagecolor{paper}
|
||||||
\color{ink}
|
\color{ink}
|
||||||
\vspace*{0.5in}
|
\vspace*{0.5in}
|
||||||
{\sffamily\bfseries\scriptsize\color{ember}\MakeUppercase{— Civilytics Consulting}\par}
|
{\sffamily\bfseries\scriptsize\color{ember}\MakeUppercase{— Civilytics Research}\par}
|
||||||
\vspace{12pt}
|
\vspace{12pt}
|
||||||
{\displayfont\fontsize{32pt}{34pt}\selectfont\bfseries\color{ink}\thetitle\par}
|
{\displayfont\fontsize{32pt}{34pt}\selectfont\bfseries\color{ink}\thetitle\par}
|
||||||
\vspace{8pt}
|
\vspace{8pt}
|
||||||
@@ -38,6 +33,8 @@
|
|||||||
|
|
||||||
% Pulse mark, in ember
|
% Pulse mark, in ember
|
||||||
\begin{center}
|
\begin{center}
|
||||||
|
\begin{tikzpicture}[overlay, remember picture]
|
||||||
|
\end{tikzpicture}
|
||||||
{\color{ember}\rule{40pt}{2pt}}
|
{\color{ember}\rule{40pt}{2pt}}
|
||||||
\end{center}
|
\end{center}
|
||||||
\end{titlepage}
|
\end{titlepage}
|
||||||
|
|||||||
@@ -40,40 +40,17 @@
|
|||||||
\color{ink}
|
\color{ink}
|
||||||
|
|
||||||
% --- Fonts (require local install or fontspec lookup) ---
|
% --- Fonts (require local install or fontspec lookup) ---
|
||||||
% Bold uses the family's native Bold weight (present in every Source Serif 4
|
|
||||||
% install). Do NOT hard-require a "SemiBold" face: the package installs no
|
|
||||||
% system fonts for the PDF path, and standard Source Serif 4 ships only
|
|
||||||
% Regular/Bold/Italic/BoldItalic. See civilyticsR issue #14.
|
|
||||||
\setmainfont{Source Serif 4}[
|
\setmainfont{Source Serif 4}[
|
||||||
UprightFont = *,
|
UprightFont = *,
|
||||||
ItalicFont = * Italic,
|
ItalicFont = * Italic,
|
||||||
|
BoldFont = * SemiBold,
|
||||||
|
BoldItalicFont = * SemiBold Italic,
|
||||||
Ligatures = TeX,
|
Ligatures = TeX,
|
||||||
]
|
]
|
||||||
\setsansfont{Inter}[Ligatures = TeX]
|
\setsansfont{Inter}[Ligatures = TeX]
|
||||||
\setmonofont{JetBrains Mono}[Scale = 0.92]
|
\setmonofont{JetBrains Mono}[Scale = 0.92]
|
||||||
\newfontfamily\displayfont{Libre Franklin}[Ligatures = TeX]
|
\newfontfamily\displayfont{Libre Franklin}[Ligatures = TeX]
|
||||||
|
|
||||||
% --- Subtitle capture ---
|
|
||||||
% Quarto/pandoc defines \subtitle (which appends to \@title) but never
|
|
||||||
% \thesubtitle, which the title page uses. This preamble is emitted before
|
|
||||||
% pandoc's \providecommand{\subtitle}, so our definition wins: capture the
|
|
||||||
% subtitle into \thesubtitle instead. See civilyticsR issue #13.
|
|
||||||
\makeatletter
|
|
||||||
\providecommand{\thesubtitle}{}
|
|
||||||
\def\subtitle#1{\renewcommand{\thesubtitle}{#1}}
|
|
||||||
\makeatother
|
|
||||||
|
|
||||||
% --- Use the Civilytics title page, not pandoc's default ---
|
|
||||||
% civilytics-title.tex (include-before-body) IS the title page. Quarto emits
|
|
||||||
% its default \maketitle + abstract *before* include-before-body, which would
|
|
||||||
% print a second, unstyled title. Neutralise both here, in the preamble
|
|
||||||
% (runs at \begin{document}, before the default title). The branded title page
|
|
||||||
% does not display the abstract. See civilyticsR issue #13.
|
|
||||||
\AtBeginDocument{%
|
|
||||||
\renewcommand{\maketitle}{}%
|
|
||||||
\renewenvironment{abstract}{\setbox0=\vbox\bgroup}{\egroup}%
|
|
||||||
}
|
|
||||||
|
|
||||||
% --- Hyperlinks ---
|
% --- Hyperlinks ---
|
||||||
\hypersetup{
|
\hypersetup{
|
||||||
colorlinks = true,
|
colorlinks = true,
|
||||||
@@ -100,7 +77,7 @@
|
|||||||
\renewcommand{\footrulewidth}{0pt}
|
\renewcommand{\footrulewidth}{0pt}
|
||||||
\fancyhead[L]{\sffamily\scriptsize\color{ink3}\MakeUppercase{Civilytics Consulting}}
|
\fancyhead[L]{\sffamily\scriptsize\color{ink3}\MakeUppercase{Civilytics Consulting}}
|
||||||
\fancyhead[R]{\sffamily\scriptsize\color{ink3}\thetitle}
|
\fancyhead[R]{\sffamily\scriptsize\color{ink3}\thetitle}
|
||||||
\fancyfoot[L]{\sffamily\scriptsize\color{ink3}civilytics.com}
|
\fancyfoot[L]{\sffamily\scriptsize\color{ink3}civilytics.consulting}
|
||||||
\fancyfoot[C]{\sffamily\scriptsize\color{ink3}\thepage}
|
\fancyfoot[C]{\sffamily\scriptsize\color{ink3}\thepage}
|
||||||
\fancyfoot[R]{\sffamily\scriptsize\color{ink3}\textcopyright\ 2026}
|
\fancyfoot[R]{\sffamily\scriptsize\color{ink3}\textcopyright\ 2026}
|
||||||
|
|
||||||
|
|||||||
@@ -1,15 +1,9 @@
|
|||||||
// =============================================================
|
// =============================================================
|
||||||
// Civilytics — Typst template partial for Quarto PDF (typst-template.typ).
|
// Civilytics — Typst template for Quarto PDF
|
||||||
// Shipped as a Quarto template-partial (paired with typst-show.typ) rather
|
|
||||||
// than a full `template:` so Quarto keeps its own `definitions` partial —
|
|
||||||
// which defines Skylighting/token functions needed for syntax-highlighted
|
|
||||||
// code blocks. See civilyticsR issue #12.
|
|
||||||
// Usage in YAML:
|
// Usage in YAML:
|
||||||
// format:
|
// format:
|
||||||
// typst:
|
// typst:
|
||||||
// template-partials:
|
// template: quarto/typst/civilytics-typst.typ
|
||||||
// - quarto/typst/typst-template.typ
|
|
||||||
// - quarto/typst/typst-show.typ
|
|
||||||
// =============================================================
|
// =============================================================
|
||||||
|
|
||||||
#let paper-bg = rgb("#FAF7F2")
|
#let paper-bg = rgb("#FAF7F2")
|
||||||
@@ -60,7 +54,7 @@
|
|||||||
grid(
|
grid(
|
||||||
columns: (1fr, auto, 1fr),
|
columns: (1fr, auto, 1fr),
|
||||||
align: (left, center, right),
|
align: (left, center, right),
|
||||||
[civilytics.com],
|
[civilytics.consulting],
|
||||||
counter(page).display("1 / 1", both: true),
|
counter(page).display("1 / 1", both: true),
|
||||||
[© 2026]
|
[© 2026]
|
||||||
)
|
)
|
||||||
@@ -164,7 +158,7 @@
|
|||||||
if title != none {
|
if title != none {
|
||||||
block[
|
block[
|
||||||
#set text(font: sans-stack, size: 8pt, weight: 600, fill: ember, tracking: 0.1em)
|
#set text(font: sans-stack, size: 8pt, weight: 600, fill: ember, tracking: 0.1em)
|
||||||
#upper[— Civilytics Consulting]
|
#upper[— Civilytics Research]
|
||||||
]
|
]
|
||||||
v(8pt)
|
v(8pt)
|
||||||
block[
|
block[
|
||||||
@@ -235,3 +229,16 @@
|
|||||||
|
|
||||||
doc
|
doc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Quarto entry point
|
||||||
|
#show: doc => civilytics(
|
||||||
|
title: $title$,
|
||||||
|
$if(subtitle)$subtitle: $subtitle$,$endif$
|
||||||
|
$if(by-author)$authors: ($for(by-author)$"$it.name.literal$",$endfor$),$endif$
|
||||||
|
$if(date)$date: $date$,$endif$
|
||||||
|
$if(abstract)$abstract: [$abstract$],$endif$
|
||||||
|
toc: $if(toc)$true$else$false$endif$,
|
||||||
|
doc
|
||||||
|
)
|
||||||
|
|
||||||
|
$body$
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
// Civilytics — Typst show/entry partial for Quarto (typst-show.typ).
|
|
||||||
// Pairs with typst-template.typ. Quarto appends the rendered document body
|
|
||||||
// after this partial, so this file intentionally ends with the show rule and
|
|
||||||
// no trailing body token. (Do not write that token in a comment here: Quarto
|
|
||||||
// interpolates its template variables even inside comments.)
|
|
||||||
// Title/subtitle/date are wrapped in [ ] so arbitrary text (including words
|
|
||||||
// that are Typst keywords like "for"/"in") is treated as content, not code.
|
|
||||||
// See civilyticsR issue #12.
|
|
||||||
#show: doc => civilytics(
|
|
||||||
title: [$title$],
|
|
||||||
$if(subtitle)$subtitle: [$subtitle$],$endif$
|
|
||||||
$if(by-author)$authors: ($for(by-author)$"$it.name.literal$",$endfor$),$endif$
|
|
||||||
$if(date)$date: [$date$],$endif$
|
|
||||||
$if(abstract)$abstract: [$abstract$],$endif$
|
|
||||||
toc: $if(toc)$true$else$false$endif$,
|
|
||||||
doc
|
|
||||||
)
|
|
||||||
Reference in New Issue
Block a user