2012-03-02 20 views
9

Cerco di usare caratteri ebraici in una trama di figure Matlab sul mio Ubuntu senza alcun risultato. Ho provato:Matlab in Linux (Ubuntu 11.10) non visualizza Unicode (ebraico) nella figura del grafico

text(0.6,0.5,'ירוק','fontname','times new roman','rotation',180,'fontsize',50,'color','r') 

e

title('ירוק','fontname','times new roman','fontsize',50,'color','r') 

simile a quello che è stato proposto in the answer to this question. Ho ottenuto un testo confuso (vedi attached image).

Matlab è nella versione R2009b. Ovviamente sono impostato sulla codifica UTF-8.

>> slCharacterEncoding 

ans = 

UTF-8 

Ho anche accesso a un computer remoto tramite ssh, con la versione R2011a. Neanche questo ha funzionato. (Ci ho dovuto slCharacterEncoding('UTF-8'))

L'altra opzione, utilizzando un componente javax.swing.JLabel, è troppo difficile da utilizzare con la quantità di grafico che ho.

Posso continuare a produrre grafici con assi e titoli inglesi, ma è un peccato. Qualche consiglio?


Edit: come suggerito da Egon, se posso print -deps e quindi sostituire il testo (da codice all'interno di Matlab) nel file EPS risultante, che è davvero bello. Ma io non so come posizionare Unicode in EPS e penso che sia lo stretching ...

Screenshot of figure screen showing rubbish


Ancora un altro Edit: sto iniziando a pensare che questo è un X- problema del server. Sebbene diversi, non sarei sorpreso se questi problemi sono correlati:

Ho provato a disinstallare Ubuntu fornito driver nVidia (Ho una scheda 9300GS) e re-installazione di NVidia fornito quelli (v295). Ho provato a cambiare DPI in xorg.conf su "100 x 100". Installato tutti i pacchetti elencati in HebrewLocalizationHowto e poi alcuni. Niente ha funzionato Suggerimenti?


Un'altra modifica Fonts situati sotto matlab/sys/fonts/ttf o matlab/sys/fonts/type1 non vengono visualizzate correttamente. Quando modifico la figura e faccio doppio clic sul titolo, vedo che i caratteri ci sono, ma quando finisco la modifica ritorna al rendering non valido. Inoltre, lo JLabel solution for rendering Unicode characters suggested here esegue il rendering del testo correttamente sotto la stessa cifra.

Un'altra modifica Matlab R2011a presenta lo stesso problema. Ecco l'output di listfonts

>> listfonts 

ans = 

    'aharoni' 
    'andale mono' 
    'anka clm' 
    'arial' 
    'arial black' 
    'avant garde gothic' 
    'AvantGarde' 
    'batang' 
    'bitstream charter' 
    'biwidth' 
    'Bookman' 
    'caladings' 
    'century schoolbook l' 
    'charter' 
    'clean' 
    'clearlyu' 
    'clearlyu alternate glyphs' 
    'clearlyu arabic' 
    'clearlyu arabic extra' 
    'clearlyu devanagari' 
    'clearlyu devangari extra' 
    'clearlyu ligature' 
    'clearlyu pua' 
    'cmex10' 
    'cmmi10' 
    'cmr10' 
    'cmsy10' 
    'comic sans ms' 
    'comix no2 clm' 
    'Courier' 
    'courier 10 pitch' 
    'courier new' 
    'dingbats' 
    'dorian clm' 
    'dotum' 
    'drugulin' 
    'ellinia' 
    'fangsong ti' 
    'fixed' 
    'frank ruehl' 
    'gan clm' 
    'georgia' 
    'gladia clm' 
    'gothic' 
    'Helvetica' 
    'Helvetica-Narrow' 
    'impact' 
    'itc avant garde gothic' 
    'itc bookman' 
    'itc zapf chancery' 
    'itc zapf dingbats' 
    'ktav yad clm' 
    'latin modern roman' 
    'latin modern sans' 
    'latin modern sansquotation' 
    'latin modern typewriter' 
    'latin modern typewriter variable width' 
    'lucida' 
    'lucida bright' 
    'lucidabright' 
    'lucidasans' 
    'lucidasans typewriter' 
    'lucidatypewriter' 
    'mincho' 
    'msam10' 
    'msbm10' 
    'nachlieli' 
    'new century schoolbook' 
    'newcenturyschlbk' 
    'NewCenturySchoolBook' 
    'newspaper' 
    'nil' 
    'nimbus mono l' 
    'nimbus roman no9 l' 
    'nimbus sans l' 
    'open look cursor' 
    'open look glyph' 
    'ozrad clm' 
    'Palatino' 
    'song ti' 
    'standard symbols l' 
    'Symbol' 
    'terminal' 
    'texgyreadventor' 
    'texgyrebonum' 
    'texgyrecursor' 
    'texgyreheros' 
    'texgyrepagella' 
    'texgyreschola' 
    'texgyretermes' 
    'Times' 
    'times new roman' 
    'trebuchet ms' 
    'urw bookman l' 
    'urw chancery l' 
    'urw gothic l' 
    'urw palladio l' 
    'verdana' 
    'wasy10' 
    'webdings' 
    'yehuda' 
    'zapf chancery' 
    'zapf dingbats' 
    'ZapfChancery' 
    'ZapfDingbats' 
+5

stai scherzando? Ho fatto riferimento a questa domanda nel mio ... – Yuval

+0

Hai provato altri caratteri? La tua copia di volte in New Roman potrebbe non includere quei caratteri o meno nei punti di codice corretti. (Oltre ad essere un font relativamente brutto, imho, comunque.) Dal tuo elenco, inizierei con ''yehuda'', dal momento che sembra che dovrebbe contenere lettere ebraiche. –

risposta

4

Hai provato a disattivare l'interprete di testo?

Quindi aggiungere 'interpreter', 'none' come gli ultimi argomenti della chiamata a text o impostarlo per l'intera cifra set(gcf,'defaulttextinterpreter','none'). Per applicare a livello globale, è sufficiente sostituire gcf per 0 (che è la finestra principale).

Se ciò non funziona, è possibile provare l'interprete LateX (sostituire none con "latex" in alto), che potrebbe supportare i caratteri ebraici.

D'altra parte, ma questa è una preferenza personale, le etichette in inglese consentono (virtualmente) a chiunque di leggere le tue cifre che ti permettono solo di scambiare idee con altre persone.

modifica Come detto nella domanda a cui si fa riferimento, si tratta di un problema di carattere, non di un problema MATLAB. L'ho provato qui sulla mia installazione di Arch (che ha i suoi problemi con i suoi caratteri), ma posso farlo visualizzare i caratteri ebraici bene usando il font Arial.

Proof of Hebrew

Edit 2 Ancora una volta, questo è un problema di carattere, non MATLAB. L'ho provato di nuovo nell'installazione di Arch e ora l'ebraico funziona bene con il tuo primo codice. Quindi presumo che i font che hai installato non siano le versioni giuste.

enter image description here

Su Arch, ho questi pacchetti relative ai font installati:

extra/cantarell-fonts 0.0.7-1 
extra/font-bitstream-speedo 1.0.1-2 
extra/fontsproto 2.1.2-1 
extra/gsfonts 1.0.7pre44-3 
extra/sdl_ttf 2.0.11-2 
extra/t1lib 5.1.2-3 
extra/ttf-bitstream-vera 1.10-8 
extra/ttf-dejavu 2.33-2 
extra/ttf-freefont 20100919-2 
extra/xorg-font-util 1.3.0-1 
extra/xorg-fonts-100dpi 1.0.1-4 
extra/xorg-fonts-75dpi 1.0.1-4 
extra/xorg-fonts-alias 1.0.2-2 
extra/xorg-fonts-encodings 1.0.4-3 
extra/xorg-fonts-misc 1.0.1-2 
extra/xorg-fonts-type1 7.4-2 
extra/xorg-mkfontscale 1.1.0-1 
extra/xorg-xfontsel 1.0.4-1 
extra/xorg-xlsfonts 1.0.3-2 
community/ttf-liberation 1.07.2-1 
aur/ttf-microsoft-wingding 1.55-1 
aur/ttf-ms-fonts 2.0-9 

Per Ubuntu, non mi ricordo i pacchetti corrette, ma credo che avrei dovuto le più alte probabilità di successo con ttf-liberation, ttf-ms-conts (msttcorefonts in Ubuntu), xorg-fonts-100dpi, xorg-fonts-alias o le loro controparti Debian/Ubuntu.

Quindi penso che ci siano due soluzioni possibili: o provare un altro font. Arial ha funzionato per me prima, Times New Roman ora funziona anche per me. O installa i caratteri corretti sul tuo computer.

modifica A tal fine, sembra che il rendering in MATLAB funzioni quasi perfettamente. Tuttavia, l'esportazione in PDF non funziona. Qualsiasi formato di bitmap dovrebbe funzionare correttamente.

La mia prossima ipotesi, è davvero che per il caso PDF, MATLAB è la colpa. Ho fatto alcuni test usando il normale salvataggio PDF e stampando su un file. Entrambi mostrano lo stesso problema. Questo non è sorprendente, dal momento che la funzione di salvataggio PDF in MATLAB sembra generare PS che viene convertito in PDF in seguito. Presumibilmente, c'è qualcosa di marcio e unicode incompatibile nella generazione di PS.

So che non è una soluzione completa al tuo problema, ma puoi almeno esportare i tuoi dati in PNG, se la tua risoluzione è abbastanza alta, la maggior parte delle persone non se ne accorgerà.

Un'altra soluzione, se si utilizza LaTeX per generare il proprio report, è utilizzare matlab2tikz per generare le proprie figure, è stato possibile inserire il testo ebraico nel codice LaTeX. Tuttavia, dal momento che non ho esperienza con l'ebraico nei miei file TeX, non conosco i trucchi per farlo compilare.

+0

L'inglese è bello, ma sto scrivendo un rapporto di laboratorio che è scritto in ebraico, quindi la preferenza. Ho pensato a TeX e agli interpreti "nessuno", quindi ci ho già provato. Provare LaTeX è stata una buona idea, ma non sono riuscito a inserire caratteri non inglesi senza che fosse compatibile con "Avviso: impossibile interpretare la stringa TeX" e non riuscendo a visualizzare. – Yuval

+0

@Yuval: Capisco che sia una preferenza personale per entrambi i modi. Con LaTeX potresti aver bisogno di codificare in qualche modo i tuoi caratteri ebraici, ma non ho alcuna esperienza con questo, dato che non riesco a leggere/scrivere l'ebraico da solo. L'alternativa alla tua segnalazione è forse quella di esportare le figure in un formato che supporti l'ebraico (solo indovinando: EMF/WMF, PowerPoint, TikZ)? – Egon

+0

Non penso che sia un problema di font; Ho installato la maggior parte di questi font ('xfonts-base',' xfonts-intl-european', 'xfonts-100dpi-transcoded',' xfonts-efont-unicode', 'xfonts-mathml',' xfonts-75dpi ',' xfonts-efont-unicode-ib', 'xfonts-scalable',' xfonts-75dpi-transcoded', 'xfonts-encodings',' xfonts-utils'). Quando indico un font TTF che ho installato ('FreeSans'), rende male. Altrimenti, rende 'Times New Roman' piacevolmente quando lo specifico, ma produce dei jumble sui caratteri, tipici delle app che non supportano UTF-8. Credo che questo sia un problema con X-server. – Yuval

3

Utilizzando il seguente frammento puoi vedere quali tipi di carattere lavorare facilmente

x=listfonts 
for i=1:numel(x) 
    display(x{i}) 
    title('ירוק','Color','red','FontName',x{i},'FontSize',50) 
    pause 
end 

Per me Lucida Sans funzionato. Tuttavia mostrerà l'ebraico invertito.

È possibile esportare in EPS (stampa -deps - Ho trovato questo per essere disponibile in Windows, poi di nuovo, non si ha il problema lì) e fare alcune modifiche: la codifica

  • remove orrore Matlab: semplice rimuovere tutte le occorrenze di \327
  • aggiungere una sezione /Encoding per mappare caratteri ebraici per l'uscita codici da Matlab

Cioè, cambiare questo:

%%IncludeResource: font FreeSans 
/FreeSans /ISOLatin1Encoding 200 FMSR 

-6384 483 mt 
(\327\220\327\221\327\222\327\223\327\224\327\225\327\226\327\227\327\230\327\231\327\233\327\234\327\236\327\240\327\241\327\242\327\244\327\246\327\250\327\247\327\251\327\252\327\237\327\232\327\245\327\235\327\243) s 

a questo:

/Encoding [ 
/.notdef /.notdef /.notdef /.notdef 
/.notdef /.notdef /.notdef /.notdef 
/.notdef /.notdef /.notdef /.notdef 
/.notdef /.notdef /.notdef /.notdef 
/.notdef /.notdef /.notdef /.notdef 
/.notdef /.notdef /.notdef /.notdef 
/.notdef /.notdef /.notdef /.notdef 
/.notdef /.notdef /.notdef /.notdef 
/space /exclam /quotedbl /numbersign 
/dollar /percent /ampersand /quoteright 
/parenleft /parenright /asterisk /plus 
/comma /minus /period /slash 
/zero /one /two /three 
/four /five /six /seven 
/eight /nine /colon /semicolon 
/less /equal /greater /question 
/at /A /B /C 
/D /E /F /G 
/H /I /J /K 
/L /M /N /O 
/P /Q /R /S 
/T /U /V /W 
/X /Y /Z /bracketleft 
/backslash /bracketright /asciicircum /underscore 
/quoteleft /a /b /c 
/d /e /f /g 
/h /i /j /k 
/l /m /n /o 
/p /q /r /s 
/t /u /v /w 
/x /y /z /braceleft 
/bar /braceright /asciitilde /.notdef 
/.notdef /.notdef /.notdef /.notdef 
/.notdef /.notdef /.notdef /.notdef 
/.notdef /.notdef /.notdef /.notdef 
/.notdef /.notdef /.notdef /.notdef 
/alefhebrew /bethebrew /gimelhebrew /dalethebrew 
/hehebrew /vavhebrew /zayinhebrew /hethebrew 
/tethebrew /yodhebrew /finalkafhebrew /kafhebrew /lamedhebrew 
/finalmemhebrew /memhebrew /finalnunhebrew /nunhebrew /samekhhebrew /ayinhebrew 
/finalpehebrew /pehebrew /finaltsadihebrew /tsadihebrew /qofhebrew /reshhebrew 
/shinhebrew /tavhebrew /.notdef /.notdef 
/.notdef /registered /macron 
/degree /plusminus /twosuperior /threesuperior 
/acute /mu /paragraph /periodcentered 
/cedilla /onesuperior /ordmasculine /guillemotright 
/onequarter /onehalf /threequarters /questiondown 
/Agrave /Aacute /Acircumflex /Atilde 
/Adieresis /Aring /AE /Ccedilla 
/Egrave /Eacute /Ecircumflex /Edieresis 
/Igrave /Iacute /Icircumflex /Idieresis 
/Eth /Ntilde /Ograve /Oacute 
/Ocircumflex /Otilde /Odieresis /multiply 
/Oslash /Ugrave /Uacute /Ucircumflex 
/Udieresis /Yacute /Thorn /germandbls 
/agrave /aacute /acircumflex /atilde 
/adieresis /aring /ae /ccedilla 
/egrave /eacute /ecircumflex /edieresis 
/igrave /iacute /icircumflex /idieresis 
/eth /ntilde /ograve /oacute 
/ocircumflex /otilde /odieresis /divide 
/oslash /ugrave /uacute /ucircumflex 
/udieresis /yacute /thorn /ydieresis 
] def 

%%IncludeResource: font FreeSans 
/FreeSans /Encoding 200 FMSR 
1016 483 mt 
(\220\221\222\223\224\225\226\227\230\231\233\234\236\240\241\242\244\246\250\247\251\252\237\232\245\235\243) s 

(La sezione di codifica può essere copie così com'è; e le occorrenze \327 sono state rimosse)

Questo funziona, tranne che per qualche motivo un carattere finale non viene visualizzato correttamente. Va abbastanza bene per me.

Problemi correlati