On 1/19/2018 2:37 PM, Urs Liska wrote:
Hi Knut,
Am 19.01.2018 um 13:38 schrieb Knut Petersen:
Am 19.01.2018 um 09:37 schrieb Urs Liska:
I'm contributing to a LuaLaTeX package
(https://github.com/jperon/lyluatex) that uses an external program
(LilyPond) to generate images to be included in the LaTeX document. I
need to pass the used fonts to LilyPond, and I didn't manage to
retrieve the necessary information in Lua.
What I need is
a) which families are currently set as roman, sans and mono fonts
b) the "family" name of these. [...]
So you want to teach lilypond to use the fonts latex uses.
Yes, it's awesome when included scores use the same fonts as the
surrounding text.
In a similar project I use this code fragment to get information about
the current TeX font and to pass it to lilypond:
\else
{
\mdseries\@llftmp
\immediate\write18{
LANG=c
FONT=`echo '\fontname\font'
| sed -e 's/"//g'
| sed -e
's/\@esc[\@esc([[:print:]]*\@esc)\@esc][[:print:]]*/\@esc1/'`
;
otfinfo --info `kpsewhich $FONT`
| grep "Full name:"
| sed -e 's/Full
name:[[:blank:]]*\@esc([[:print:]]*\@esc)/\@esc\@esc
def \@esc\@esc fontfullname\@cbopen\@esc 1\@cbclose/'
> ourfont.tex}
\input "ourfont.tex"
\@imwrtof{\@ht(define lyinlaFontName "\fontfullname")}
\@imwrtof{\@ht(define lyinlaFontSize (absFontSize \f@size))}
}
\fi
\@imwrtof is defined to immediately write to an output file that will
be processed by lilypond,
\@esc gives a literal "\",
\@ht gives a literal "#",
\@cbopen gives a literal "{",
\@cbclose gives a literal "}"
Obviously it does not compile, it requires --shell-escape,
That's not an issue, the lyluatex package needs that anyway to start
LilyPond.
and it is not OS-independent.
That's probably true.
Bt it might be a starting point for you.
The idea of the code is to take \fontname\font,
to process it as shown,
to get the font filename from kpsewhich,
and to use otfinfo to get the needed information.
The output of otfinfo is filtered and written to a TeX file,
that file is read after return from the shell,
and two scheme expression (for fontname and fontsize) are
written to a file that later will be processed by lilypond.
I can do that with little effort in the Lua layer (I'm working in anyway):
* get the absolute filename from the font object.
* run otfinfo -a with that filename
This should be straightforward to implement but hard to make OS
independent. While I personally don't care about that I vividly recall
that in an earlier life I felt strongly offended by the attitude "YOU
made the mistake of using Windows, so don't complain now" ...
otfinfo seems to be available on Windows and even included in
http://w32tex.org/ , but I'm not sure if that will be an acceptable
dependency. Of course I can start with implementing it for Linux and
make the option be limited to that.
But still I can't really believe that Lua can tell me the
postscriptname, "fullname", filename, but not the family.
Does anybody know if that's a deliberate limitation?
Something like this
\directlua {
function FontInfoField(id,name)
local t = fonts.hashes.identifiers[id]
if t and t.shared and t.shared.rawdata and
t.shared.rawdata.metadata then
local s = t.shared.rawdata.metadata[name]
if t then
tex.print(s)
end
end
end
}
\def\CurrentFontName
{\directlua{tex.sprint(FontInfoField(\fontid\font,"fontname"))}}
\def\CurrentFullName
{\directlua{tex.sprint(FontInfoField(\fontid\font,"fullname"))}}
\def\CurrentFamily
{\directlua{tex.sprint(FontInfoField(\fontid\font,"family"))}}
\def\CurrentFamilyName
{\directlua{tex.sprint(FontInfoField(\fontid\font,"familyname"))}}
\def\CurrentSubFamily
{\directlua{tex.sprint(FontInfoField(\fontid\font,"subfamily"))}}
\def\CurrentSubFamilyName
{\directlua{tex.sprint(FontInfoField(\fontid\font,"subfamilyname"))}}
\def\CurrentCompatibleName{\directlua{tex.sprint(FontInfoField(\fontid\font,"compatiblename"))}}
\def\test{%
\CurrentFontName \par
\CurrentFullName \par
\CurrentFamily \par
\CurrentFamilyName \par
\CurrentSubFamily \par
\CurrentSubFamilyName \par
\CurrentCompatibleName\par
}
\test \bf \test
should give
LMRoman10-Regular
LMRoman10-Regular
LM Roman 10
Latin Modern Roman
Regular
10 Regular
LM Roman 10 Regular
LMRoman10-Bold
LMRoman10-Bold
LM Roman 10
Latin Modern Roman
Bold
10 Bold
LM Roman 10 Bold
but it depends on the macro package how you'd really do it (this is a
somewhat generic approach which might work ok for latex but i didn't
test it)
Hans
-----------------------------------------------------------------
Hans Hagen | PRAGMA ADE
Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl
-----------------------------------------------------------------