Wie man Schriftarten zur Verfügung, um den LaTeX-interpreter in Matlab R2013a?
Ist es möglich, zum einbetten von LaTeX-formatierten text und Gleichungen in Matlab plots durch die Einstellung der text
Eigenschaft 'Dolmetscher' auf den Wert 'latex', z.B.
text(0.1, 0.5, 'Einstein: $E = m c^2$', ...
'Interpreter', 'latex', 'FontSize', 32)
Diese Gleichungen werden auf dem Bildschirm angezeigt als auch in den Darstellungen exportiert eps-Dateien.
Durch die entsprechenden LaTeX-Befehle ist es auch möglich die schriftart ändern, die von der standardmäßigen Computer Modern mit Serifen, z.B. Computer Modern Typewriter
text(0.1, 0.5, '\fontfamily{cmtt}\selectfont Einstein: $E = m c^2$', ...
'Interpreter', 'latex', 'FontSize', 32)
Meine Frage ist: Ist es möglich, fügen Sie zusätzliche Schriftarten in der Matlab-installation, so dass diese Schriftarten verfügbar für die Verwendung mit "Interpreter", 'latex', für die Darstellung auf dem Bildschirm sowie die Herstellung von eps-Dateien? Und wenn ja, wie?
Hintergrund
(Alle Pfade relativ zu den Matlab-installation /opt/MATLAB/R2013a
auf meinem Linux-system.)
Matlab enthält eine angepasste version des (La)TeX-interpreter. Es heißt über ein frontend m-file aufgerufen tex.m
im toolbox/matlab/graphics
nimmt LaTeX-code als argument und gibt dvi-Daten in den Ausgabe-argument. Die angepasste LaTeX-installation finden Sie in sys/tex
und enthält TeX-font-metric-Dateien unter sys/tex/tfm
.
Ich habe nicht alle Informationen, auf die Teile von Matlab, die machen das dvi. Jedoch, font-Daten für die Darstellung sind zu finden unter sys/fonts/ttf
und sys/fonts/type1
.
Zusätzliche fonts nutzbar, besteht deshalb aus zwei teilen: Macht es verfügbar für den LaTeX-interpreter, und macht es verfügbar für die rendering-Funktion. Der erste Teil kann in Angriff genommen werden durch die Manipulation tex.m
solche, die es generiert, der dvi durch eine unabhängige regelmäßige installation von LaTeX, und installieren Sie die schriftart auf das LaTeX in der üblichen Weise (z.B. font-Pakete). Sehen undocumentedmatlab.
Den zweiten Teil der Frage ist deshalb entscheidend: Wie fügen Sie zusätzliche Schriftarten in sys/fonts/ttf
und sys/fonts/type1
so, dass Sie nutzbar werden, indem Sie den dvi-renderer-Komponente von Matlab.
Konkreten Fall
Ich habe versucht, konkret zu lösen ist das zweite problem für einen besonderen Fall: Den Computer Modern Sans schriftart ist in der Matlab-LaTeX-installation durch tex/tfm/cmss10.tfm
, aber die entsprechende ttf und pfb-Dateien fehlen sys/fonts
so, dass es nicht gerendert.
Matlab-Sammlung von ttf-Dateien, die nicht angezeigt wird, um eine Art von Inventar. Ich habe deshalb einfach kopiert die Datei cmss10.ttf
von einer installation von matplotlib zu sys/fonts/ttf/cm/mwa_cmss10.ttf
nach der Datei-und Ordner-Namenskonventionen die anderen Dateien vorhanden. Dieses Verfahren wurde berichtet, arbeiten auf Alec ' s Web Log für Matlab 2011b auf Max OS X, aber auf meinem system hat es keine Wirkung, weder für die Anzeige noch eps exportieren.
Matlab-Sammlung von type1-Schriften mit einem komplexen Inventar, verteilt auf Dateien fonts.dir
, fonts.scale
, encodings.dir
und einen Ordner encodings
voller enc-Dateien. Wieder fand ich cmss10.pfb, dieses mal von einer TeXlive-installation, umbenannt und kopiert es, und machte Einträge in der inventory-Dateien nach dem Beispiel der anderen Schriftarten aufgelistet. Wieder, diese Prozedur hat keine Wirkung.
Weiß jemand mehr darüber, wie Matlab verwendet ttf und pfb-Dateien, und kann mir einen Tipp geben, wie man das cmss10-Dateien zugänglich Matlab-rendering? Oder hat jemand eine Vorschlag, wie zu Debuggen und finden Sie heraus, mehr über die Innenleben von Matlab ' s LaTeX-Unterstützung?
- In Bezug auf das OS-X-blog Matlab Lösung 1-1432GA relevant sein könnte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich investierte Stunden weiterer Forschungen in meine Frage und kamen mit einigen interessanten neuen Erkenntnissen, aber keine wirkliche Lösung. Trotzdem werde ich die Veröffentlichung meiner Ergebnisse hier, damit andere, die vielleicht untersuchen, diese zu beginnen. Ich poste es als "Antwort" nicht machen meine schon lange Frage, auch länger.
Vergleich zwischen Matlab alten (R2010a) und Strom (R2013a)
tex
undfonts
InfrastrukturFür die standard-Schrift Computer Modern Roman, der alten Infrastruktur enthält
und die aktuellen
TeX-font-metric-Dateien sind identisch. Die truetype-und type1-Dateien enthalten, die gleichen Glyphen-Daten, sondern wurden aufgeteilt in Dateien, die mit Latein (mwa) und Griechische Zeichen (mwb). Die pfm-Datei ist einfach verschwunden.Die alten type1-Dateien ein copyright-Vermerk 1997 durch das AMS, die neuen 2011 von den MW.
Dies zeigt, dass, um Computer Modern Sans aus einer alten Matlab-arbeiten in der aktuellen Matlab, könnte es ausreichend sein, kopieren
cmss10.ttf
undcmss10.pfb
zumwa_cmss10.ttf
undmwa_cmss10.pfb
, da sich die tfm-Datei ist noch vorhanden (siehe Frage)., Welche Dateien benutzt werden, die in R2013a?
Die zusätzliche dir-und enc-Dateien in
sys/fonts/type1
scheinen nicht genutzt zu werden, weil Sie diese löschen lässt-screen-rendering-und eps-generation voll funktionsfähig.Ich vermutete, dass die ttf-Dateien verwendet werden, für die Darstellung am Bildschirm und die pfb-Dateien für die Aufnahme in der generierten eps-Dateien. Der ehemalige scheint nicht der Fall zu sein, da das löschen von allen ttf-Dateien Blättern-screen-rendering-und eps-generation voll funktionsfähig auch. Matlab kann sich beschweren, wenn der Ordner jedoch
sys/fonts/ttf/cm
existiert nicht!!!Dies zeigt, dass a) es nicht notwendig, die Mühe mit der änderung der dir-und enc-Dateien, und b) es ist nicht notwendig, kopieren Sie die ttf-Datei.
Ist das einfügen neuer pfb-Dateien genug?
Nach
cmss10.pfb
aus einer alten Matlab kopiertsys/fonts/type1/cm/mwa_cmss10.pfb
mit Computer Modern Sans in einer Gleichung macht immer noch Matlab warnen, dass "cmss10 wird nicht unterstützt" und der Bildschirm-rendering ist nicht korrekt. Darüber hinaus generierte eps-Datei nicht richtig wiedergegeben.Jedoch die generierten eps-Datei enthält den Inhalt
mwa_cmss10.pfb
und der Grund, warum es nicht funktioniert, ist, dass die eingeschlossenen pfb-Datei definiert eine schriftart mit dem Namen "CMSS10", während die eps bezieht sich auf eine schriftart mit dem Namen "mwa_cmss10". Statt @Daniel E. Shub Lösung ändern Sie die Verweise in der eps, man kann die Datei Bearbeitenmwa_cmss10.pfb
und ändern Sie seine\FontName
zu "mwa_cmss10". Dies kann getan werden mit einem einfachen text-editor angewandt auf die pfb. Aber der bessere Weg ist, zu zerlegen, die pfb-Datei nach PostScript mitt1disasm
ändern Sie die PostScript-und dann wieder zusammenbauen, mitt1asm
. Diese Werkzeuge sind enthalten in den t1utils - Paket auf CTAN.Die resultierende eps immer noch nicht richtig funktionieren, wenn: Zeichen werden nicht korrekt positioniert, vor allem für größere Schriftgrößen.
Dies zeigt, dass die Präsenz der pfb-Datei allein nicht bietet Matlab mit dem richtigen font-Metriken, und, dass der dvi-Datei generiert von Matlab ist LaTeX nicht explizit position Zeichen sondern setzt auf die renderer diese Metriken.
Sehen tex.se für eine Frage nach einem workaround für den zweiten Punkt.
Bedeutet "hacken" vorhandene Schriftarten arbeiten?
Daniel E. Shub vorgeschlagen, seine Antwort nicht zu Schriftarten hinzufügen, jedoch überschreiben jene, die im Matlab-installation. Es gibt zwei Probleme mit diesem:
– Die richtige font metrics-sind noch nicht verfügbar zu Matlab. Überschreiben einer Schrift funktioniert also nur, und nur etwa, wenn die Metrik der ursprünglichen schriftart und die der neuen ähnlich sind.
Beispiel:
– Screen-rendering funktioniert nur in einigen Fällen. Für mich überschreiben mwa_cmr10 mit einem gepatchten cmss10 und mit
\rm
führte zu Computer Modern Sans gerendert auf dem Bildschirm und in der eps-Datei, wenn auch mit leicht falschen Positionierung. Allerdings überschreiben mwa_cmtt10 und mit\tt
nicht dazu führen, dass Computer Modern Sans gerendert auf dem Bildschirm; stattdessen Computer Modern Typewriter erbracht wurde.Dies bedeutet a), dass es eine andere unabhängige Quelle von font-Metriken für Matlab s-renderer. Soweit ich sagen kann, Sie kommen von keiner der Dateien unter
sys/tex
odersys/fonts
. b) Schriftkonturen sind nur in einigen Fällen Lesen die pfb-Dateien insys/fonts/type1/cm
.Abschluss
Das Innenleben des dvi-renderer in den letzten Matlab-daher bleibt mysteriös. Mögliche Kandidaten, wo die fehlenden Informationen können ausgeblendet werden, werden
toolbox/matlab/graphics/hardcopy.p
- und /odercom/mathworks/hg/uij/TextRasterizer.class
imjava/jar/hg.jar
.Werde ich aufhören, meine Untersuchungen für die Zeit (und werde haben Sie einen Blick auf psfrag 😉
dvi
Datei hat die falschen Metriken, weil Sie nicht ändern Sie dietfm
- Datei. Haben Sie versucht, die Umbenennung cmms10.tfm werden, cmr10.tfm? Meine Vermutung ist, dass die Magie/problem in Bezug auf die Namensänderung voncmr10.tfm
zumwa_cmr10.pfb
Ich machte die Bemerkung auf Undokumentierte Matlab, die Sie finden. Scheinbar habe ich unterschätzt die Schwierigkeit der Herstellung der Matlab-DVI-viewer-arbeiten mit Schriften. Ich habe eine nicht funktionierende Lösung in der Hoffnung, dass jemand verstehen kann, der die Warnung erzeugt. Ich habe auch eine funktionierende Lösung, ist ein ziemlich großer hack. Ich bin mit Matlab R2013a und TexLive 2013 auf Linux. Ich bin mir nicht sicher, was passieren wird, auf Mac oder Windows.
Nicht funktionierende Lösung
Mein Erster Ansatz war, um eine überlastung der Matlab
tex.m
- Funktion, so kann ich leicht Dinge tun, in LaTeX-und nur sorgen über dendvi
DateiDann habe ich
matlab.dvi
durch die VerarbeitungIch dann kopiert den TexLive-font zu Matlab
Bekomme ich den "rechnen" - Warnungen aus
Wenn ich versuche, und exportieren Sie das Bild (mit den fehlenden Schriften) zu einem
pdf
Datei überalt+f
alt+r
ich eine ganze Reihe von Warnungen einschließlich der potentiell nützlichArbeiten hack solutiuon
Nachdem er Futter mit nicht zu wissen, was zu nennen die
pfb
Dateien, entschied ich mich zu überschreiben, der bereits arbeitet (cmr10).In der CLI
und in der Matlab-Eingabeaufforderung
gibt mir
.
Damit exportieren Sie die Figur zu einem
eps
mit den Schriften, die Sie brauchen, um zu ersetzen Sie alle Instanzen von/mwa_cmr10
mit/AuriocusKalligraphicus
imeps
- Datei. Vermutlich ist dies, weil diese Lösung ist ein hack. Idealerweise sollte ich ersetzen nicht nur diepfb
- Datei, sondern auch diefd
undtfm
- Dateien. Es gibt wohl genugpfb
Schriftarten verfügbar, um Ihnen zu erlauben, zu schaffen, die meisten zahlen.mwa_auriocuskalligraphicus10.pfb
im Ordnercm
?Dies ist eine sehr einfache Lösung, aber Sie können Sie Bearbeiten die daraus resultierende .eps-Datei mit einem text-editor und erhalten die gewünschten Schriften. Zum Beispiel können Sie ersetzen folgende:
mit folgenden:
Können Sie sogar schreiben ein einfaches Skript, welches die resultierende .eps-Datei, und ersetzen Sie jede schriftart mit jedermann, das Sie wünschen. Ich hoffe, das hilft!