projet: complète le modèle
- Améliore l'usage des polices, pour se passer de TheSans. - Utilise une version des scripts JS servis par le projet, que ce soit pour l'interface de pagedjs ou pour recharger le document dans l'interface web restant au même endroit dans le document. - Ajoute la classe `.newpage` à la liste des sélecteurs provoquant un saut de page. - Crée la classe `.exercise` pour mettre en avant les sections d'exercice. - Utilise la variable pandoc `noscript` (à passer dans la commande pandoc avec -V noscript=true) lors de la production du PDF avec pandoc et le pdf-engine pagedjs-cli. Co-Authored-by: iGor milhit <igor@milhit.ch>main v0.2.0
parent
2687b0e0bc
commit
c1e345f37a
|
@ -2,3 +2,4 @@ example.html
|
||||||
example.pdf
|
example.pdf
|
||||||
test.*
|
test.*
|
||||||
release/
|
release/
|
||||||
|
watched-files.txt
|
||||||
|
|
|
@ -90,13 +90,16 @@ Pour générer directement le PDF, en utilisant `pagedjs` au moyen de `pandoc`
|
||||||
pandoc --citeproc \
|
pandoc --citeproc \
|
||||||
--to=pdf --pdf-engine=pagedjs-cli \
|
--to=pdf --pdf-engine=pagedjs-cli \
|
||||||
--css=../style.css \
|
--css=../style.css \
|
||||||
|
--template=../template.html \
|
||||||
--toc --toc-depth=2 \
|
--toc --toc-depth=2 \
|
||||||
|
-V noscript=true
|
||||||
--output=example.pdf example.md
|
--output=example.pdf example.md
|
||||||
```
|
```
|
||||||
|
|
||||||
- `--pdf-engine=` impose `pagedjs` pour la conversion en PDF.
|
- `--pdf-engine=` impose `pagedjs` pour la conversion en PDF.
|
||||||
- Ici le `template` ne doit pas être utilisé, mais la feuille de style doit
|
- `-V noscript=true` permet d'indiquer que la feuille de style de l'interface
|
||||||
l'être.
|
web de `pagedjs` et les scripts javascript utile dans le navigateur web ne
|
||||||
|
soient pas utilisés, car ils perturbent la conversion par `pandoc`.
|
||||||
|
|
||||||
Pour générer le PDF en utilisant directement `pagedjs` :
|
Pour générer le PDF en utilisant directement `pagedjs` :
|
||||||
|
|
||||||
|
|
|
@ -31,10 +31,11 @@ Au terme de cet atelier, vous serez en mesure de :
|
||||||
|
|
||||||
|
|
||||||
:::{#licence}
|
:::{#licence}
|
||||||
![Logo de la licence CC BY-SA 4.0](../static/by-sa.svg) \
|
![Logo de la licence CC BY-SA 4.0][logo] \
|
||||||
[CC BY-SA 4.0][cc-by-sa] --- [Sources][sources]
|
[CC BY-SA 4.0][cc-by-sa] --- [Sources][sources]
|
||||||
:::
|
:::
|
||||||
|
|
||||||
|
[logo]: ../static/by-sa.svg
|
||||||
[cc-by-sa]: https://creativecommons.org/licenses/by-sa/4.0/deed.fr "Texte de la licence en français"
|
[cc-by-sa]: https://creativecommons.org/licenses/by-sa/4.0/deed.fr "Texte de la licence en français"
|
||||||
[sources]: https://git.milhit.ch/igor/bunige-pagedjs-template
|
[sources]: https://git.milhit.ch/igor/bunige-pagedjs-template
|
||||||
|
|
||||||
|
@ -123,16 +124,20 @@ par exemple un livre.</p>
|
||||||
|
|
||||||
## Police
|
## Police
|
||||||
|
|
||||||
Pour que la police *TheSans* puisse s'appliquer correctement, elle doit être
|
Bien que la police *TheSans* face partie de la charte de l'UNIGE et de la
|
||||||
installée sur votre système d'exploitation. Malheureusement, elle n'est pas
|
Bibliothèque de l'Université, je trouve qu'elle n'est pas des plus lisible,
|
||||||
publiée avec une licence libre, ce qui en réduit l'usage. Les polices de
|
notamment sur les titres. De plus, la licence de cette police, sauf erreur,
|
||||||
remplacement sont dans l'ordre *Open Sans*, *Arial*, *Helvetica*, ou la police
|
n'est pas libre, ce qui en limite l'usage. C'est pourquoi je préfère spécifier
|
||||||
|
ici les polices *Noto Sans*, *Open Sans*, *Arial*, *Helvetica*, ou la police
|
||||||
*sans-serif* par défaut de votre système ou de votre navigateur.
|
*sans-serif* par défaut de votre système ou de votre navigateur.
|
||||||
|
|
||||||
La police peut être facilement configurable au moyen du sélecteur `body` dans
|
La police peut être facilement configurable au moyen du sélecteur `body` dans
|
||||||
le fichier `style.css` (règle déjà existante, dans la section *Définitions
|
le fichier `style.css` (règle déjà existante, dans la section *Définitions
|
||||||
globales*).
|
globales*).
|
||||||
|
|
||||||
|
Pour les éléments verbatim (`pre`, `code`), la police est *Lilex*, *Courier
|
||||||
|
New*, *Courier*, *monospace*.
|
||||||
|
|
||||||
## Titres
|
## Titres
|
||||||
|
|
||||||
Il y a une particularité avec les titres, qui découlent de l'usage de
|
Il y a une particularité avec les titres, qui découlent de l'usage de
|
||||||
|
@ -149,6 +154,23 @@ Ainsi, un sélecteur unique est disponible pour appliquer un saut de page à ce
|
||||||
titre, quel que soit son texte. Une logique similaire est appliquée au titre de
|
titre, quel que soit son texte. Une logique similaire est appliquée au titre de
|
||||||
la bibliographie (`bibliography`).
|
la bibliographie (`bibliography`).
|
||||||
|
|
||||||
|
De la même façon, une ou plusieurs classes peuvent être attribuées :
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
## Titre {.class}
|
||||||
|
```
|
||||||
|
|
||||||
|
Ainsi, on peut ajouter la classe `.newpage` qui insert un saut de page avant le
|
||||||
|
titre en question.
|
||||||
|
|
||||||
|
La même chose peut être faite avec des `<div>`, par exemple :
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
:::{.class}{#id}
|
||||||
|
Du texte.
|
||||||
|
:::
|
||||||
|
```
|
||||||
|
|
||||||
## Citation
|
## Citation
|
||||||
|
|
||||||
> Tout d’abord un bon éditeur est un éditeur avec coloration syntaxique. Avec
|
> Tout d’abord un bon éditeur est un éditeur avec coloration syntaxique. Avec
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,117 @@
|
||||||
|
// Reload-in-place v2.0
|
||||||
|
// Nicolas Taffin + Sameh Chafik - 2020
|
||||||
|
// MIT License https://opensource.org/licenses/MIT
|
||||||
|
// A simple script to add your pagedjs project. On reload, it will make the web browser scroll to the place it was before reload.
|
||||||
|
// Useful when styling or proof correcting your book. Multi docs compatible and doesn't wait for complete compilation to go.
|
||||||
|
|
||||||
|
|
||||||
|
console.log("reload in place");
|
||||||
|
|
||||||
|
|
||||||
|
// separate human / machine scroll
|
||||||
|
var machineScroll = false;
|
||||||
|
|
||||||
|
// check pagedJS ended compilation
|
||||||
|
var pagedjsEnd = false;
|
||||||
|
|
||||||
|
class pagedjsEnded extends Paged.Handler {
|
||||||
|
constructor(chunker, polisher, caller) {
|
||||||
|
super(chunker, polisher, caller);
|
||||||
|
}
|
||||||
|
afterRendered(pages) {
|
||||||
|
pagedjsEnd = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Paged.registerHandlers(pagedjsEnded);
|
||||||
|
|
||||||
|
// set a "unique" filename based on title element, in case several books are opened
|
||||||
|
var fileTitle = document.getElementsByTagName("title")[0].text;
|
||||||
|
|
||||||
|
function getDocHeight() {
|
||||||
|
var D = document;
|
||||||
|
return Math.max(
|
||||||
|
D.body.scrollHeight, D.documentElement.scrollHeight,
|
||||||
|
D.body.offsetHeight, D.documentElement.offsetHeight,
|
||||||
|
D.body.clientHeight, D.documentElement.clientHeight
|
||||||
|
)
|
||||||
|
}
|
||||||
|
function saveAmountScrolled(){
|
||||||
|
var scrollArray = [];
|
||||||
|
var scrollTop = window.pageYOffset || (document.documentElement || document.body.parentNode || document.body).scrollTop
|
||||||
|
if (!machineScroll) {
|
||||||
|
var scrollLeft = window.pageXOffset || (document.documentElement || document.body.parentNode || document.body).scrollLeft
|
||||||
|
scrollArray.push({ X: Math.round(scrollLeft), Y: Math.round(scrollTop) });
|
||||||
|
console.log("Saved ", scrollArray);
|
||||||
|
localStorage[fileTitle] = JSON.stringify(scrollArray);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// on Load, blur or opacify the page, and try to join ASAP
|
||||||
|
// last saved position, or at least last compiled page
|
||||||
|
|
||||||
|
|
||||||
|
window.onload = moveFast;
|
||||||
|
|
||||||
|
function moveFast() {
|
||||||
|
machineScroll= true;
|
||||||
|
var styleEl = document.createElement('style');
|
||||||
|
document.head.appendChild(styleEl);
|
||||||
|
var styleSheet = styleEl.sheet;
|
||||||
|
styleSheet.insertRule('.pagedjs_pages { filter: blur(10px); }', 0);
|
||||||
|
//styleSheet.insertRule('.pagedjs_pages { opacity: 0.1; }', 0);
|
||||||
|
var savedData = localStorage.getItem(fileTitle);
|
||||||
|
if (savedData) {
|
||||||
|
var scrollArray = JSON.parse(savedData);
|
||||||
|
var scrollTop = scrollArray[0].Y;
|
||||||
|
var scrollLeft = scrollArray[0].X;
|
||||||
|
} else {
|
||||||
|
var scrollTop = 0;
|
||||||
|
var scrollLeft = 0;
|
||||||
|
}
|
||||||
|
var winheight= window.innerHeight || (document.documentElement || document.body).clientHeight
|
||||||
|
window.currentInterval = setInterval(function(){
|
||||||
|
var docheight = getDocHeight();
|
||||||
|
|
||||||
|
if ( scrollTop > 0 && scrollTop > docheight - winheight && !pagedjsEnd) {
|
||||||
|
window.scrollTo(scrollLeft,docheight);
|
||||||
|
} else {
|
||||||
|
window.scrollTo(scrollLeft,scrollTop);
|
||||||
|
clearInterval(window.currentInterval);
|
||||||
|
setTimeout(function(){
|
||||||
|
window.scrollTo(scrollLeft,scrollTop);
|
||||||
|
machineScroll = false;
|
||||||
|
styleSheet.deleteRule(0);
|
||||||
|
}, 500); // Delay to start
|
||||||
|
}
|
||||||
|
}, 50); // refresh frequency
|
||||||
|
};
|
||||||
|
|
||||||
|
// slow down a bit save position pace
|
||||||
|
|
||||||
|
var slowSave = debounce(function() {
|
||||||
|
if(!machineScroll) {
|
||||||
|
saveAmountScrolled();
|
||||||
|
}
|
||||||
|
}, 100); // save frequency
|
||||||
|
|
||||||
|
function debounce(func, wait, immediate) {
|
||||||
|
var timeout;
|
||||||
|
return function() {
|
||||||
|
var context = this, args = arguments;
|
||||||
|
var later = function() {
|
||||||
|
timeout = null;
|
||||||
|
if (!immediate) func.apply(context, args);
|
||||||
|
};
|
||||||
|
var callNow = immediate && !timeout;
|
||||||
|
clearTimeout(timeout);
|
||||||
|
timeout = setTimeout(later, wait);
|
||||||
|
if (callNow) func.apply(context, args);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// Scroll triggers save, but not immediately on load
|
||||||
|
|
||||||
|
setTimeout(function(){
|
||||||
|
window.addEventListener('scroll', slowSave);
|
||||||
|
}, 1000); // wait a bit before starting position save
|
||||||
|
|
24
style.css
24
style.css
|
@ -28,7 +28,7 @@
|
||||||
* bibliothèque de l'UNIGE. */
|
* bibliothèque de l'UNIGE. */
|
||||||
@top-right {
|
@top-right {
|
||||||
content: "";
|
content: "";
|
||||||
background-image: url("./static/bibliotheque-logo.svg");
|
background-image: url("static/bibliotheque-logo.svg");
|
||||||
background-position: right;
|
background-position: right;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-size: 25%;
|
background-size: 25%;
|
||||||
|
@ -56,7 +56,8 @@
|
||||||
* ************************ */
|
* ************************ */
|
||||||
|
|
||||||
body {
|
body {
|
||||||
font-family: "TheSansOsF", "Open Sans", Arial, Helvetica, sans-serif;
|
font-family: "Noto Sans", "Open Sans",
|
||||||
|
Arial, Helvetica, sans-serif;
|
||||||
/* Définit les trois variables de compteur nécessaires */
|
/* Définit les trois variables de compteur nécessaires */
|
||||||
counter-reset: figureNumber toc tableNumber;
|
counter-reset: figureNumber toc tableNumber;
|
||||||
}
|
}
|
||||||
|
@ -132,6 +133,7 @@
|
||||||
* dans la source markdown. */
|
* dans la source markdown. */
|
||||||
#first-section,
|
#first-section,
|
||||||
#bibliography,
|
#bibliography,
|
||||||
|
.newpage,
|
||||||
.footnotes {
|
.footnotes {
|
||||||
break-before: page;
|
break-before: page;
|
||||||
}
|
}
|
||||||
|
@ -158,8 +160,9 @@
|
||||||
padding: none;
|
padding: none;
|
||||||
}
|
}
|
||||||
code {
|
code {
|
||||||
font-family:'Courier New', Courier, monospace;
|
font-family: 'Lilex Nerd Font', 'Courier New', Courier, monospace;
|
||||||
font-size: 90%;
|
font-size: 90%;
|
||||||
|
line-height: 1.4;
|
||||||
background-color: #f2f1f1;
|
background-color: #f2f1f1;
|
||||||
padding: 2px;
|
padding: 2px;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
|
@ -173,6 +176,12 @@
|
||||||
}
|
}
|
||||||
.footnote-ref {
|
.footnote-ref {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
padding-left: 2px;
|
||||||
|
}
|
||||||
|
.footnote-back {
|
||||||
|
font-size: small;
|
||||||
|
text-decoration: none;
|
||||||
|
padding-left: .5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
figure {
|
figure {
|
||||||
|
@ -198,6 +207,15 @@
|
||||||
content: "Figure " counter(figureNumber) " : ";
|
content: "Figure " counter(figureNumber) " : ";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.exercise {
|
||||||
|
background-color: #f2f1f1;
|
||||||
|
width: 90%;
|
||||||
|
margin: 0 auto;
|
||||||
|
border: 2px solid #d80669;
|
||||||
|
border-radius: .5em;
|
||||||
|
padding: 0 .5em;
|
||||||
|
}
|
||||||
|
|
||||||
blockquote {
|
blockquote {
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,15 +26,21 @@ $endif$
|
||||||
$for(css)$
|
$for(css)$
|
||||||
<link rel="stylesheet" href="$css$" />
|
<link rel="stylesheet" href="$css$" />
|
||||||
$endfor$
|
$endfor$
|
||||||
|
<!-- Allow to use -V noscript=true with pandoc
|
||||||
|
in order to avoid to insert these lines
|
||||||
|
when they are unnecessary. -->
|
||||||
|
$if(noscript)$
|
||||||
|
$else$
|
||||||
<link href="/interface.css" rel="stylesheet" type="text/css" />
|
<link href="/interface.css" rel="stylesheet" type="text/css" />
|
||||||
<script src="https://unpkg.com/pagedjs/dist/paged.polyfill.js"></script>
|
<script src="/paged.polyfill.js"></script>
|
||||||
|
<script src="/reload-in-place.js"></script>
|
||||||
|
$endif$
|
||||||
$for(header-includes)$
|
$for(header-includes)$
|
||||||
$header-includes$
|
$header-includes$
|
||||||
$endfor$
|
$endfor$
|
||||||
$if(math)$
|
$if(math)$
|
||||||
$math$
|
$math$
|
||||||
$endif$
|
$endif$
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
$for(include-before)$
|
$for(include-before)$
|
||||||
|
|
Loading…
Reference in New Issue