Para exportar una figura de Matlab con caracteres que no sean ASCII ISO-8859-1, no hay ningún problema en Windows, pero en Linux con una configuración regional UTF-8 hay un error de Matlab y workaround. La pregunta aquí apunta a los personajes que no están en ISO-8859-1, que es más complicado. Aquí hay una solución que publiqué en un relacionado question.
Si el número de caracteres necesarios es menor de 256 (formato de 8 bits) e idealmente en un conjunto estándar de codificación, a continuación, una solución consiste en:
- Convertir el código octal en el carácter Unicode;
- Guarde el archivo en el estándar de codificación de destino (en un formato de 8 bits);
- Agregue el vector de codificación para el conjunto de codificación de destino.
Por ejemplo, si desea exportar texto en polaco, debe convertir el archivo en ISO-8859-2. Aquí hay una implementación con Python (multiplataforma):
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys,codecs
input = sys.argv[1]
fo = codecs.open(input[:-4]+'_latin2.eps','w','latin2')
with codecs.open(input,'r','string_escape') as fi:
data = fi.readlines()
with open('ISOLatin2Encoding.ps') as fenc:
for line in data:
fo.write(line.decode('utf-8').replace('ISOLatin1Encoding','MyEncoding'))
if line.startswith('%%EndPageSetup'):
fo.write(fenc.read())
fo.close()
guardado como eps_lat2.py; luego ejecuta el comando python eps_lat2.py file.eps
, donde file.eps es el eps creado por Matlab, crea file_latin2.eps con codificación Latin-2. Los ISOLatin2Encoding.ps archivo contiene la encoding vector:
/MyEncoding
% The first 144 entries are the same as the ISO Latin-1 encoding.
ISOLatin1Encoding 0 144 getinterval aload pop
% \22x
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
% \24x
/nbspace /Aogonek /breve /Lslash /currency /Lcaron /Sacute /section
/dieresis /Scaron /Scedilla /Tcaron /Zacute /hyphen /Zcaron /Zdotaccent
/degree /aogonek /ogonek /lslash /acute /lcaron /sacute /caron
/cedilla /scaron /scedilla /tcaron /zacute /hungarumlaut /zcaron /zdotaccent
% \30x
/Racute /Aacute /Acircumflex /Abreve /Adieresis /Lacute /Cacute /Ccedilla
/Ccaron /Eacute /Eogonek /Edieresis /Ecaron /Iacute /Icircumflex /Dcaron
/Dcroat /Nacute /Ncaron /Oacute /Ocircumflex /Ohungarumlaut /Odieresis /multiply
/Rcaron /Uring /Uacute /Uhungarumlaut /Udieresis /Yacute /Tcedilla /germandbls
% \34x
/racute /aacute /acircumflex /abreve /adieresis /lacute /cacute /ccedilla
/ccaron /eacute /eogonek /edieresis /ecaron /iacute /icircumflex /dcaron
/dcroat /nacute /ncaron /oacute /ocircumflex /ohungarumlaut /odieresis /divide
/rcaron /uring /uacute /uhungarumlaut /udieresis /yacute /tcedilla /dotaccent
256 packedarray def
Aquí es otra implementación en Linux con Bash:
#!/bin/bash
name=$(basename "$1" .eps)
ascii2uni -a K "$1" > /tmp/eps_uni.eps
iconv -t ISO-8859-2 /tmp/eps_uni.eps -o "$name"_latin2.eps
sed -i -e '/%EndPageSetup/ r ISOLatin2Encoding.ps' -e 's/ISOLatin1Encoding/MyEncoding/' "$name"_latin2.eps
guardan como eps_lat2; luego, al ejecutar el comando sh eps_lat2 file.eps
se crea file_latin2.eps con codificación Latin-2.
Se puede adaptar fácilmente a otros estándares de codificación de 8 bits cambiando el vector de codificación y el parámetro iconv (o codecs.open) en el script.
De alguna manera omite información que utilizo pdflatex. ¿Tiene alguna idea para una solución no tan fea? – triazotan
Matlab puede interpretar látex directamente en los campos de texto. ¿Has intentado poner la construcción de látex como "\" c "en el campo de texto de matlab y configurar el intérprete para" látex "en lugar de ingresar" ć "directamente? – groovingandi
Sí, tengo. Ejemplo que dio trabajo, pero es la única solución para tres acentos polacos: acento agudo (\ '), punto sobre letra (\.) Y L con golpe (\ L). Ogonek (es decir, el signo diacrítico encontrado en '±' o 'e') se denota por \ k {} y Matlab no lo interpreta correctamente. Una solución para esto es usar cedilla (\ c {}), pero no es exactamente igual y se ve un poco extraño. – triazotan