2011-09-13 14 views
8

Uso la fuente Constantia (que viene con Windows 7) para mi libro y me gustaría preparar gráficos para este libro utilizando la misma fuente en Mathematica. El problema es que Constantia por defecto produce oldstyle digits. Lo sé, por ejemplo en XeTeX, es posible controlar si se usan dígitos antiguos o normales para la salida.¿Es posible controlar el estilo de los dígitos en Mathematica?

¿Es posible controlar el estilo de los dígitos en Mathematica?

+0

¿Qué quieres decir con "oldstyle"? ¿Por qué no solo buscas una fuente para la cual los dígitos te atraigan más? – DavidC

+0

@ David ver el enlace que inserté en el texto –

+0

@Sjoerd Gracias. Eso ayuda a aclarar las cosas. – DavidC

Respuesta

3

Para las marcas, hay una solución alternativa, pero requiere un poco de programación. Primero, hay una función auxiliar.

getDigits[n_Integer] := IntegerDigits[n] 
getDigits[0.] := {0} 
getDigits[n_Real] := 
With[{rd = RealDigits[n]}, 
    Join[Take[rd[[1]], rd[[2]]], {"."}, 
    Drop[rd[[1]], rd[[2]]] ] /. {".", z___} -> {0, ".", z} /. {a__, 
    0 ..} -> {a} /. {a__, Repeated[0, {4, 150}], q__} -> {a} /. 
    {b__, "."} -> {b}] 
Attributes[getDigits] = Listable 

getDigits[{14.3, 2, 274, 2345.67}] 
    {{1, 4, ".", 3}, {2}, {2, 7, 4}, {2, 3, 4, 5, ".", 6, 7}} 

Entonces, una función como esta:

ConstantiaTicks[a_?VectorQ, opts : OptionsPattern[Style]] := 
[email protected]{a, 
    Style[#, FontFamily -> "Constantia", 
     Sequence @@ {opts}] & /@ (StringJoin /@ 
     Map[ToString[ 
     Style[Which[IntegerQ[#], 
      FromCharacterCode[# + 8320], # === ".", "."]]] &, 
    (getDigits[a]), {2}])} 

produce el siguiente resultado: enter image description here

Esto entonces se puede utilizar en una opción de FrameTicks o Ticks. Por supuesto, sí significa especificar sus tics en lugar de dejar que Mathematica resuelva sus valores automáticamente. También significa tomar la longitud de marca predeterminada a menos que desee tener otro argumento al ConstantiaTicks que especifique eso.

9

Creo que esto es bastante difícil. Constantia es directamente utilizable en Mathematica:

Style["", FontFamily -> "Constantia", FontSize -> 100] 

enter image description here

Sin embargo, la fuente está específicamente diseñado para ser equilibrado de esta manera. Si usted ajustar tamaños y posiciones de las letras con FontSize y AdjustmentBox se obtiene lo siguiente:

shift = {0, 0, 0, -1, -1, -1, 0.0, -1, 0.0, -1} 0.5; 
s = 0.65; 
sizeScale = {1, 1, 1, s, s, s, s, s, s, s, s}; 
Row[Table[ 
    AdjustmentBox[ 
    Style[num, FontFamily -> "Constantia", 
    FontSize -> 100 sizeScale[[num + 1]]], 
    BoxBaselineShift -> shift[[num + 1]]], {num, 0, 
    9}] 
] // DisplayForm 

enter image description here

Usted ver las letras desplazada y escalada tienen un peso corporal diferente. El peso de la fuente se puede ajustar, pero solo muy aproximadamente. Por lo general, solo tienes estilos claros y audaces. Para que pueda acercarse lo siguiente:

body = {Plain, Plain, Plain, Bold, Bold, Bold, Bold, Bold, Bold, Bold}; 
Row[Table[ 
    AdjustmentBox[ 
    Style[num, FontFamily -> "Constantia" , 
    FontWeight -> body[[num + 1]], 
    FontSize -> 100 sizeScale[[num + 1]]], 
    BoxBaselineShift -> shift[[num + 1]]], {num, 0, 
    9}]] // DisplayForm 

enter image description here

Algo mejor, pero todavía feo. Supongo que es necesario un nuevo diseño completo de las letras para que esto funcione. Tal vez las letras normales se pueden encontrar en algún lugar más adelante en la tabla de fuentes.


ACTUALIZACIÓN

encontrado el número alternativa establecido. Están en las posiciones 8320 - 8329 en la tabla de fuentes. Deberías poder cambiarlos usando una utilidad de fuente.

Style[FromCharacterCode[Range[8320, 8329]],FontFamily -> "Constantia", FontSize -> 100] 

enter image description here

+1

Gracias por la respuesta, pero, por supuesto, este método no funcionará para los tics de los ejes ya que son generado automáticamente por un comando como Plot, Plot3D, etc. – Igor

+0

@Igor Consulte mi actualización –

+0

¡Gracias @Sjoerd C. de Vries! – Igor

2

Agarraría FontForge. Las versiones más recientes (me parece que recuerdo) tienen una opción de menú profundamente oculta para aplicar una asignación y aplanarla en la fuente, para que pueda seleccionar lnum (números en mayúscula) y sacar fácilmente una versión de Constantia con la sustitución del forro por antiguo. números de estilo ya hechos, fuera de Mathematica. Alternativamente, un poco menos de alta tecnología, en Font-forge puedes simplemente copiar y pegar en el forro o los números tabulares en la parte superior de los minúsculos.

Font-forge no se ve muy bien, pero le da un poco de holgura, porque en realidad es muy bueno y es muy útil para ajustar las fuentes.

Como solución alternativa, ¿ha pensado en exportar los datos en Mathematica a un archivo plano y renderizarlos de forma nativa en su XeTeX con TikZ? Ese es el enfoque que suelo usar, y el resultado es realmente excelente.

Cuestiones relacionadas