\newcommand -> subset und superset an bestimmter Position

Formelsatz für Mathematik, Naturwissenschaften und Technik


p90
Forum-Newbie
Forum-Newbie
Beiträge: 2
Registriert: Sa 21. Apr 2012, 18:38

\newcommand -> subset und superset an bestimmter Position

Beitrag von p90 »

Hi,

da ich an meinen Operatoren gerne Klammern habe, habe ich bisher soetwas verwendet.
\let\oldcos\cos
\renewcommand*{\cos}[1]{\oldcos{\left( #1\right)}}
Nun möchte ich dafür sorgen, dass
\cos{w}_i
zu
\cos_i \left( w \right)

wird statt
\cos \left( w \right)_i

Wie bekomme ich das hin?

MfG


p90

rais
Forum-Guru
Forum-Guru
Beiträge: 413
Registriert: Di 21. Sep 2010, 00:37

Re: \newcommand -> subset und superset an bestimmter Posi

Beitrag von rais »

p90 hat geschrieben: da ich an meinen Operatoren gerne Klammern habe, habe ich bisher soetwas verwendet.
\let\oldcos\cos
\renewcommand*{\cos}[1]{\oldcos{\left( #1\right)}}
Poste bitte (zukünftig) vollständige Minimalbeispiele, keine Schnippsel!
p90 hat geschrieben: Nun möchte ich dafür sorgen, dass
\cos{w}_i
zu
\cos_i \left( w \right)

wird statt
\cos \left( w \right)_i

Wie bekomme ich das hin?
wenn ich Dich recht verstehe, etwa so:
\documentclass{article}
\let\oldcos\cos
\makeatletter
\newcommand*\cos@ii[5]{%
  \oldcos{%
    \ifx\relax#2\relax\else#2#3\fi
    \ifx\relax#4\relax\else#4#5\fi
    \left(#1\right)}%
}
\newcommand*\cos@i[3]{%
  \@ifnextchar_{\cos@ii{#1}{#2}{#3}}{%
    \@ifnextchar^{\cos@ii{#1}{#2}{#3}}{\cos@ii{#1}{#2}{#3}{}{}}}%
}
\renewcommand*\cos[1]{%
  \@ifnextchar^{\cos@i{#1}}{%
    \@ifnextchar_{\cos@i{#1}}{\cos@i{#1}{}{}}}%
}
\makeatother
\begin{document}
\[
  \cos{w}\quad\cos{w}_i\quad\cos{w}^j\quad\cos{w}^j_i\quad\cos{w}_i^j
\]
\end{document}
MfG
Rainer
One of the joys of travel is visiting new towns and meeting new people---G.Khan (Robert Asprin, Another Fine Myth)

p91
Forum-Newbie
Forum-Newbie
Beiträge: 6
Registriert: So 11. Nov 2012, 19:09

Beitrag von p91 »

Hi,

der Code von Reiner funktioniert gut solange man nur ein Subset hat, dass nur ein Zeichen lang ist.
hat man mehr Zeichen muss eine kleine Korrektur eingefügt werden und zwar:
\newcommand*\cos@ii[5]{%
  \oldcos{%
    \ifx\relax#2\relax\else#2{#3}\fi
    \ifx\relax#4\relax\else#4{#5}\fi
    \left(#1\right)}%
} 

guy.brush™
Forum-Century
Forum-Century
Beiträge: 185
Registriert: So 8. Aug 2010, 19:43
Wohnort: Earth

Beitrag von guy.brush™ »

Ich vermute, du meinst, dass \cos(x)_i zu \oldcos_i\left( x \right) werden soll, oder?^^

Schau dir aber mal noch das Paket "xparse" an, damit sollte das sehr leicht moeglich sein. Du kannst dir da sehr maechtige Befehle mit zusammenbasteln. Mit dem Befehl \NewDocumentCommand und Konsorten kannst du dir das dann definieren und hast auch mehr optionale Parameter zur Verfuegung. Du kannst auch sagen, dass der optionale Parameter mit einem "_" beginnen muss/soll.

Die Version wuerde ich jetzt schoener finden als die Definition von rais :).
Arch Linux - KDE - TeXLive - Kile - \me = Advanced Newbie

Interessensschwerpunkte: Mathematik- und Formelsatz sowie mathematische (Mikro-)Typographie
Offenes Problem: negierte \xarrow-Pfeile beliebiger Länge

Antworten