
Wie erhalte ich Charter mit der Option „Oldstyle“ im Textmodus und mit Charter-Zeichen (einschließlich Ziffern) im Mathematikmodus?
Die vorgeschlagene Lösung muss mit LuaLaTeX funktionieren (da einige Textzeichen nicht ASCII sind und ich es vorziehe, diese Nicht-ASCII-Zeichen in die Quelldatei einzufügen und die Quelle als UTF-8 zu speichern).
Bearbeiten:Nur für den Fall, dass es relevant ist: Ich verwende MiKTeX v.2.9. Muss ich ein Upgrade durchführen, um dieses Problem zu lösen?
Ich kann verlockend nahe herankommen, aber es gelingt mir nicht, alles auf einmal zum Laufen zu bringen.
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}
Die Ziffern im Textmodus sind genau so, wie ich sie haben möchte. Außerdem sind die Buchstaben im Mathematikmodus in Charter-Kursivschrift, was ich auch möchte. Die Ziffern im Mathematikmodus sind jedoch Computer Modern, trotz meines Versuchs, den Code indiese Antwort, das eine ähnliche Frage in Bezug auf Libertine beantwortete.
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}
Jetzt versuche ich, Ziffern im alten Stil im Textmodus zu erhalten, indem ich \setmainfont statt \usepackage{xcharter} hacke. Aber das scheint den Parameter oldstyleI (statt oldstyle) an \usepackage{xcharter} zu übergeben. Wie auch immer, das Ergebnis ist, dass der Textmodus Ziffern im alten Stil hat, aber mit einem Großbuchstaben I für eine 1. Die gute Nachricht ist, dass die Ziffern im Mathematikmodus Charter sind, was ich will.
Noch schöner wäre es, wenn sowohl der Text- als auch der Mathematikmodus alte Charter-Ziffern verwenden könnten. Auf diese Weise könnte ich Tabellen im Mathematikmodus als Array-Umgebungen beibehalten. Wenn ich für Ziffern in Tabellen in den Textmodus wechseln muss, muss ich eg $\begin{array}{r} n \\ 1 \end{array}$
durch ersetzen \begin{tabular}{r} $n$ \\ 1 \end{tabular}
.
Antwort1
Da Sie LuaLaTeX verwenden, können Sie unicode-math
anstelle von laden newtxmath
, was Kompatibilitätsprobleme verursacht. Verwenden Sie für Mathematik die Schriftart XCharter-Math.
BEARBEITEN:In den Kommentaren haben Sie die Ziffer 1 aus angefordert [oldstyleI]
, was in der OpenType-Version von XCharter die Zeichenvariante 01 ist. Eine überarbeitete Version finden Sie weiter unten.
\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}
Für den unwahrscheinlichen Fall, dass Sie im Mathematikmodus auch Zahlen im alten Stil wünschen, können Sie den folgenden Befehl hinzufügen:
\setmathfont{XCharter-Roman.otf}[range={up/num},
Numbers=OldStyle,
CharacterVariant=01] % Change the shape of 1 in math mode
Hier ist eine Version, die in PDFLaTeX funktioniert:
\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}
Ich empfehle, wenn möglich LuaLaTeX und wenn nötig PDFLaTeX mit älteren 8-Bit-Schriftarten zu verwenden unicode-math
. Da Sie jedoch sagen, dass das Problem hier darin bestand, dass Unicode nicht gelesen werden konnte, besteht eine gute Chance, dass Ihr Dokument funktioniert, wenn Sie es in NFC-UTF-8-Kodierung (normalisierte vorkomponierte Kodierung) speichern. PDFLaTeX kann Unicode-Kombinationszeichen nicht verstehen, kann aber jedes Unicode-Zeichen verarbeiten, das direkt einer 8-Bit-Eingabekodierung zugeordnet ist.
Bearbeiten:
Wenn Sie wirklich eine OpenType-Textschriftart zusammen mit einer älteren Type-1-Mathematikschriftart verwenden möchten, sollte dies funktionieren:
\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}
Antwort2
Wenn Sie nicht verwenden möchten unicode-math
, müssen Sie die operators
Schriftart neu definieren, um XCharter mit Versalziffern zu verwenden.
\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}