From 0471f3307ee91295b8bac470a36716be40fd1c7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phaneDucasse?= Date: Fri, 23 Aug 2024 22:44:49 +0200 Subject: [PATCH] migrate to Latex 2023 + Pillar 10 --- .github/workflows/main.yml | 18 +++ Chapters/Blocks/figures/Architecture.pdf | Bin 0 -> 19415 bytes _support/latex/sbabook/.drone.yml | 109 ++++++++++++++++++ _support/latex/sbabook/.gitrepo | 8 +- _support/latex/sbabook/.travis.yml | 27 ----- .../latex/sbabook/CreativeCommons-BY-SA.pdf | Bin 0 -> 4615 bytes .../latex/sbabook/CreativeCommons-BYNOCND.pdf | Bin 12106 -> 0 bytes _support/latex/sbabook/README.markdown | 5 +- _support/latex/sbabook/ci/install-texlive | 73 ++++++------ _support/latex/sbabook/ci/list-deps | 100 ++++++++++++++++ _support/latex/sbabook/sbabook.bod.tex | 2 + .../sbabook/{sbabook.bod.cls => sbabook.cls} | 29 ++--- _support/latex/sbabook/sbabook.spiral.tex | 1 + _support/latex/sbabook/sbabook.tex | 13 +-- _support/latex/sbabook/texlive-2023.deps | 70 +++++++++++ _support/latex/sbabook/texlive.deps | 52 +++++++-- _support/latex/texlive.deps | 3 + 17 files changed, 405 insertions(+), 105 deletions(-) create mode 100644 .github/workflows/main.yml create mode 100644 Chapters/Blocks/figures/Architecture.pdf create mode 100644 _support/latex/sbabook/.drone.yml delete mode 100644 _support/latex/sbabook/.travis.yml create mode 100644 _support/latex/sbabook/CreativeCommons-BY-SA.pdf delete mode 100644 _support/latex/sbabook/CreativeCommons-BYNOCND.pdf mode change 100644 => 100755 _support/latex/sbabook/ci/install-texlive create mode 100644 _support/latex/sbabook/ci/list-deps create mode 100644 _support/latex/sbabook/sbabook.bod.tex rename _support/latex/sbabook/{sbabook.bod.cls => sbabook.cls} (96%) create mode 100644 _support/latex/sbabook/texlive-2023.deps create mode 100644 _support/latex/texlive.deps diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..c52ac88 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,18 @@ +name: Pillar >10 + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + schedule: + - cron: '0 0 * * 0' + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + build: + uses: SquareBracketAssociates/BookBuilderDashboard/.github/workflows/main.yml@newVersionOfPillar + with: + bookname: CorePharo diff --git a/Chapters/Blocks/figures/Architecture.pdf b/Chapters/Blocks/figures/Architecture.pdf new file mode 100644 index 0000000000000000000000000000000000000000..338097f9cbc79be279bead39dd33a7a3fbf8f959 GIT binary patch literal 19415 zcmbTd19)c3x-A@aj84)qI_%iCZQHi3jytw(+qP}1W83*Tk65k~ zack~MzrG`|vf?Dv8UDVINKPSeElo<<>8klt`TTIrb!JX9P{JYX(ZT^pUuLm~) zrL4V(mkTS;L5nlR8cA?1J3WvEx7xX_lq+Ojzqd5fltT{ev26COGc=6 ze?dIa0}eI{aC{OM%woA!8+j4X0>?Op^HBu zw;D_MIj~qIqc9lUOR5aOb|obBre`-`eNK>n5SgX-Fe;R`3B-0z(JvDG$g2 z{89qrw#5binaE~Wi4$rHz-~4+EpVLwB0rq`U9t8J;dK3qdpNoN9L)JLnob9|@>&vV z*MJT6;YQ=45&>DYn>Pcs(5WmAb>OgGZqWBcV$mK|o+W-Mov%2s0_f9tR+noB2jEG64XKH?f|GN$C$9y@lLVB3Ww$=7p7S?jdnWO4Kq!C zGX}IMPALKw8JmN{g4s;iIs3jXlRn|yv~tBZ8OJzuGm;>w19O8s z5k2?;yBN=@YVpzGC5pch27bwvA2m+vucGNUE~YD=1VHU}A!97B1?BmSYKuAGAR6_m zY+V8T7tsoJr>%V`cdMw(dsn(U&UxrEm<>Z~xrxj?F&VqI77ola*p5}tfwV{W>}1j6 zzA{A<%&LB)=o}fFZ%|5QmwD{y6S6TDX0$NbBv#rq>BGH@IH@+0gjRa4owrZw>F~%gpo>9NA9ZnrxT3zzd97kZwb+G;(F3Ks>m$_IVx*&;APR6 zzPwTU-^bj6H_u|TAZv|hyD(=|E|#m7fYI3Ex)a8Qm$e7xP;*Aud!C{{s&;kIX_^yX z!T?~}ludO4r03Yha|9aR18e|WP4|@ByKCMXqq2b^#<0?NEbVbsALW7tQ>6h4D4{|{{;A~EbTwa?QlN# z^^Xb?2KpvCyjIRQYSbS9BNH1#zh44V>+9G;pZ+tjw)!<*aq|3~)XV3_d#=9ELv!; z4M-|^c^Vw1KWoU#)8a7yRpVd7vV1^)4J(O5gG0shc?em4&W?)Tz|lm{K*(0d<)7ye z9UU{ne?F=HemLbRfvL+Wt#C2j8&-Cw({>BS0~(C{8U?5h+{F9g?FX-m1O6*Swp4rV zcc;u$cA-ECk~gbNh~iOy8P%*TPf?$$y0S+`%FphVxApU9Ppz|a>-T+@ZI$=yRbbv_ zHD_59$}hOFL?p5PMAp;!d3iMl_wc}IcoI9o^e!(zBt(>y==nGz?fk;+18N zXS`<&jwfCxGGDrZI7eB(l<`YO^Av83hj(E zD)U_vN>?AAG8WuGmy=ArpG?R9`s&J=+)2qvF_oN4F7+8sF(%}VtD{w&#f0gx=4ZZU zWDM#TE2YW~-cBgoDymIBcTHnFZL7{#f#0#Hojl+&=DGfI2mnGr$b)v#EI-o#nGA=! zqXEGH+R37YBApR<8)b@!NsuZbHV;x?h;7S|HpPch6O}tNq27J8zNW%10$QgC4-(oL z0zU+ib9tw3|N7eX4V;e`&=-9^P8XFqJUk?|I_7?1=g9i%kuU=6^%J0{Wd4y0`uRCKp8 z=dfQ>Q>88cI4{s5PgC?N;dk^Ue5W&olhN<<2axE#V;zFFs3=*Us3?HR!Oh>Ibt|di zp1M9Z31#HXDb-bPkuzdRow8|A+tk@To;_AQnjv>fH>g8HMZb0z) zNQnFG3GpMofv9DDOhhy?gqKqV7h~#a$Zoo!JwkQgr!1%KJ62T`aYleMQulb%W|lrP z=NIiUwn{c5=i35fQu=b*C^q3d2D0BxHAh{V7p>}yYNH*kwwY}wiSW8>>YhhHx~B`K zEEN}lq0l8U#_2X1ZEYtV`nPh7LgpALbBj~0GSng$OzS@>j~I@Sj`)sXdVTJxW+hFj zGTmmMFIFFoCkiklQxSaChad=79#G2@MXDo#qlOeh_ju?B#UYSfAOjuPe^~+YOTo6{ z+noYIqo##aLE}1Ma7fbf7I8q`Dco_=q*p{nLgU`Xm_NF?zflqC≺umeNLv8qFoZ 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 1.0" -env: - global: - - PATH=$HOME/texlive/bin/x86_64-linux:$PATH - jobs: - - TEXLIVE_RELEASE=rolling - - TEXLIVE_RELEASE=2018 - -install: - - ./ci/install-texlive - -script: - - latexmk - -after_failure: - - cat sbabook.log - -deploy: - - provider: releases - edge: true - api_key: - secure: tOQFCGi5LjrbGVGh22mQmLZvo6aAjw17pj6Hd2mpcgaMGwjNG7gBbvODFfuyCZMorVBwTu5YBk2QSXY9lk0xhmSfZ5XdPAh6foC/vP+y8XZzZV/YsrFR0yltGp6CFL7QtxoTiK3h7VmlD2gM8pgThG3N68Dy/tKxuSEednOOjBI= - file: sbabook.pdf - on: - repo: cdlm/sbabook - tags: true - condition: $TEXLIVE_RELEASE = rolling diff --git a/_support/latex/sbabook/CreativeCommons-BY-SA.pdf b/_support/latex/sbabook/CreativeCommons-BY-SA.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7ffff96c5561c845657793ea346ceb9993f76d18 GIT binary patch literal 4615 zcmai2c|4ST_g0q4Afg2^#$(SiGiER&WDgC=Qg((JjAWRZEG1dWzC@B`EK!#1OJy%) zDF)eP-;#ZakmMcD`g?!RAMgFoeSfa+bV$7BNKz) z-UXo-lv@^8ilnZv zQFbo4bY!$0I`Nb|Oz>tkV5ega8=DC&$zMdA2-{!oET~BR^&oX#;IiVk*!4??I|n`o zd&S>&XKahf(J&*>_uip$)?ckdHSsg)_iJ4)8r#k|SEauIrQhguNXz2RO7mHpX+`Fz z-Lj@o-V}dzdi$Yz6J>-Ne~pPLpLIxm^*nin>%i54`s+Tjzdn`dL;SAdr2HkRw@8v< zKknPXkNqV=vG3&lzQ9qV&*td(818Rvw^D0XvZM}5zEpYgUe=usGWc%#xN3leE=qLR zaY!iddb0PhN`9dl9;1`Jy}vy>n{dCdZRuQC)~hM;Y-Eta^+4;}{3BYP#pws zdD;DW#gAs$zV!=BcN;!PrczbPE-PBGed;e+h71%l zh4Z@2eEYn;++NXSQ%SjpH&;s9=tyMe)Wi7-A$>k9$x~#ug}inerTB?#@OM`0Ys;tN z#OipC)lE`$#Q?Wlp}T&4G&4+vxXNPdzpV z1i3|JiDzHOJW$mkFN6ZxS+=++Z@+Ga)wArC)O!Y}w?jVmr2_AMa=&3D&2QT>f3HBT zUvKQ^VBDO2{D@%h^#%)io5+0m;j+E%WR%Xu!jwmI_TV?rY|Brp8A7>`;O42u7rTD5 zgC{?;pWyvb2`+8yIZ<2i+&5ca=myfzz^xGRZ0CBdWzmF%fBe-}v&b~1i{%`FB~K$B zXcHH2s$x53i*1S}g=uf92LVr`LN9WL^8EM6U_Uq!e4 zq^mzMoA)d@8>7-*%ktSWS6@;>Z6vsV&GwD`GuEz(Fp3(5CmmB-LRYx}- zkpGs)T{_M7m8oMde7h|j>thZ0l
    bvi> zY*pMnMgb)PQ~U=0YrRBfakBgh7OD0_5O0#R+j21|NrP`tVg&Mz5ZN){k&>Ze1FaM@p`<7;4*-_ z{3?1~T5&Z>*q&WzUS;_*Rwwov>+;P7b{9$oz+RV)PgO6Dtk7oJ zH97eU#6pa{dNA@R2(0JsCpA?*-HAQNQt-tF_sPxA+T1Kmg7Up2eJ6Yl$7xGv@--SZ z9l8_I*+tqhB13-sfLi3uGkZR4iPW0E-NZh0yFq=2kj)KcW zn;9TH(axTb5+TL5Kt$!)rNUUMmW8Hk3pce0f2@sg0!ufsYKP)TE#n$!!gl9L$#4f( zU@%+}`(m-~O|U#tlhKHv-7%sQ?{qe{OX(;`Z@4N3TjB zjq80rA(e9tvyOZ<0iti9J!qvj7;BP{hWeOX*>-ATDI~SB8XaoVMqj-+))rVcWQfU{ z8n3PnA5?u!_4Hq`_<=DpL7p2BOECNPI&I1^Dr02pQ3R5iq0OE%GH)C(!nXfRETi}H zd=94CboPB5fX8#&?3uTf2i`hqFpi0l{A3<8*(EK^=Beh5U^;0qzH>^$&#v2R5oq|% zi&UKQQAJG>=&mYdCY4e@GSU{6W;$KKGv6*EFZcRzFp8iK4ow%KUe^r>Y)QBx<3-oo zwi@$&gJnGI;cQ~sIn|k`3u<1UM1Ghdx6RJYgs|q{$`;$Vc$DkcJHveq&vrgOI#+1A zoQsPvs`k!)p*=jj(WdDpn-qf-_OR`8f^W;&3tZ>~KOrGQv113}s%i0dRqxwR?NyuF z&-fk|owrIu$L@9PB-B*M__g3f!{HaBR17u&IaRtF0WGnC^F-}E^0}7a7CmYG@|OXNJWISL zWtz%{Eu`GYE4(1l66Vq4m@BEGlHj}ZD>mcI=`CbQs(u&fnskC)eZ*>4g59v^N><4T^J|xYy8#@ zhXnGHg4m;0yYnGe#WVe$iDB}iUfYDFJ>B+6;xOt5oVrvz#@r8z)OH`N1@UH;%wFOi z*dE+l5(?W}ZxDZ}>bD*fR-WRBbd;QyL%YO(&dCxRxh{9(j(d2mgy(@_>FT|q!XceS zQV^Vz>v}vTHqqAWtd93v?d$CI{8rIYB~|?9Q3a=ZEl%ZmUekQ)ZwK9I(;L=czKJ~! zoOB7v%5rwao5y#5_+@F@%rd5Rk-O>S{Am#%aY+g(Q~FqN z!~MXqQvu;zXXIH)z&>u1j$XI5kF(vm{ziUb5Jv$?sX0;j+iV*hfk;>HW9Kn|koCA! z$R+-;6APIW#VVoK370)vdSh!ukldA$2~&6VY8qhXLuh~|-&y`Pz)a)wM-e0oNTN`w zkm`ngbgeU?r=$s`Og44m;1H<~{f=GyZj`gHFIuiG@n|P|hqFRUXvG}Jrv%Rkd$upa z#*B=Z<9TViR2{n-^kdHKTs8*R5k66Wrb}()B()6E+11Rv^f1hWh|n&B0b1eM4~vmX zpy0v6>fP_^}4^xc0aDEoS2Lk}bhM(?R8H8_4^YR3417`B+ z=p4{qxrfZU`_`w0y{Y#t>tA+Du{qAdfmvx3!u`gMaypM zZF+PfU8Rftxb*GqKSYcVJKYg#v3CwaY6|c^E|&T>MPGMu%sWu@`c)?0f)s|Y-iG@Y zQB!Ig(a+)V zXtM42rD^K8i-o&CDReY@)YX)F)nS$39lw`xR@4zLG9jby^aJ0`9>LHW*l{}apybV& zv|XhZN?{&p;2XPRXF>cGZWS+rp!LIyiDL#ujK=1$-~p6~O5s%KFix%B*-jP6G6-w{ z#t!S-02y*bGbL7ANRK&I$CF2@eB6<2%U^0H-GT=}!Qwh;ABd|$+V&2ZBN$ZtM-XoUsF9`YtY zlNIXGdOk)OM{=R+cXi!SxSw|1wIHy-X~X@!0HZj0Or2e-VN!@XYNB%spjqRq`0d06$tp(mIz+GTM15uot0mg@PeeCP2ier!*~^4~}g z?o;ROg&lKCVF{YQ-fdB#I&)4z6?Yc1iYLkOg%pQFtsgrZ>M{n>>ctxYigLZ1T!9t5 zYriqHGDaTQ0)6LpVSSTNsHLm(_9h`34sEcT(?hq(x2+5mg_G0{tukN(H+|jj=|4{o z9?L`>G_Nk#?J6|!3SS4Exm)jh$UZ-QT8}Zv|HU4c=PBU+DCPYP*$Nh%pK-m#7$^4_ zL{a{J?;sP%Vwi61%<0_6Z{;+GFP$lbzSN(tmE5I5K11@Ryp+oB=pg#Ddj=ny9k`X zFJAusG6hFtNP@CkbNigugvx0?NYYT(Xl7j48vR?VmWI8by&^p9JqvQ^gae$n_WN|3 z`#uNfT1KC$;M}l(T2I>7kzGA9sYh?PJW2uhCx-aP%9{AN;~<6@Cmci{hs9&m3Ep5! zDD4;~3k4%&t%0;NBF>Erh97xdAjAkqBHSiA;7BwVY)B+H7~{y65SmY>5w*O@myO9Z z4-7{B&ZU`Phz7xpOp7LgkIb_XkOuv!;3(Z6W*Q7Rk^uf)0|^Ydg2$4;mcS#0MnG#Y zEyHbEb=dz2h5a4+XQT#(jBzD6{gvVmrT>&t_;3C{I)RX@hWcQb%F)b@v>eI)LleYE z0eBQ<^iLMqe-3GVV{bd)h~k$G(csI@1QMC#K*YO~!6+G+yacUjn)4^)32vISS%_;Y z%0gjsP?RhJhCrZTvXW3)F(_1wM$;!?{|DpuLDx4$q1 z42t^y7#szsHUHl{I1>6V3`*#8>JKZS!dHvj+t literal 0 HcmV?d00001 diff --git a/_support/latex/sbabook/CreativeCommons-BYNOCND.pdf b/_support/latex/sbabook/CreativeCommons-BYNOCND.pdf deleted file mode 100644 index 50f150f4b84b565305c2c83c969185b4168ddafb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12106 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 E2ZEAN*Z=?k diff --git a/_support/latex/sbabook/README.markdown b/_support/latex/sbabook/README.markdown index e7fbe99..655c1bb 100644 --- a/_support/latex/sbabook/README.markdown +++ b/_support/latex/sbabook/README.markdown @@ -4,13 +4,12 @@ SBAbook — A LaTeX class for technical books This is a set of layout, typography, and markup definitions for LaTeX books based on the [memoir][] document class. It is intended for use by [Square Bracket Associates (SBA)][sba], and heavily customized in this direction — by this I mean it's made to setup specific semantic markup and typographic style, rather than to be flexible. -[![Build Status](https://travis-ci.org/cdlm/sbabook.svg?branch=master)](https://travis-ci.org/cdlm/sbabook) -[![Flattr this git repo](https://button.flattr.com/flattr-badge-large.png)](https://flattr.com/submit/auto?url=https%3A%2F%2Fgithub.com%2Fcdlm%2Fsbabook) +[![Donate](https://liberapay.com/assets/widgets/donate.svg)](https://liberapay.com/cdlm/donate "Donate using Liberapay") ## Usage (nearly there) -The preamble is limited to the minimum: +Here is the minimal preamble: ```latex \documentclass{sbabook} diff --git a/_support/latex/sbabook/ci/install-texlive b/_support/latex/sbabook/ci/install-texlive old mode 100644 new mode 100755 index 02f5fd1..eca7fca --- a/_support/latex/sbabook/ci/install-texlive +++ b/_support/latex/sbabook/ci/install-texlive @@ -4,6 +4,8 @@ trap 's=$?; echo "$0: Error on line "$LINENO": $BASH_COMMAND"; exit $s' ERR IFS=$'\n\t' # preamble from https://disconnected.systems/blog/another-bash-strict-mode/ +: "${TEXLIVE_TARBALL:=install-tl-unx.tar.gz}" + function die() { echo "$@" >&2 exit 1 @@ -11,49 +13,34 @@ function die() { function texlive-repo() { [[ $# -eq 1 ]] || die "${FUNCNAME[0]}: No release specified (YYYY or rolling)" - local release="$1" + local release="$1" url if [[ "$release" = rolling ]]; then - echo 'http://mirror.ctan.org/systems/texlive/tlnet' + url='http://mirror.ctan.org/systems/texlive/tlnet' else [[ "$release" = [0-9][0-9][0-9][0-9] ]] || die "${FUNCNAME[0]}: incorrect release '$release'" - echo "https://ftp.tu-chemnitz.de/pub/tug/historic/systems/texlive/${release}/tlnet-final/" + url="https://ftp.tu-chemnitz.de/pub/tug/historic/systems/texlive/${release}/tlnet-final/" # the rolling release is missing the shasum, and the tlnet directory # US mirror: http://ftp.math.utah.edu/pub/tex/historic/systems/texlive/${release}/ fi -} - -function deps-file() { - if [[ "$1" = [0-9][0-9][0-9][0-9] ]]; then - echo "texlive-$1.deps" - else - echo texlive.deps - fi -} -function texlive-release() { - tlmgr --version \ - | grep 'TeX Live .*version' \ - | grep --only-matching '\d\d\d\d' + # resolve possible mirror to fixed URL + curl -LIs -o /dev/null -w '%{url_effective}' "$url" } -# Ensure meaningful default values for required environment variables. -# Override the full repository URL or set TEXLIVE_RELEASE to pick that year's frozen release. -# Defaults to the current rolling release. -: "${TEXLIVE_RELEASE:=rolling}" -: "${TEXLIVE_REPOSITORY:="$(texlive-repo "$TEXLIVE_RELEASE")"}" -: "${TEXLIVE_TARBALL:=install-tl-unx.tar.gz}" - function get-texlive-installer() { + [[ $# -eq 1 ]] || die "Usage: ${FUNCNAME[0]} texlive-repo-url" + local repo="$1" + # download, checksum, extract - curl --silent --location --remote-name-all "${TEXLIVE_REPOSITORY}/${TEXLIVE_TARBALL}"{,.sha512} - shasum --check "${TEXLIVE_TARBALL}.sha512" + curl --silent --location --remote-name-all "${repo}/${TEXLIVE_TARBALL}"{,.sha512} + sha512sum --check "${TEXLIVE_TARBALL}.sha512" tar --extract --gzip --file "${TEXLIVE_TARBALL}" } function texlive-profile() { cat <> texlive.profile - "$installer" --repository "$TEXLIVE_REPOSITORY" --profile texlive.profile -} + "$installer" --repository "$repo" --profile texlive.profile + tlmgr option repository "$repo" -function install-deps() { - xargs tlmgr install \ - latexmk \ - < "$(deps-file "$TEXLIVE_RELEASE")" + tlmgr update --self --all + tlmgr install latex-bin latexmk } # Only call the main function if this script was called as a command. This makes # it possible to source this script as a library. if [[ ${BASH_SOURCE[0]} == "$0" ]]; then - install-texlive - install-deps + # Override the full repository URL or set TEXLIVE_RELEASE to pick that year's frozen release. + # Defaults to the current rolling release. + release="${1:-${TEXLIVE_RELEASE:-rolling}}" + repo="${2:-${TEXLIVE_REPOSITORY:-$(texlive-repo "$release")}}" + + install-texlive "$release" "$repo" fi diff --git a/_support/latex/sbabook/ci/list-deps b/_support/latex/sbabook/ci/list-deps new file mode 100644 index 0000000..25dd1b8 --- /dev/null +++ b/_support/latex/sbabook/ci/list-deps @@ -0,0 +1,100 @@ +#!/usr/bin/env bash +set -o nounset +set -o errexit +set -o errtrace +set -o pipefail +IFS= +trap 's=$?; echo "$0: Error on line "$LINENO": $BASH_COMMAND"; exit $s' ERR + +shopt -s extglob +declare -A DEPS + +: "${TEXLIVE_REPOSITORY:=http://mirror.ctan.org/systems/texlive/tlnet}" +TEXLIVE_REPOSITORY="$(curl -LIs -o /dev/null -w '%{url_effective}' "$TEXLIVE_REPOSITORY")" +PREFIX="$(kpsewhich --var-value TEXMFROOT)" + +function die { + local code="${1:-1}" + [[ $# -ge 1 ]] && shift + + printf "$(tput setaf 1)%s$(tput sgr0)\n" "$@" 1>&2 + exit "$code" +} + +function info-inline { + printf "$(tput setaf 3)%s$(tput sgr0)" "$@" 1>&2 +} + +function info { + info-inline "$@" + printf "\n" 1>&2 +} + +function texlive-release() { + tlmgr --version \ + | sed '/^tlmgr/d ; s/.*version //' +} + +function filter-inputs { + sed -e '\#^INPUT '"$PREFIX"'/texmf-dist#!d' \ + -e 's#^INPUT '"$PREFIX"'/##' \ + "$@" +} + +function query-package-containing { + local filename="${1?}" + tlmgr --repository "$TEXLIVE_REPOSITORY" \ + search --global --file "$filename" \ + | sed '/^\t/d ; /^tlmgr:/d ; s/:$//' +} + +function list-package-files { + local pkgname="${1?}" + tlmgr --repository "$TEXLIVE_REPOSITORY" \ + info --list "$pkgname" \ + | sed '/^ /!d ; s/^ *//' +} + +function encache-file { + local filename="${1?}" pkgname + pkgname="$(query-package-containing "${filename}")" + while read -r provided; do + DEPS["$provided"]="$pkgname" + done < <(list-package-files "$pkgname") +} + +function package-name { + local filename="${1?}" + info-inline "$filename" + if [[ -z "${DEPS["$filename"]+found}" ]]; then + info " (querying ${TEXLIVE_REPOSITORY})" + encache-file "$filename" + echo "${DEPS["$filename"]}" || info "failed to resolve ${filename}" + else + info " (from ${DEPS[$filename]})" + fi +} + +function find-packages { + while read -r filename; do + package-name "$filename" + done +} + +function list-deps { + local main="${1:-main}" + main="${main%.@(tex|aux|fls)}" # extglob + [[ -f "$main.fls" ]] || die 1 "no such file: $main.fls" + + filter-inputs "$main.fls" | sort --unique > "$main.inputs" + info "$(wc -l "$main.inputs")" + + find-packages < "$main.inputs" | tee "$main.deps" + sort --unique --output "$main.deps" "$main.deps" +} + +# Only call the main function if this script was called as a command. This makes +# it possible to source this script as a library. +if [[ ${BASH_SOURCE[0]} == "$0" ]]; then + list-deps "$@" +fi diff --git a/_support/latex/sbabook/sbabook.bod.tex b/_support/latex/sbabook/sbabook.bod.tex new file mode 100644 index 0000000..a1617eb --- /dev/null +++ b/_support/latex/sbabook/sbabook.bod.tex @@ -0,0 +1,2 @@ +% Paper format for https://librairie.bod.fr +\providecommand{\setuppage}{\bodpage}\input{sbabook} diff --git a/_support/latex/sbabook/sbabook.bod.cls b/_support/latex/sbabook/sbabook.cls similarity index 96% rename from _support/latex/sbabook/sbabook.bod.cls rename to _support/latex/sbabook/sbabook.cls index e6ec422..2337e08 100644 --- a/_support/latex/sbabook/sbabook.bod.cls +++ b/_support/latex/sbabook/sbabook.cls @@ -1,7 +1,6 @@ \NeedsTeXFormat{LaTeX2e} -\ProvidesClass{sbabook}[2020/02/28] +\ProvidesClass{sbabook}[2024/03/18] -% \ExecuteOptions{a4paper,11pt,twoside} \ProcessOptions* \LoadClassWithOptions{memoir} @@ -20,19 +19,30 @@ \advance\stockheight 2\trimtop \advance\stockwidth 2\trimedge} +% Paper format for US trade paperback (e.g. Lulu) \newcommand{\paperbackpage}{ \stockustrade \setbleed{.125in} % \setbinding{5mm} \setlrmarginsandblock{.85in}{.65in}{*} \setulmarginsandblock{.75in}{.75in}{*}} - + +% Paper format for office binding (both A4 and letter paper) \newcommand{\spiralboundpage}{ \stockaivus \setbleed{0pt}% trims not required (unless we deliver this via Lulu as well?) \setlrmarginsandblock{1.25in}{1.25in}{*} \setulmarginsandblock{.75in}{1in}{*}} +% Paper format for https://librairie.bod.fr +\newcommand{\bodpage}{ + \setstocksize{220mm}{155mm} % final trimmed book dimensions + \setbleed{5mm} % additional paper, before trimming + \setlrmarginsandblock{.85in}{.65in}{*} + \setulmarginsandblock{.75in}{.75in}{*}} + +% Use this to select the page layout. +% Pass one of the above \FOOpage, or an equivalent custom macro \newcommand{\pagelayout}[1]{ \providecommand{\setuppage}{#1}% set default page layout \setuppage\checkandfixthelayout @@ -42,20 +52,12 @@ \raggedbottom -%%for www.BOD.fr -\newcommand{\bodpage}{ - \setstocksize{220mm}{155mm} % final trimmed book dimensions - \setbleed{5mm} % additional paper, before trimming - \setlrmarginsandblock{.85in}{.65in}{*} - \setulmarginsandblock{.75in}{.75in}{*}} -\pagelayout{\bodpage} - %%% %%% Fonts & paragraph typography %%% -\RequirePackage{fontspec,gentium,opensans,FiraMono} +\RequirePackage{fontspec,gentiumbook,opensans,FiraMono} -\setmainfont{Gentium Book Basic} +\setmainfont{Gentium Book Plus} \setsansfont{Open Sans}[ \@ifpackagelater{opensans}{2019/06/19}% test for font naming bug {}% 2019/06/20 fixed it @@ -500,7 +502,6 @@ %% verbatim setup \bvtopandtail % \bvsides \setlength{\bvboxsep}{.25em} -\tabson[4] \setverbatimfont{\normalfont\codefamily\small} \DeclareRobustCommand{\LaTeX}{% diff --git a/_support/latex/sbabook/sbabook.spiral.tex b/_support/latex/sbabook/sbabook.spiral.tex index 2327175..630cda9 100644 --- a/_support/latex/sbabook/sbabook.spiral.tex +++ b/_support/latex/sbabook/sbabook.spiral.tex @@ -1 +1,2 @@ +% Paper format for office binding (A4 or letter paper) \providecommand{\setuppage}{\spiralboundpage}\input{sbabook} diff --git a/_support/latex/sbabook/sbabook.tex b/_support/latex/sbabook/sbabook.tex index d66f4e8..70ce50b 100644 --- a/_support/latex/sbabook/sbabook.tex +++ b/_support/latex/sbabook/sbabook.tex @@ -1,13 +1,8 @@ -\documentclass[twoside,openany,showtrims]{sbabook.bod} +\documentclass[twoside,openany,showtrims]{sbabook} -%\pagelayout{\paperbackpage} - -\newcommand{\bodpage}{ - \setstocksize{220mm}{155mm} % final trimmed book dimensions - \setbleed{5mm} % additional paper, before trimming - \setlrmarginsandblock{.85in}{.65in}{*} - \setulmarginsandblock{.75in}{.75in}{*}} -\pagelayout{\bodpage} +% Setup paper format. +% Defaults to US trade paperback unless another format is already setup (see sbabook.*.tex) +\pagelayout{\paperbackpage} \usepackage[useregional]{datetime2} diff --git a/_support/latex/sbabook/texlive-2023.deps b/_support/latex/sbabook/texlive-2023.deps new file mode 100644 index 0000000..6451341 --- /dev/null +++ b/_support/latex/sbabook/texlive-2023.deps @@ -0,0 +1,70 @@ +auxhook +bigintcalc +bitset +booktabs +cm +ctablestack +datetime2 +datetime2-english +environ +epstopdf-pkg +eso-pic +etoolbox +fira +fontaxes +fontspec +footmisc +gentium-tug +gettitlestring +gitinfo2 +graphics +graphics-cfg +graphics-def +hycolor +hyperref +iftex +infwarerr +intcalc +kvdefinekeys +kvoptions +kvsetkeys +l3backend +l3kernel +l3packages +latex +latexconfig +listings +ltxcmds +lua-uni-algos +lualibs +luaotfload +luatexbase +memoir +mptopdf +multirow +opensans +pdfcol +pdfescape +pdftexcmds +pgf +polyglossia +ragged2e +refcount +rerunfilecheck +stringenc +tcolorbox +tex-ini-files +textcase +tikzfill +tools +tracklang +trimspaces +unicode-data +uniquecounter +url +varwidth +xcolor +xkeyval +xpatch +xstring +xtab diff --git a/_support/latex/sbabook/texlive.deps b/_support/latex/sbabook/texlive.deps index 82efead..6451341 100644 --- a/_support/latex/sbabook/texlive.deps +++ b/_support/latex/sbabook/texlive.deps @@ -1,34 +1,70 @@ +auxhook +bigintcalc +bitset +booktabs +cm ctablestack datetime2 datetime2-english environ +epstopdf-pkg eso-pic -filehook +etoolbox fira +fontaxes fontspec footmisc gentium-tug +gettitlestring gitinfo2 graphics -hyphen-english -import +graphics-cfg +graphics-def +hycolor +hyperref +iftex +infwarerr +intcalc +kvdefinekeys +kvoptions +kvsetkeys +l3backend +l3kernel +l3packages +latex +latexconfig listings +ltxcmds +lua-uni-algos +lualibs +luaotfload luatexbase memoir +mptopdf multirow opensans +pdfcol +pdfescape +pdftexcmds pgf polyglossia +ragged2e +refcount +rerunfilecheck +stringenc tcolorbox +tex-ini-files +textcase +tikzfill tools tracklang trimspaces -ulem +unicode-data +uniquecounter +url varwidth xcolor +xkeyval +xpatch xstring xtab - -fontaxes -ragged2e -textcase diff --git a/_support/latex/texlive.deps b/_support/latex/texlive.deps new file mode 100644 index 0000000..04d329a --- /dev/null +++ b/_support/latex/texlive.deps @@ -0,0 +1,3 @@ +amsmath +import +ulem \ No newline at end of file