Festlegen einer festen Höhe (in allen Situationen und für alle Zeichen) für Übersatznotationen

Festlegen einer festen Höhe (in allen Situationen und für alle Zeichen) für Übersatznotationen

Ein deutlicher ästhetischer Nachteil der \vec{}Notation ist, dass die überlagerte Vektornotation bei „kurzen“ und „langen“ Zeichen ( a, i, vvs b, k, l) einen Höhenunterschied zur Grundlinie aufweist. Ist es möglich, überlagerte Zeichen so zu definieren (oder neu zu definieren), dass sie eine feste, konsistente Höhe zur Grundlinie (oder einem anderen horizontalen Standard) aufweisen, unabhängig davon, auf welches Zeichen sie gesetzt werden? Nachfolgend finden Sie einen schnellen, groben Vergleich des Status Quo und des Ziels:

Status Quo: Höhen variieren

Status Quo: Höhen variieren.

Ziel: Die Höhen sind konsistent

Ziel: Die Höhen sind konsistent.

NOCH EIN EDIT: Der angepasste Vektor stammt vonein Skript, geschrieben vom Benutzer Todd Lehman:

\makeatletter
\newlength\xvec@height%
\newlength\xvec@depth%
\newlength\xvec@width%
\newcommand{\xvec}[2][]{%
  \ifmmode%
    \settoheight{\xvec@height}{$#2$}%
    \settodepth{\xvec@depth}{$#2$}%
    \settowidth{\xvec@width}{$#2$}%
  \else%
    \settoheight{\xvec@height}{#2}%
    \settodepth{\xvec@depth}{#2}%
    \settowidth{\xvec@width}{#2}%
  \fi%
  \def\xvec@arg{#1}%
  \def\xvec@dd{:}%
  \def\xvec@d{.}%
  \raisebox{.2ex}{\raisebox{\xvec@height}{\rlap{%
    \kern.05em%  (Because left edge of drawing is at .05em)
    \begin{tikzpicture}[scale=1]
    \pgfsetroundcap
    \draw (.05em,0)--(\[email protected],0);
    \draw (\[email protected],0)--(\[email protected], .075em);
    \draw (\[email protected],0)--(\[email protected],-.075em);
    \ifx\xvec@arg\xvec@d%
      \fill(\xvec@width*.45,.5ex) circle (.5pt);%
    \else\ifx\xvec@arg\xvec@dd%
      \fill(\xvec@width*.30,.5ex) circle (.5pt);%
      \fill(\xvec@width*.65,.5ex) circle (.5pt);%
    \fi\fi%
    \end{tikzpicture}%
  }}}%
  #2%
}
\makeatother

\let\stdvec\vec
\renewcommand{\vec}[1]{\xvec[]{#1}}

% --- Define \dvec and \ddvec for dotted and double-dotted vectors.
\newcommand{\dvec}[1]{\xvec[.]{#1}}
\newcommand{\ddvec}[1]{\xvec[:]{#1}}

Antwort1

Hier ist eine schnelle Low-Tech-Lösung:

Bildbeschreibung hier eingeben

\documentclass{article}

\newcommand{\myvec}[1]{\vec{\vphantom{A}#1}}

\begin{document}

$\myvec{a}\cdot\myvec{b}$

\end{document}

Dies wird automatisch für Tief-/Hochstellungen angepasst, es gibt jedoch ein Problem (siehe unten), wenn sich das Vektorsymbol über einem Zeichen befindet, das größer ist als A.

Bei einer etwas komplizierteren Version \ooalignwird der Vektor auf eine Höhe gezwungen, als ob er darüber wäre, Aauch wenn er über einem höheren Objekt platziert ist.

Bildbeschreibung hier eingeben

Die oberste Zeile ist die einfache Version oben, wobei der dritte Vektor nicht ausgerichtet ist, da A^2größer ist als A. Die zweite Zeile verwendet den Code

\newcommand{\myvec}[1]{\ooalign{\hfil$\vec{\vphantom{A}}$\hfil\cr\hfil$#1$\hfil\cr}}

passt sich aber nicht an Änderungen der Indexgröße an. Wenn Sie möchten, können Sie das folgendermaßen beheben \mathchoice:

\newcommand{\myvec}[1]{\mathchoice
{\ooalign{\hfil$\vec{\vphantom{A}}$\hfil\cr\hfil$#1$\hfil\cr}}
{\ooalign{\hfil$\vec{\vphantom{A}}$\hfil\cr\hfil$#1$\hfil\cr}}
{\ooalign{\hfil$\vec{\vphantom{\scriptstyle A}}$\hfil\cr\hfil$\scriptstyle #1$\hfil\cr}}
{\ooalign{\hfil$\vec{\vphantom{\scriptscriptstyle A}}$\hfil\cr\hfil$\scriptscriptstyle #1$\hfil\cr}}
}

Beachten Sie, dass ich die Erneuerung des Befehls vermeiden würde, \vecda die hohen Pfeile über kurzen Buchstaben für mich seltsam aussehen. Vergleichen Sie \myvec{a}\cdot\myvec{a}mit \vec{a}\cdot\vec{a}.

Aktualisieren:

Als letzte Option (mein Favorit) könnte man \myvec2 Parameter definieren: einer davon ist optional. Der erforderliche Parameter ist der gedruckte Buchstabe mit dem Pfeil, der zweite, optionale Parameter ist ein Zeichen, das die Höhe des Pfeils festlegt.

Bildbeschreibung hier eingeben

\myvec[t]{a}Sie erhalten also einen Vektor über aauf der Höhe von t. Wenn Sie das optionale Argument weglassen, erhalten Sie dasselbe Ergebnis wie \vec. Die obige Zeile wird aus dem Code erzeugt:

$\myvec{a}\cdot\vec{a}\quad\myvec[t]{a}\cdot\vec{t}\quad\myvec[j]{a}\cdot\vec{j}\quad\myvec[b]{a}\cdot\vec{b}\quad\myvec[A]{a}\cdot\vec{A}$

Der Code für \myvecist

\newcommand{\myvec}[2][]{\vec{\vphantom{#1}#2}}

und es wird für tiefgestellte/hochgestellte Zeichen wie in angepasst $A_{\myvec[t]{a}\cdot\vec{t}}$.

Antwort2

Die Idee ist, beim Messen der Höhe ein festes Zeichen hinzuzufügen. Ich habe gewählt T. Falls das Objekt höher ist, passt sich der Pfeil an, wie das (zugegebenermaßen konstruierte) Beispiel zeigt.

Der Code für den Pfeil wurde erweitert, um seine Verwendung auch in tiefgestellten und hochgestellten Zeichen zu ermöglichen.

\documentclass{article}
\usepackage{tikz}

\makeatletter
\newlength\xvec@height
\newlength\xvec@depth
\newlength\xvec@width
\def\xvec@dd{:}%
\def\xvec@d{.}%
\newcommand{\xvec}[2][]{{\mathpalette\xvec@{{#1}{#2}}}}
\newcommand{\xvec@}[2]{\xvec@@#1#2}
\newcommand{\xvec@@}[3]{%
  \settoheight{\xvec@height}{$\m@th#1 T#3$}%
  \settodepth{\xvec@depth}{$\m@th#1#3$}%
  \settowidth{\xvec@width}{$\m@th#1#3$}%
  \def\xvec@arg{#2}%
  \raisebox{.2ex}{\raisebox{\xvec@height}{\rlap{%
    \kern.05em%  (Because left edge of drawing is at .05em)
    \begin{tikzpicture}[scale=1]
    \pgfsetroundcap
    \draw (.05em,0)--(\[email protected],0);
    \draw (\[email protected],0)--(\[email protected], .075em);
    \draw (\[email protected],0)--(\[email protected],-.075em);
    \ifx\xvec@arg\xvec@d
      \fill(\xvec@width*.45,.5ex) circle (.5pt);
    \else\ifx\xvec@arg\xvec@dd
      \fill(\xvec@width*.30,.5ex) circle (.5pt);
      \fill(\xvec@width*.65,.5ex) circle (.5pt);
    \fi\fi
    \end{tikzpicture}%
  }}}%
  #3%
}
\makeatother

\let\stdvec\vec
\renewcommand{\vec}[1]{\xvec[]{#1}}

% --- Define \dvec and \ddvec for dotted and double-dotted vectors.
\newcommand{\dvec}[1]{\xvec[.]{#1}}
\newcommand{\ddvec}[1]{\xvec[:]{#1}}

\begin{document}

$\vec{a}\cdot\vec{b}$
$\dvec{a}\cdot\dvec{b}$
$\ddvec{a}\cdot\ddvec{b}$
$\dvec{\sum\limits_{k=1}^n a_k}$

$X_{\vec{a}+\vec{b}}$

\end{document}

Bildbeschreibung hier eingeben

Antwort3

Hier ist mein Ansatz:

Die Grundideebesteht darin, die Höhe jedes vecs-Arguments zu speichern und dann ein \rulemit der Breite 0 hinzuzufügen, aber mit der Höhe des höheren Arguments, das sich in jedem befindet, \vecmit seinem echten Argument, bevor es wirklich gedruckt wird. (Die Erweiterung findet innerhalb von a statt \saveboxund daher \vecist die maximal hinzuzufügende Höhe bereits berechnet und hinzugefügt worden, bevor der Ausdruck mit all seinen s wirklich verwendet wird.)

Zusatzfunktionen

– ein Befehl für \vec(benannt \myVec), der die zuletzt gefundene Höhe verwendet (tatsächlich der Befehl, der das Original \vecinnerhalb des Basisbefehls meines Ansatzes \mySHVecs– benannt – ersetzt)

- ein Befehlspaar zum Speichern und Wiederherstellen des aktuellen Werts der gespeicherten Maximalhöhe, um eine Wiederverwendung zu ermöglichen (so oft wie nötig)

\documentclass{article}
\usepackage{amsmath}

\let\oldvec\vec
\makeatletter
\newsavebox\myVec@TempBox %Box for each vector
\newsavebox\myVec@Box %Box for all vectors
\def\max@Height{0pt}
\newcounter{myVecDepth}



% Comand For SameHeightVectors (mySHVecs):
\newcommand\mySHVecs[1]{%
\xdef\max@Height{0pt}
\def\calcMaxVec##1{%
\savebox\myVec@TempBox{\hbox{\ensuremath{##1}}}\ifdim\dimexpr\ht\myVec@TempBox>\max@Height\xdef\max@Height{\the\ht\myVec@TempBox}\fi}
\let\vec\calcMaxVec\savebox\myVec@Box{\vbox{\ensuremath{#1}}}\let\vec\myVec#1\let\vec\oldvec}




% The changed command of vec that uses the maximum height inside the above environment that can be used outside also to use the last maximum height available
\newcommand\myVec[1]{\oldvec{\rule{0pt}{\max@Height}\ensuremath{#1}}}
% Save and restore current height with optional argument to can be used for several saves/restores
\newcommand\saveVecH[1][\tempheight]{\xdef#1{\max@Height}}
\newcommand\useVecH[1][\tempheight]{\xdef\max@Height{#1}}
\makeatother




%User Command that makes the vectors Same Height
%\newcommand\mySHVecs[1]{\begin{SetVecsToHeight}\ensuremath{#1}\end{SetVecsToHeight}}


\begin{document}

Simple command for some variables:

\vspace{0.5cm}


\[\mySHVecs{\vec{a}\cdot\vec{b}\cdot\vec{F_x^2}}\]

\vspace{1cm}

Demonstration of mixing commands \verb|\mySHVecs|, \verb|\oldvec| and \verb|\myVec|:

\vspace{0.5cm}

$\mySHVecs{\vec{a}\cdot\vec{b}\cdot\vec{F_x^2}}-\dfrac{\oldvec{a}}{b}\cdot \myVec{S}=\myVec{0}$

\vspace{1cm}

Demonstration of saved and reused value of height:

\vspace{0.5cm}

\[
\mySHVecs{\vec{a}\cdot\vec{\dfrac{b}{3}}}\saveVecH+\cdot X_{\mySHVecs{\vec{a}+\oldvec{b}}}\cdot\mySHVecs{\useVecH\vec{F_1}}
\]

\end{document}

Ausgabe:

Bildbeschreibung hier eingeben

verwandte Informationen