Mathematik so gestalten, dass sie sich wie \mathit verhält

Mathematik so gestalten, dass sie sich wie \mathit verhält

Ich verwende oft beschreibende Namen für Prädikate, Terme und Funktionen. Aufgrund des fehlenden Kernings sehen diese jedoch nicht schön aus.

Zum Beispiel

$offer = surface \times force(now)$

rendert als

Bildbeschreibung hier eingeben

Um dies zu vermeiden, verwenden Sie \mathit.

$\mathit{offer = surface \times force(now)}$

was ergibt als

Bildbeschreibung hier eingeben

Das sieht wohl besser aus und ist leichter zu lesen.

Um das Eintippen von \mathitm zu vermeiden, habe ich

\DeclareSymbolFont{italics}{\encodingdefault}{\rmdefault}{m}{it}

Und

\DeclareMathSymbol{a}{\mathalpha}{italics}{`a}
...
\DeclareMathSymbol{z}{\mathalpha}{italics}{`z}
\DeclareMathSymbol{A}{\mathalpha}{italics}{`A}
...
\DeclareMathSymbol{z}{\mathalpha}{italics}{`Z}

Fragen)

Ist das die „richtige“ Art, das zu tun?

Welche Nachteile/Nachteile hat dieser Ansatz? (Ich kann verwenden, \mathnormalum zum Standardverhalten zurückzukehren, und ich weiß, dass ich beispielsweise für das Produkt von fund iverwenden muss , f{}ium die Ligatur zu verhindern.)

Antwort1

Das hängt von mehreren Faktoren ab. Wenn Ihre mathematischen FormelnalleWenn das System so aufgebaut ist, wäre es möglicherweise gerechtfertigt, die mathematischen Codes für die Buchstaben zu ändern, obwohl ich Ihnen empfehle, dies nicht zu tun.

Bevorzugen Sie eine semantische Auszeichnung: mehrbuchstabige Bezeichner bezeichnen entweder Variablen oder Funktionen; definieren Sie zwei Befehle, z. B. \varund \funcund geben Sie Ihre Formel als

\[
\var{offer}=\var{surface}\cdot\func{force}(\var{now})
\]

(verwenden Sie \timesbitte nicht !). Jetzt haben Sie die Freiheit, die Darstellung von Variablen und Funktionen zu wählen, die Sie benötigen, zum Beispiel

\newcommand{\var}[1]{\mathit{#1}}
\newcommand{\func}[1]{\mathit{#1}}

Wenn Ihr Vorgesetzter oder ein Redakteur einer Zeitschrift Ihnen sagt: „Schön, aber Funktionen sollten in aufrechter Schrift gesetzt werden“, werden Sie antworten: „Moment mal“, ändern Sie die zweite Zeile in

\newcommand{\func}[1]{\mathrm{#1}}

und neu kompilieren. Wäre es mit der Änderung der Mathematikcodes dasselbe?

Ist das Tippen schwieriger? Ich glaube nicht, insbesondere wenn Sie ein Emacs-Experte sind, der ein paar Abkürzungen definieren kann.


Das Ändern des mathematischen Codes aller Buchstaben ist recht einfach, da der Code wiederholt wird. Vergessen Sie nicht, \mathiterneut zu deklarieren \DeclareSymbolFontAlphabet, um keine mathematische Familie zu verschwenden.

\DeclareSymbolFont{italics}{\encodingdefault}{\rmdefault}{m}{it}
\DeclareSymbolFontAlphabet{\mathit}{italics}

\makeatletter
\count@=`a \advance\count@\m@ne
\@whilenum{\count@<`z}\do{%
  \advance\count@\@ne
  \begingroup\lccode`A=\count@
  \lowercase{\endgroup
    \DeclareMathSymbol{A}{\mathalpha}{italics}{`A}%
  }%
}
\count@=`A \advance\count@\m@ne
\@whilenum{\count@<`Z}\do{%
  \advance\count@\@ne
  \begingroup\lccode`A=\count@
  \lowercase{\endgroup
    \DeclareMathSymbol{A}{\mathalpha}{italics}{`A}%
  }%
}
\makeatother

Die Schleifen können wie folgt vereinfacht werden expl3:

\usepackage{expl3}

\DeclareSymbolFont{italics}{\encodingdefault}{\rmdefault}{m}{it}
\DeclareSymbolFontAlphabet{\mathit}{italics}

\ExplSyntaxOn
\int_step_inline:nnnn { `A } { 1 } { `Z }
 {
  \group_begin:
  \char_set_lccode:nn { `A } { #1 }
  \char_set_lccode:nn { `B } { #1 + 32 }
  \tl_to_lowercase:n
   {
    \group_end:
    \DeclareMathSymbol{A}{\mathalpha}{italics}{`A}
    \DeclareMathSymbol{B}{\mathalpha}{italics}{`B}
   }
 }
\ExplSyntaxOff

Das Hauptproblem, das den Einsatz dieses \lowercaseTricks erforderlich macht, besteht darin, dass dies die einzige Möglichkeit ist, ein Zeichen-Token zu generieren, wenn dessen Zeichencode bekannt ist.

Mit einer aktuellen Version von expl3(veröffentlicht nach dem 09.09.2015) kann man den \lowercaseTrick mithilfe von umgehen \char_generate:nn.

\documentclass{article}
\usepackage{expl3}

\DeclareSymbolFont{italics}{\encodingdefault}{\rmdefault}{m}{it}
\DeclareSymbolFontAlphabet{\mathit}{italics}

\ExplSyntaxOn
\int_step_inline:nnnn { `A } { 1 } { `Z }
 {
  \exp_args:Nf \DeclareMathSymbol{\char_generate:nn{#1}{11}}{\mathalpha}{italics}{#1}
 }
\int_step_inline:nnnn { `a } { 1 } { `z }
 {
  \exp_args:Nf \DeclareMathSymbol{\char_generate:nn{#1}{11}}{\mathalpha}{italics}{#1}
 }
\ExplSyntaxOff

\begin{document}

\[
offer=surface\cdot force(now)
\]

\end{document}

Antwort2

Der Grund, warum die globale Neuzuweisung der Buchstaben im Mathematikmodus keine gute Idee ist, wurde in einer anderen Antwort und Kommentaren erwähnt. Aber wenn Sie das wirklich brauchen, können Sie Folgendes tun:

\everymath{\it}\everydisplay{\it}

am Anfang des Dokuments. Wenn Sie die Zahlen im römischen Stil beibehalten möchten, können Sie Folgendes festlegen:

\def\mathcodes#1{\mathcode`#1=\numexpr\mathcode`#1-"7000\relax 
   \ifx#10\else\expandafter\mathcodes\fi}
\mathcodes1234567890

Das bedeutet zum Beispiel:

\documentclass[12pt]{article}
\everymath{\it}\everydisplay{\it}
\def\mathcodes#1{\mathcode`#1=\numexpr\mathcode`#1-"7000\relax 
   \ifx#10\else\expandafter\mathcodes\fi}
\mathcodes1234567890
\begin{document}

$offer = surface \times force(now) + 1$

\end{document}

Wenn Sie reines TeX verwenden, können Sie den Befehl verwenden , der nach oder \itvariablesangegeben wird . Dieser Befehl setzt die Mathematikcodes aller Buchstaben auf die kursive Mathematikfamilie des Textes (als Standard). Beispiel:\input ams-math\input opmac

\input ams-math \itvariables

$offer = surface \times force(now) + 2$

\bye

Antwort3

Ich stimme egreg zu, dass es viel besser ist, die Auszeichnung hier der Bedeutung anzupassen und jeden Bezeichner separat zu markieren. Die mathematische Auszeichnung in TeX sowie die Standardschriftarten basieren auf der Idee, dass benachbarte Buchstaben separate Variablen sind, normalerweise mit impliziten Multiplikations- oder Verkettungsoperatoren.

Wenn Sie davon jedoch nicht überzeugt sind und standardmäßig die kursive Textschriftart verwenden möchten, müssen Sie hierfür keine neue Mathematikschriftart zuweisen. Sie ist bereits für die Verwendung eingerichtet. \mathitSie müssen sie lediglich der impliziten Gruppierung entziehen, die dies \mathit mit sich bringt.

\documentclass{article}


\let\v\mathit
\begin{document}


$\mathit{offer = surface \times force(now)}$



$\v{offer} = \v{surface} \times \v{force}(\v{now})$%%%USE THIS

\everymath{\mathit{\xdef\tmp{\fam\the\fam\relax}}\tmp}


$offer = surface \times force(now)$

\end{document}

verwandte Informationen