diff options
author | Karl Berry <karl@freefriends.org> | 2017-11-22 22:44:42 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2017-11-22 22:44:42 +0000 |
commit | 6ded4238ca0913166ea4b5a5efdde5f44900d3e8 (patch) | |
tree | 0647eeedddb841e93d9eb7f6c44b6bd111a47832 | |
parent | 1bea5926931cacb1ac5323dc459a8c297f3b9871 (diff) |
lyluatex (22nov17)
git-svn-id: svn://tug.org/texlive/trunk@45886 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r-- | Master/texmf-dist/doc/support/lyluatex/LICENSE | 22 | ||||
-rw-r--r-- | Master/texmf-dist/doc/support/lyluatex/README.md | 56 | ||||
-rw-r--r-- | Master/texmf-dist/doc/support/lyluatex/lyluatex.pdf | bin | 0 -> 123820 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/support/lyluatex/lyluatex.tex | 138 | ||||
-rwxr-xr-x | Master/texmf-dist/scripts/lyluatex/lyluatex.lua | 186 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/lyluatex/lyluatex.sty | 73 | ||||
-rwxr-xr-x | Master/tlpkg/bin/tlpkg-ctan-check | 2 | ||||
-rwxr-xr-x | Master/tlpkg/libexec/ctan2tds | 1 | ||||
-rw-r--r-- | Master/tlpkg/tlpsrc/collection-music.tlpsrc | 1 | ||||
-rw-r--r-- | Master/tlpkg/tlpsrc/lyluatex.tlpsrc | 0 |
10 files changed, 478 insertions, 1 deletions
diff --git a/Master/texmf-dist/doc/support/lyluatex/LICENSE b/Master/texmf-dist/doc/support/lyluatex/LICENSE new file mode 100644 index 00000000000..7dc50b19781 --- /dev/null +++ b/Master/texmf-dist/doc/support/lyluatex/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 jperon + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/Master/texmf-dist/doc/support/lyluatex/README.md b/Master/texmf-dist/doc/support/lyluatex/README.md new file mode 100644 index 00000000000..d69f9e3f7f8 --- /dev/null +++ b/Master/texmf-dist/doc/support/lyluatex/README.md @@ -0,0 +1,56 @@ +This material is subject to the MIT license. + +# Lyluatex +## Usage + +In the preable of your document, include the package `lyluatex`: + + \usepackage{lyluatex} + +The `program` option permits the definition of an alternative path to +`lilypond`, for example: + + \usepackage[program=/opt/lilypond-dev/lilypond]{lyluatex} + +Thereafter, you can include a lilypond file with the command: + + \includely[staffsize=17]{CHEMIN/VERS/LA/PARTITION} + +The argument `staffsize`, which is optional, changes the size of the score. You +can change the size for all the subsequent scores in a document by placing the +following command before your first include statement to be so affected: + + \def\staffsize{24} + +Next, you simply need to compile the document normally with the command +`lualatex -shell-escape` : + + lualatex -shell-escape DOCUMENT.TEX + +Another "more secure" option is to add `lilypond` to default allowed commands : + + shell_escape_commands=$(kpsewhich -expand-var '$shell_escape_commands'),lilypond lualatex DOCUMENT.TEX + +On systems with low RAM, when working on big documents, you could encounter +*buffer overflows* in `lilypond` calls. In that case, first compile with option +`-draftmode`, then compile again without this option. + +You can also input music directly into your docoment with the `ly` environment. +This is only recommended for very short snippets. For example: + + \begin{ly} + \relative c' { c d e f g a b c } + \end{ly} + + +## Migration from `lilypond-book` + +In order to facilitate the migration from `lilypond-book`, `lyluatex` defines +the command `\lilypondfile` with the same arguments as `\includely`. There is +also the environment `lilypond` which is the same as `ly`, and the command +`\lilypond` should work as with `lilypond-book`. + +In this manner, documents typeset with `lilypond-book` can be adapted to use +`lyluatex` without much difficulty. Just keep in mind that apart from the +`staffsize` parameter, the optional parameters that `lilypond-book` supports are +not supported by `lyluatex` (at least for now). diff --git a/Master/texmf-dist/doc/support/lyluatex/lyluatex.pdf b/Master/texmf-dist/doc/support/lyluatex/lyluatex.pdf Binary files differnew file mode 100644 index 00000000000..7a91f2751ec --- /dev/null +++ b/Master/texmf-dist/doc/support/lyluatex/lyluatex.pdf diff --git a/Master/texmf-dist/doc/support/lyluatex/lyluatex.tex b/Master/texmf-dist/doc/support/lyluatex/lyluatex.tex new file mode 100644 index 00000000000..46d975cdb4c --- /dev/null +++ b/Master/texmf-dist/doc/support/lyluatex/lyluatex.tex @@ -0,0 +1,138 @@ +\documentclass[]{article} +\usepackage{lmodern} +\usepackage{amssymb,amsmath} +\usepackage{ifxetex,ifluatex} +\usepackage{fixltx2e} % provides \textsubscript +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[T1]{fontenc} + \usepackage[utf8]{inputenc} +\else % if luatex or xelatex + \ifxetex + \usepackage{mathspec} + \else + \usepackage{fontspec} + \fi + \defaultfontfeatures{Ligatures=TeX,Scale=MatchLowercase} +\fi +% use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +% use microtype if available +\IfFileExists{microtype.sty}{% +\usepackage[]{microtype} +\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts +}{} +\PassOptionsToPackage{hyphens}{url} % url is loaded by hyperref +\usepackage[unicode=true]{hyperref} +\hypersetup{ + pdfborder={0 0 0}, + breaklinks=true} +\urlstyle{same} % don't use monospace font for urls +\IfFileExists{parskip.sty}{% +\usepackage{parskip} +}{% else +\setlength{\parindent}{0pt} +\setlength{\parskip}{6pt plus 2pt minus 1pt} +} +\setlength{\emergencystretch}{3em} % prevent overfull lines +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} +\setcounter{secnumdepth}{0} +% Redefines (sub)paragraphs to behave more like sections +\ifx\paragraph\undefined\else +\let\oldparagraph\paragraph +\renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}} +\fi +\ifx\subparagraph\undefined\else +\let\oldsubparagraph\subparagraph +\renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}} +\fi + +% set default figure placement to htbp +\makeatletter +\def\fps@figure{htbp} +\makeatother + + +\date{} + +\begin{document} + +\section{Lyluatex}\label{lyluatex} + +\subsection{Usage}\label{usage} + +In the preable of your document, include the package \texttt{lyluatex}: + +\begin{verbatim} +\usepackage{lyluatex} +\end{verbatim} + +The \texttt{program} option permits the definition of an alternative +path to \texttt{lilypond}, for example: + +\begin{verbatim} +\usepackage[program=/opt/lilypond-dev/lilypond]{lyluatex} +\end{verbatim} + +Thereafter, you can include a lilypond file with the command: + +\begin{verbatim} +\includely[staffsize=17]{CHEMIN/VERS/LA/PARTITION} +\end{verbatim} + +The argument \texttt{staffsize}, which is optional, changes the size of +the score. You can change the size for all the subsequent scores in a +document by placing the following command before your first include +statement to be so affected: + +\begin{verbatim} +\def\staffsize{24} +\end{verbatim} + +Next, you simply need to compile the document normally with the command +\texttt{lualatex\ -shell-escape}~: + +\begin{verbatim} +lualatex -shell-escape DOCUMENT.TEX +\end{verbatim} + +Another ``more secure'' option is to add \texttt{lilypond} to default +allowed commands~: + +\begin{verbatim} +shell_escape_commands=$(kpsewhich -expand-var '$shell_escape_commands'),lilypond lualatex DOCUMENT.TEX +\end{verbatim} + +On systems with low RAM, when working on big documents, you could +encounter \emph{buffer overflows} in \texttt{lilypond} calls. In that +case, first compile with option \texttt{-draftmode}, then compile again +without this option. + +You can also input music directly into your docoment with the +\texttt{ly} environment. This is only recommended for very short +snippets. For example: + +\begin{verbatim} +\begin{ly} +\relative c' { c d e f g a b c } +\end{ly} +\end{verbatim} + +\subsection{\texorpdfstring{Migration from +\texttt{lilypond-book}}{Migration from lilypond-book}}\label{migration-from-lilypond-book} + +In order to facilitate the migration from \texttt{lilypond-book}, +\texttt{lyluatex} defines the command +\texttt{\textbackslash{}lilypondfile} with the same arguments as +\texttt{\textbackslash{}includely}. There is also the environment +\texttt{lilypond} which is the same as \texttt{ly}, and the command +\texttt{\textbackslash{}lilypond} should work as with +\texttt{lilypond-book}. + +In this manner, documents typeset with \texttt{lilypond-book} can be +adapted to use \texttt{lyluatex} without much difficulty. Just keep in +mind that apart from the \texttt{staffsize} parameter, the optional +parameters that \texttt{lilypond-book} supports are not supported by +\texttt{lyluatex} (at least for now). + +\end{document} diff --git a/Master/texmf-dist/scripts/lyluatex/lyluatex.lua b/Master/texmf-dist/scripts/lyluatex/lyluatex.lua new file mode 100755 index 00000000000..e9f333fc4f4 --- /dev/null +++ b/Master/texmf-dist/scripts/lyluatex/lyluatex.lua @@ -0,0 +1,186 @@ +local err, warn, info, log = luatexbase.provides_module({ + name = "lyluatex", + version = '0', + greinternalversion = internalversion, + date = "2017/11/19", + description = "Module lyluatex.", + author = "The Gregorio Project (see CONTRIBUTORS.md)", + copyright = "2008-2017 - The Gregorio Project", + license = "MIT", +}) + +local md5 = require 'md5' + + +LILYPOND = 'lilypond' +TMP = 'tmp_ly' +N = 0 + + +function ly_definir_programme(lilypond) + if lilypond then LILYPOND = lilypond end +end + + +function contenuIntegral(contenu) + local content ="" + for i, Line in ipairs(contenu:explode('\n')) do + if Line:find("^%s*[^%%]*\\include") then + local i = io.open(Line:gsub('%s*\\include%s*"(.*)"%s*$', "%1"), 'r') + if i then + content = content .. contenuIntegral(i:read('*a')) + else + content = content .. Line .. "\n" + end + else + content = content .. Line .. "\n" + end + end + return content +end + + +function direct_ly(ly, largeur, facteur) + N = N + 1 + facteur = calcul_facteur(facteur) + ly = ly:gsub('\\par ', '\n'):gsub('\\([^%s]*) %-([^%s])', '\\%1-%2') + local sortie = TMP..'/'..string.gsub(md5.sumhexa(contenuIntegral(ly))..'-'..facteur..'-'..largeur, '%.', '-') + if not lfs.isfile(sortie..'-systems.tex') then + compiler_ly(entete_lilypond(facteur, largeur - 10)..'\n'..ly, sortie) + end + retour_tex(sortie) +end + + +function inclure_ly(entree, currfiledir, largeur, facteur) + facteur = calcul_facteur(facteur) + nom = splitext(entree, 'ly') + entree = currfiledir..nom..'.ly' + if not lfs.isfile(entree) then entree = kpse.find_file(nom..'.ly') end + if not lfs.isfile(entree) then err("Le fichier %s.ly n'existe pas.", nom) end + local i = io.open(entree, 'r') + ly = i:read('*a') + i:close() + local sortie = TMP..'/' ..string.gsub(md5.sumhexa(contenuIntegral(ly))..'-'..facteur..'-'..largeur, '%.', '-') + if not lfs.isfile(sortie..'-systems.tex') then + compiler_ly(entete_lilypond(facteur, largeur - 10)..'\n'..ly, sortie, dirname(entree)) + end + retour_tex(sortie) +end + + +function compiler_ly(ly, sortie, include) + mkdirs(dirname(sortie)) + local commande = LILYPOND.." ".. + "-dno-point-and-click ".. + "-dbackend=eps ".. + "-djob-count=2 ".. + "-ddelete-intermediate-files " + if include then commande = commande.."-I '"..lfs.currentdir().."/"..include.."' " end + commande = commande.."-o "..sortie.." -" + local p = io.popen(commande, 'w') + p:write(ly) + p:close() +end + + +function entete_lilypond(facteur, largeur) + return string.format( +[[%%En-tête +\version "2.18.2" +#(define default-toplevel-book-handler + print-book-with-defaults-as-systems ) + +#(define toplevel-book-handler + (lambda ( . rest) + (set! output-empty-score-list #f) + (apply print-book-with-defaults rest))) + +#(define toplevel-music-handler + (lambda ( . rest) + (apply collect-music-for-book rest))) + +#(define toplevel-score-handler + (lambda ( . rest) + (apply collect-scores-for-book rest))) + +#(define toplevel-text-handler + (lambda ( . rest) + (apply collect-scores-for-book rest))) + + +#(set-global-staff-size %s) + + +%%Paramètres de la partition +\paper{ + indent = 0\mm + line-width = %s\pt +} + +%%Partition originale +]], +facteur, +largeur +) +end + + +function calcul_facteur(facteur) + if facteur == 0 then facteur = fontinfo(font.current()).size/39321.6 end + return facteur +end + + +function retour_tex(sortie) + local i = io.open(sortie..'-systems.tex', 'r') + contenu = i:read("*all") + i:close() + texoutput, _ = string.gsub( + contenu, + [[includegraphics{]], [[includegraphics{]]..dirname(sortie) + ) + tex.print(([[\noindent]]..texoutput):explode('\n')) +end + + +function dirname(str) + if str:match(".-/.-") then + local name = string.gsub(str, "(.*/)(.*)", "%1") + return name + else + return '' + end +end + + +function splitext(str, ext) + if str:match(".-%..-") then + local name = string.gsub(str, "(.*)(%." .. ext .. ")", "%1") + return name + else + return str + end +end + + +function mkdirs(str) + path = '.' + for dir in string.gmatch(str, '([^%/]+)') do + path = path .. '/' .. dir + lfs.mkdir(path) + end +end + + +local fontdata = fonts.hashes.identifiers +function fontinfo(id) + local f = fontdata[id] + if f then + return f + end + return font.fonts[id] +end + + +mkdirs(TMP) diff --git a/Master/texmf-dist/tex/latex/lyluatex/lyluatex.sty b/Master/texmf-dist/tex/latex/lyluatex/lyluatex.sty new file mode 100644 index 00000000000..f3cc35dbf22 --- /dev/null +++ b/Master/texmf-dist/tex/latex/lyluatex/lyluatex.sty @@ -0,0 +1,73 @@ +\ProvidesPackage{lyluatex} + +% Dépendances +\RequirePackage{luatexbase} +\RequirePackage{luaotfload} +\RequirePackage{kvoptions} +\RequirePackage{graphicx} +\RequirePackage{keycommand} +\RequirePackage{environ} +\RequirePackage{currfile} +% Options +\DeclareStringOption[lilypond]{program}[lilypond] +\ProcessKeyvalOptions* +% Script lua +\directlua{dofile(kpse.find_file("lyluatex.lua"))} +\directlua{LILYPOND = '\lyluatex@program'} + +% Une tricherie un peu sale pour récupérer la largeur de ligne +\let\bs\textbackslash +{\catcode`p=12 \catcode`t=12 \gdef\un#1pt{#1}} +\newcommand*{\largeur}{\expandafter\un\the\linewidth} +% Taille des partitions +% Si la valeur est 0, elle sera automatiquement calculée +% à partir de la taille de police. +\def\staffsize{0} +\let\localstaffsize\staffsize + + +% Commandes principales +% Inclusion d'un fichier ly +\newkeycommand*\includely[staffsize=\staffsize][autres][1]{% +\directlua{% + inclure_ly( + "\luatexluaescapestring{#1}", + "\luatexluaescapestring{\currfiledir}", + \luatexluaescapestring{\largeur}, + \luatexluaescapestring{\commandkey{staffsize}} + )% +}% +} + +% Inclusion d'un fragment intégré au document (environnement de base) +\NewEnviron{compilerly}{% +\directlua{% + direct_ly( + "\luatexluaescapestring{\unexpanded\expandafter{\BODY}}", + \luatexluaescapestring{\largeur}, + \luatexluaescapestring{\localstaffsize} + )% +}% +} + +% Commande et environnement avec paramètres +\newkeycommand{\lily}[staffsize=\staffsize][autres][1]{% +\def\localstaffsize{\commandkey{staffsize}}% +\begin{compilerly}% +{#1} +\end{compilerly}% +} + +\newkeyenvironment{ly}[staffsize=\staffsize][autres]{% +\def\localstaffsize{\commandkey{staffsize}}% +\compilerly% +}{% +\endcompilerly% +} + +% Commandes pour la compatibilité avec lilypond-book +\let\lilypondfile\includely +\protected\def\lilypond{\def\reserved@a{lilypond}% + \ifx\reserved@a\@currenvir \expandafter \ly + \else \expandafter\lily \fi} +\let\endlilypond\endly diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check index b1ca5512988..d5cd5fccff2 100755 --- a/Master/tlpkg/bin/tlpkg-ctan-check +++ b/Master/tlpkg/bin/tlpkg-ctan-check @@ -398,7 +398,7 @@ my @TLP_working = qw( luamesh luamplib luaotfload luapackageloader luasseq luatex85 luatexbase luatexja luatexko luatextra luatodonotes luaxml - lwarp lxfonts ly1 + lwarp lxfonts ly1 lyluatex m-tx macros2e macroswap mafr magaz mailing mailmerge make4ht makebarcode makebase makebox makecell makecirc makecmds makedtx makeglos makeplot maker diff --git a/Master/tlpkg/libexec/ctan2tds b/Master/tlpkg/libexec/ctan2tds index 8e28cf2a4d3..36b7d5d5102 100755 --- a/Master/tlpkg/libexec/ctan2tds +++ b/Master/tlpkg/libexec/ctan2tds @@ -2792,6 +2792,7 @@ $standardttf = '\.ttf|\.TTC'; 'lualatex-math' => '\.lua$', 'luamesh' => '\.lua$', 'luasseq' => '\.lua$', + 'lyluatex' => '\.lua$', 'make4ht' => 'filters|\.lua$', 'mycv' => 'mycv_split_contents\.pl', 'pgfmolbio' => '\.lua$', diff --git a/Master/tlpkg/tlpsrc/collection-music.tlpsrc b/Master/tlpkg/tlpsrc/collection-music.tlpsrc index 25df4193495..776de681d8d 100644 --- a/Master/tlpkg/tlpsrc/collection-music.tlpsrc +++ b/Master/tlpkg/tlpsrc/collection-music.tlpsrc @@ -16,6 +16,7 @@ depend guitarchordschemes depend harmony depend leadsheets depend lilyglyphs +depend lyluatex depend m-tx depend musicography depend musixguit diff --git a/Master/tlpkg/tlpsrc/lyluatex.tlpsrc b/Master/tlpkg/tlpsrc/lyluatex.tlpsrc new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/Master/tlpkg/tlpsrc/lyluatex.tlpsrc |