Saltar al contenido

Cirílico serbio usando LuaTeX y XeTeX

Si encuentras algún fallo en tu código o trabajo, recuerda probar siempre en un entorno de testing antes aplicar el código al trabajo final.

Solución:

Aquí hay un método para XeLaTeX.

Prepara un archivo ascii-to-serbian.map con el siguiente contenido:

; TECkit mapping for TeX input conventions <-> Unicode characters

LHSName "ASCII-to-Serbian"
RHSName "UNICODE"

pass(Unicode)

; ligatures from Knuth's original CMR fonts
U+002D U+002D           <>  U+2013  ; -- -> en dash
U+002D U+002D U+002D    <>  U+2014  ; --- -> em dash

U+0027          <>  U+2019  ; ' -> right single quote
U+0027 U+0027   <>  U+201D  ; '' -> right double quote
U+0022           >  U+201D  ; " -> right double quote

U+0060          <>  U+2018  ; ` -> left single quote
U+0060 U+0060   <>  U+201C  ; `` -> left double quote

U+0021 U+0060   <>  U+00A1  ; !` -> inverted exclam
U+003F U+0060   <>  U+00BF  ; ?` -> inverted question

; additions supported in T1 encoding
U+002C U+002C   <>  U+201E  ; ,, -> DOUBLE LOW-9 QUOTATION MARK
U+003C U+003C   <>  U+00AB  ; << -> LEFT POINTING GUILLEMET
U+003E U+003E   <>  U+00BB  ; >> -> RIGHT POINTING GUILLEMET

U+0041 <> U+0410 ; A
U+0042 <> U+0411 ; B
U+0043 <> U+0426 ; C
U+0043 U+0048 <> U+0427 ; CH
U+0043 U+0068 <> U+0427 ; Ch
U+0043 U+0031 <> U+040B ; C1
U+0027 U+0043 <> U+040B ; 'C
U+0044 <> U+0414 ; D
U+0044 U+004A <> U+0402 ; DJ
U+0044 U+006A <> U+0402 ; Dj
U+0044 U+005A U+0048 <> U+040F ; DZH
U+0044 U+007A U+0068 <> U+040F ; Dzh
U+0044 U+0031 <> U+040F ; D1
U+0045 <> U+0415 ; E
U+0046 <> U+0424 ; F
U+0047 <> U+0413 ; G
U+0048 <> U+0425 ; H
U+0049 <> U+0418 ; I
U+004A <> U+0408 ; J
U+004B <> U+041A ; K
U+004B U+0048 <> U+0425 ; KH
U+004B U+0068 <> U+0425 ; Kh
U+004C <> U+041B ; L
U+004C U+004A <> U+0409 ; LJ
U+004C U+006A <> U+0409 ; Lj
U+004D <> U+041C ; M
U+004E <> U+041D ; N
U+004E U+004A <> U+040A ; NJ
U+004E U+006A <> U+040A ; Nj
U+004F <> U+041E ; O
U+0050 <> U+041F ; P
;U+0051 <> ; Q
U+0052 <> U+0420 ; R
U+0053 <> U+0421 ; S
U+0053 U+0048 <> U+0428 ; SH
U+0053 U+0068 <> U+0428 ; Sh
U+0054 <> U+0422 ; T
U+0055 <> U+0423 ; U
U+0056 <> U+0412 ; V
;U+0057 <> ; W
U+0058 <> U+0425 ; X
;U+0059 ; Y
U+005A <> U+0417 ; Z
U+005A U+0048 <> U+0416 ; ZH
U+005A U+0068 <> U+0416 ; Zh

U+0061 <> U+0430 ; a
U+0062 <> U+0431 ; b
U+0063 <> U+0446 ; c
U+0063 U+0068 <> U+0447 ; ch
U+0063 U+0031 <> U+045B ; c1
U+0027 U+0063 <> U+045B ; 'c
U+0064 <> U+0434 ; d
U+0064 U+006A <> U+0452 ; dj
U+0064 U+007A U+0068 <> U+045F ; dzh
U+0064 U+0031 <> U+045F ; d1
U+0065 <> U+0435 ; e
U+0066 <> U+0444 ; f
U+0067 <> U+0433 ; g
U+0068 <> U+0445 ; h
U+0069 <> U+0438 ; i
U+006A <> U+0458 ; j
U+006B <> U+043A ; k
U+006B U+0068 <> U+0445 ; kh
U+006C <> U+043B ; l
U+006C U+006A <> U+0459 ; lj
U+006D <> U+043C ; m
U+006E <> U+043D ; n
U+006E U+006A <> U+045A ; nj
U+006F <> U+043E ; o
U+0070 <> U+043F ; p
;U+0071 <> ; q
U+0072 <> U+0440 ; r
U+0073 <> U+0441 ; s
U+0073 U+0068 <> U+0448 ; sh
U+0074 <> U+0442 ; t
U+0075 <> U+0443 ; u
U+0076 <> U+0432 ; v
;U+0077 <> ; w
U+0078 <> U+0445 ; x
;U+0079 ; y
U+007A <> U+0437 ; z
U+007A U+0068 <> U+0436 ; zh

; Additional (for official translitteration)
U+0110 <> U+0402 ; Đ
U+0111 <> U+0452 ; đ
U+017D <> U+0416 ; Ž
U+017E <> U+0436 ; ž
U+0106 <> U+040B ; Ć
U+0107 <> U+045B ; ć
U+010C <> U+0427 ; Č
U+010D <> U+0447 ; č
U+0044 U+017D <> U+040F ; DŽ
U+0044 U+017E <> U+040F ; Dž
U+0064 U+017E <> U+045F ; dž
U+0160 <> U+0428 ; Š
U+0161 <> U+0448 ; š

Luego procesalo con

teckit_compile ascii-to-serbian.map

Esto producirá un archivo ascii-to-serbian.tec que puede colocar en cualquier lugar donde lo encuentre XeTeX (en el directorio de trabajo, por ejemplo). Luego crea el siguiente archivo de prueba:

documentclassarticle
usepackagefontspec
setmainfont[Ligatures=TeX]Linux Libertine O
newfontfamilyserbianfont[Mapping=ascii-to-serbian]Linux Libertine O
usepackagepolyglossia
setmainlanguageenglish
setotherlanguage[Script=Cyrillic]serbian

begindocument
Serbian alphabet again

beginserbian
A B V G D DJ E Zh Z I J K L LJ M N NJ O P R S T C1 U F Kh C Ch D1 Sh

a b v g d dj e zh z i j k l m n nj o p r s t c1 u f kh c ch d1 sh
endserbian 
enddocument

Salida de muestra después xelatex test.tex

ingrese la descripción de la imagen aquí

Nota 1: los personajes Џ y џ se puede introducir también como DZH (o Dzh) y dzh. Si esto es incorrecto (puede provocar ligaduras incorrectas), elimine las líneas correspondientes de ascii-to-serbian.map.

Nota 2: si le resulta inconveniente escribir C1 y c1 para obtener Ћ y ћ, puedes agregar las líneas

U+0027 U+0043 <> U+040B ; 'C

y

U+0027 U+0063 <> U+040B ; 'c

después de la C1 y c1 entradas. Esto le permitirá ingresar los caracteres como 'C y 'c.

Si desea ingresarlos como 'C y 'c, luego inserte este código después de haber cargado el idioma serbio con Polyglossia

letstandardcommandquote'
DeclareRobustCommandserbiancommandquote[1]%
  ifnumstrcmp#1c=0 c1else
    ifnumstrcmp#1C=0 C1else
      standardcommandquote#1fifi
makeatletter
appto[email protected]
let'serbiancommandquote appto[email protected]let'serbiancommandquote appto[email protected]let'standardcommandquote makeatother

Nota 3 (agregada el 17 de febrero): Si uno tiene una entrada Unicode disponible, también

Đ đ Ž ž Ć ć Č č DŽ Dž dž Š š

están mapeados a

Ђ ђ Ж ж Ћ ћ Ч ч Џ џ Ш ш

respectivamente.

Su ejemplo, con algunos cambios, también funcionará con xelatex (y lualatex) siempre que use solo ascii para el serbio. (El archivo debe estar codificado en utf8 si usa caracteres no ascii fuera del serbio):

documentclassarticle
usepackage[OT2]fontenc
inputcyracc.def
usepackagefontspec
setmainfontArial % to see the difference
newcommandtextcyr[1]fontencodingOT2fontfamilywncyrselectfont #1
begindocument
Serbian alphabet again dots textcyrcyracc
A B V G D DJ E Zh Z I J K L LJ M N NJ O P R  S T 'C U F Kh C Ch Dzh Sh
 roman text again
enddocument

Es posible que las definiciones en cyracc.def tengan efectos secundarios no deseados en documentos más largos. También es posible que tenga problemas si desea la separación de sílabas.

Pero con esta entrada no está haciendo uso de la fuerza de xetex / luatex. No está utilizando una entrada Unicode real y no está utilizando fuentes del sistema para el cirílico; las fuentes que puede usar están limitadas a las fuentes codificadas en OT2.

Entonces, si realmente desea ceñirse a la entrada ASCII, debería usar mejor el mapeo mencionado por egreg (que funcionará solo con xelatex). Pero en mi humilde opinión, a largo plazo, las personas que quieran usar dos o más scripts deberían aprender mejor cómo cambiar la distribución del teclado para que puedan ingresar los caracteres directamente. Para fragmentos de texto cortos, puede encontrar teclados virtuales en la red.

Con LuaLaTeX, es posible emular la función de mapeo de xetex usando el archivo de funciones opentype. A diferencia de las funciones de mapeo xetex, no se basa en la sustitución de un carácter Unicode por otro, sino en la sustitución de caracteres Unicode por nombres de glifos utilizados en las fuentes. Hay un ejemplo usando gentium:

documentclassarticle
usepackagefontspec
usepackage[serbian]babel
defDzhDzh
defShSh
setmainfontGentium Plus
newfontfamilyserbianfont[RawFeature=+gsub,FeatureFile=serb.fea,Script=Cyrillic]
Gentium Plus
begindocument
noindent српска ћирилица\
Hello world\
serbianfont
Hello world\
A B V G D DJ E Zh Z I J K Kh L LJ M N NJ O P R S T Th U F Kh C Ch DzhSh\
a b v g d dj e zh z i j k kh l lj m n nj o p r s t th u f kh c ch dzh sh
enddocument

y archivo de características serb.fea

languagesystem cyrl SRB;
languagesystem cyrl DFLT;

feature liga 
  sub C H  by Checyrillic;
  sub C h by Checyrillic;
  sub D J by Djecyrillic;
  sub D j by Djecyrillic;
  sub D z h by Dzhecyrillic;
  sub D Z H by Dzhecyrillic;
  sub K H by Khacyrillic;
  sub K h by Khacyrillic;
  sub L J by Ljecyrillic;
  sub L j by Ljecyrillic;
  sub N j by Njecyrillic;
  sub N J by Njecyrillic;
  sub S H by Shacyrillic;
  sub S h by Shacyrillic;
  sub Z H by Zhecyrillic;
  sub T h by Tshecyrillic;
  sub T H by Tshecyrillic;
  sub Z h by Zhecyrillic;
  sub c h by checyrillic;
  sub t h by tshecyrillic;
  sub d j by djecyrillic;
  sub d z h by dzhecyrillic;
  sub k h by khacyrillic;
  sub l j by ljecyrillic;
  sub n j by njecyrillic;
  sub s h by shacyrillic;
  sub z h by zhecyrillic;
 liga;

feature gsub 
 sub A by Acyrillic;  
 sub B by Becyrillic;
 sub C by Vecyrillic;
 sub D by Decyrillic;
 sub E by Iecyrillic;
 sub F by Efcyrillic;
 sub G by Gecyrillic;
 sub H by Khacyrillic;
 sub I by Iicyrillic;
 sub J by Jecyrillic;
 sub K by Kacyrillic;
 sub L by Elcyrillic;
 sub M by Emcyrillic;
 sub N by Encyrillic;
 sub O by Ocyrillic;
 sub P by Pecyrillic;
 sub R by Ercyrillic;
 sub S by Escyrillic;
 sub T by Tecyrillic;
 sub U by Ucyrillic;
 sub V by Vecyrillic;
 sub X by Khacyrillic;
 sub Z by Zecyrillic;
 sub a by acyrillic;
 sub b by becyrillic;
 sub c by tsecyrillic;
 sub d by decyrillic;
 sub e by iecyrillic;
 sub f by efcyrillic;
 sub g by gecyrillic;
 sub h by khacyrillic;
 sub i by iicyrillic;
 sub j by jecyrillic;
 sub k by kacyrillic;
 sub l by elcyrillic;
 sub m by emcyrillic;
 sub n by encyrillic;
 sub o by ocyrillic;
 sub p by pecyrillic;
 sub r by ercyrillic;
 sub s by escyrillic;
 sub t by tecyrillic;
 sub u by ucyrillic;
 sub v by vecyrillic;
 sub x by khacyrillic;
 sub z by zecyrillic;
 gsub;

salida de ejemplo

Recuerda que puedes compartir esta sección si si solucionó tu problema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *