
¿Cómo obtengo Charter con su opción "antigua" en modo texto y con caracteres Charter (incluidos dígitos) en modo matemático?
La solución propuesta debe funcionar con LuaLaTeX (porque algunos caracteres de texto no son ASCII y prefiero pegar esos caracteres no ASCII en el archivo fuente y guardar la fuente como UTF-8).
Editar:Por si es relevante, uso MiKTeX v.2.9. ¿Necesito actualizar para resolver este problema?
Puedo acercarme tentadoramente pero no puedo hacer que todo funcione a la vez.
MWE 1:
\documentclass[12pt,a4paper]{article}
\usepackage{amsmath}
\usepackage{fontspec}
\setmainfont{XCharter} % see https://tex.stackexchange.com/a/205558
\usepackage[oldstyle]{xcharter}
% See https://tex.stackexchange.com/a/347574 for why this is needed.
\AtBeginDocument{%
\Umathcode`0="7 "0 `0
\Umathcode`1="7 "0 `1
\Umathcode`2="7 "0 `2
\Umathcode`3="7 "0 `3
\Umathcode`4="7 "0 `4
\Umathcode`5="7 "0 `5
\Umathcode`6="7 "0 `6
\Umathcode`7="7 "0 `7
\Umathcode`8="7 "0 `8
\Umathcode`9="7 "0 `9
}
\usepackage[charter]{newtxmath}
\begin{document}
Digits in plain text: 48/96=135/270.
$a=48, b=96, c=135, d=270\implies a/b=c/d.$ $8=5+3=9-1=2\times4=2^3.$
\end{document}
Los dígitos en modo texto son exactamente como quiero. Además, las letras en modo matemático están en cursiva, lo que quiero. Sin embargo, los dígitos en modo matemático son informáticos modernos, a pesar de mi intento de utilizar el código enesta respuesta, que respondió a una pregunta similar con respecto a Libertine.
MWE 2
\documentclass[12pt,a4paper]{article}
\usepackage{amsmath}
\usepackage{fontspec}
\setmainfont{XCharter}[Numbers={OldStyle}] % see https://tex.stackexchange.com/a/205558
\usepackage[charter]{newtxmath}
% See https://tex.stackexchange.com/a/347574 for why this is needed.
\AtBeginDocument{%
\Umathcode`0="7 "0 `0
\Umathcode`1="7 "0 `1
\Umathcode`2="7 "0 `2
\Umathcode`3="7 "0 `3
\Umathcode`4="7 "0 `4
\Umathcode`5="7 "0 `5
\Umathcode`6="7 "0 `6
\Umathcode`7="7 "0 `7
\Umathcode`8="7 "0 `8
\Umathcode`9="7 "0 `9
}
\begin{document}
Digits in plain text: 48/96=135/270.
$a=48, b=96, c=135, d=270\implies ab=cd.$ $8=5+3=9-1=2\times4=2^3.$
\end{document}
Ahora intento obtener dígitos de estilo antiguo en modo texto pirateando \setmainfont en lugar de \usepackage{xcharter}. Pero esto parece pasar el parámetro oldstyleI (en lugar de oldstyle) a \usepackage{xcharter}. De todos modos, el resultado es que el modo texto tiene dígitos de estilo antiguo pero con una mayúscula I para 1. La buena noticia es que los dígitos en el modo matemático son Charter, que es lo que quiero.
Sería aún mejor si tanto el modo de texto como el de matemáticas pudieran usar dígitos de Charter al estilo antiguo. De esa manera podría mantener las tablas como entornos de matriz en modo matemático. Tener que pasar al modo texto para los dígitos de las tablas implica sustituir, por ejemplo, $\begin{array}{r} n \\ 1 \end{array}$
por \begin{tabular}{r} $n$ \\ 1 \end{tabular}
.
Respuesta1
Como estás usando LuaLaTeX, puedes cargar unicode-math
en lugar de newtxmath
, que tiene problemas de compatibilidad. Utilice la fuente XCharter-Math para matemáticas.
EDITAR:En los comentarios, solicitó el número 1 de [oldstyleI]
, que es la variante de carácter 01 en la versión OpenType de XCharter. A continuación se muestra una versión revisada.
\documentclass[12pt,a4paper]{article}
\usepackage{unicode-math}
\defaultfontfeatures[XCharter]{ Numbers=OldStyle,
CharacterVariant=1, % Change the shape of 1 in text mode
UprightFont=*-Roman,
BoldFont=*-Bold,
ItalicFont=*-Italic,
SlantedFont=*-Slanted,
BoldItalicFont=*-BoldItalic,
BoldSlantedFont=*-BoldSlanted,
Extension=.otf }
\setmainfont{XCharter}
\setmathfont{XCharter-Math}
\begin{document}
Digits in plain text: 48/96=135/270.
$a=48, b=96, c=135, d=270\implies ab=cd.$ $8=5+3=9-1=2\times4=2^3.$
\end{document}
En el improbable caso de que alguna vez quieras números antiguos también en modo matemático, puedes agregar el comando:
\setmathfont{XCharter-Roman.otf}[range={up/num},
Numbers=OldStyle,
CharacterVariant=01] % Change the shape of 1 in math mode
Aquí hay una versión que funciona en PDFLaTeX:
\documentclass[12pt,a4paper]{article}
\usepackage{amsmath}
\usepackage[charter]{mathdesign}
\usepackage[oldstyle]{xcharter}
\begin{document}
Digits in plain text: 48/96=135/270.
$a=48, b=96, c=135, d=270\implies ab=cd.$ $8=5+3=9-1=2\times4=2^3.$
\end{document}
Le recomiendo que use unicode-math
LuaLaTeX cuando pueda, y PDFLaTeX con fuentes heredadas de 8 bits cuando sea necesario. Pero, dado que usted dice que el problema aquí fue no poder leer Unicode, es muy probable que su documento funcione si lo guardó en codificación UTF-8 NFC (precompuesta normalizada). PDFLaTeX no puede comprender la combinación de caracteres Unicode, pero puede manejar cualquier carácter Unicode que se asigne directamente a una codificación de entrada de 8 bits.
Editar:
Si realmente desea utilizar una fuente de texto OpenType junto con una fuente matemática Tipo 1 heredada, esto debería funcionar:
\documentclass[12pt,a4paper]{article}
\usepackage{amsmath}
\usepackage[charter]{mathdesign}
\usepackage{fontspec}
\setmainfont{XCharter}[NFSSFamily=mdbch, Numbers=OldStyle]
\begin{document}
Digits in plain text: 48/96=135/270.
$a=48, b=96, c=135, d=270\implies ab=cd.$ $8=5+3=9-1=2\times4=2^3.$
\end{document}
Respuesta2
Si no desea utilizar unicode-math
, debe redefinir la operators
fuente para usar XCharter con figuras alineadas.
\documentclass[12pt,a4paper]{article}
\usepackage{amsmath}
\usepackage{fontspec}
\usepackage[charter]{newtxmath}
\setmainfont{XCharter}[Numbers={OldStyle}] % see https://tex.stackexchange.com/a/205558
\newfontfamily{\XCharterLF}{XCharter}[NFSSFamily=xcharterlf]
\DeclareSymbolFont{operators}{TU}{xcharterlf}{m}{n}
\begin{document}
Digits in plain text: 48/96=135/270.
$a=48, b=96, c=135, d=270\implies ab=cd$.
$8=5+3=9-1=2\times4=2^3$.
$\sin x$
\end{document}