1 Befehl für verschiedene Größe der Klammern (via Parameter)

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


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

1 Befehl für verschiedene Größe der Klammern (via Parameter)

Beitrag von guy.brush™ »

Hallo,

meine Frage ist etwas komplizierter, vermute ich einmal. Ich kam darauf, dass es manchmal im Klammernjungel doch etwas besser wäre, wenn man einen einzelnen Befehl verwendet anstelle von immer \bigl(, \Biggr\}, usw.

Für manche Delimiter, die sich in der Größe anpassen können, habe ich schon 2 Arten von Befehlen definiert. Dies möchte ich an einem Beispiel demonstrieren:
\newcommand{\ceil}[1]{\lceil #1 \rceil}	% Definition einer oberen Gauß-Klammer
\newcommand{\Ceil}[1]{\left\lceil #1 \right\rceil}	% Definition einer sich in der Größe anpassenden oberen Gauß-Klammer
Meine Idee war jetzt, ob sich die Befehle \Ceil und Verwandte noch etwas optimieren lassen. Optimal wäre folgendes Ergebnis:
  1. \Ceil ohne optionalen Parameter macht genau dasselbe wie oben in meiner bisherigen Definition.
  2. \Ceil mit optionalen Parameter lässt sich dann an eine fest gewünschte Größe anpassen, z.B. mit \bigl und \bigr.
Ein paar Beispiele:
\ceil{x}    % keine Größenanpassung (siehe oben)
\Ceil{x}    % Größenanpassung via \left\ceil und \right\ceil
\Ceil[big]{x}    % Größenanpassung mit \bigl\ceil und \bigr\ceil
\Ceil[Bigg]{x}    % Größenanpassung mit \Biggl\ceil und \Biggr\ceil
Ich hoffe, dass die Beispiele mein Vorhaben etwas deutlicher machen. Ich würde dies natürlich nicht nur für \Ceil verwenden, insb. \parens, \brackets und \braces wären auch tolle Ergänzungen. Deshalb wäre es noch optimaler, wenn es 1 Funktion gäbe, die ich dann in der \Ceil und Verwandte Definition aufrufen kann (würde den Code etwas lesbarer halten).

Ich hoffe, es ist verständlich geworden, was ich meine. Ist dies möglich? Und falls ja, wie schwer ist die Implementierung und hat jemand eine Idee, wie das gehen könnte? [Ich hoffe, ihr denkt nicht, dass meine Idee zu abstrus ist :)].

Viele Grüße,

guy.brush™

PS: Also
\newcommand{\foobar}[2]{\#1l(#2\#1r)}
\[
  \foobar{Bigg}{x}
\]
scheint schon einmal nicht zu funktionieren :).
Arch Linux - KDE - TeXLive - Kile - \me = Advanced Newbie

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

Nerd 032F

Re: 1 Befehl für verschiedene Größe der Klammern (via Parame

Beitrag von Nerd 032F »

guy.brush™ hat geschrieben:
\newcommand{\foobar}[2]{\#1l(#2\#1r)}
\[
  \foobar{Bigg}{x}
\]
scheint schon einmal nicht zu funktionieren :).
Dir ist hoffentlich auch klar, warum: \# ist schlicht das Makro, um ein # zu setzen.

Was Du suchst, sind Anweisungen wie \@nameuse aus dem LaTeX-Kern (siehe source2e.pdf):
\newcommand{\foobar}[2][\relax]{%
  \ifx \relax#1\relax% Wenn #1 leer ist oder mit \relax beginnt
    \left(#2\right)%
  \else 
    \@nameuse{#1l}(#2\@nameuse{#1r})%
  \fi
}

CrazyHorse
Forum-Guru
Forum-Guru
Beiträge: 252
Registriert: Di 16. Mär 2010, 09:39

Re: 1 Befehl für verschiedene Größe der Klammern (via Parame

Beitrag von CrazyHorse »

guy.brush™ hat geschrieben: meine Frage ist etwas komplizierter, vermute ich einmal. Ich kam darauf, dass es manchmal im Klammernjungel doch etwas besser wäre, wenn man einen einzelnen Befehl verwendet anstelle von immer \bigl(, \Biggr\}, usw.

Für manche Delimiter, die sich in der Größe anpassen können, habe ich schon 2 Arten von Befehlen definiert. Dies möchte ich an einem Beispiel demonstrieren:
\documentclass{article}
\usepackage{amsmath}

\newcommand\ceil[1]{\lceil #1 \rceil}
\newcommand\Ceil[2][]{%
  \ifx\relax#1\relax
    \left\lceil#2\right\rceil
  \else
    #1\lceil#2 #1\rceil
  \fi}
\begin{document}
$
\ceil{x}   
\Ceil{x}    
\Ceil[\big]{x}   
\Ceil[\Bigg]{x}  
$
\end{document}
Herbert

Benutzeravatar
localghost
Forum-Meister
Forum-Meister
Beiträge: 825
Registriert: Di 8. Jul 2008, 15:40
Wohnort: Braunschweig

Nicht das Rad neu erfinden

Beitrag von localghost »

Die Befehle musst Du dir nicht extra selbst zusammenbauen. Schau dir mal Abschnitt 3.6 (Paired delimiters, S. 19ff) der Anleitung zu mathtools an.


Thorsten
TeX und LaTeX, Fragen und Antworten – TeXwelt

¹ Es tut mir Leid. Meine Antworten sind begrenzt. Sie müssen die richtigen Fragen stellen.
² System: openSUSE 13.1 (Linux 3.11.6), TeX Live 2013, TeXworks 0.5 (r1349)
³ Lernt gerade TeX (und versucht, es zu verstehen).

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

Beitrag von guy.brush™ »

Ah, vielen Dank! Gerade das mit mathtools sieht doch sehr gut aus. Falls es dazu noch Probleme geben sollte, werde ich mich diesbezüglich noch einmal melden. Ob ich in Zukunft die *-Variante oder meine obige Variante mit dem Großbuchstaben nehmen werde, weiß ich noch nicht. Ansonsten wäre dieser Teil wohl als abgeschlossen zu betrachten. :)

Ich möchte aber noch eine kleine Frage nachreichen. Zum Definieren neuer und größerer Delimiter als \Bigg habe ich folgendes gefunden: Link 1 und Link 2.
% For CM:

% \def\big#1{{\hbox{$\left#1\vbox to8.5\p@{}\right.\n@space$}}}
% \def\Big#1{{\hbox{$\left#1\vbox to11.5\p@{}\right.\n@space$}}}
% \def\bigg#1{{\hbox{$\left#1\vbox to14.5\p@{}\right.\n@space$}}}
% \def\Bigg#1{{\hbox{$\left#1\vbox to17.5\p@{}\right.\n@space$}}}

% Even bigger sizes than plain provides.
\def\biggg#1{{\hbox{$\left#1\vbox to20.5pt{}\right.$}}}
\def\bigggl{\mathopen\biggg}
\def\bigggr{\mathclose\biggg}
\def\Biggg#1{{\hbox{$\left#1\vbox to23.5pt{}\right.$}}}
\def\Bigggl{\mathopen\Biggg}
\def\Bigggr{\mathclose\Biggg}
Da der Inhalt des 2. Links auf 2007 datiert ist, wollte ich fragen, ob die Werte so noch passen für die ganzen big, Big, bigg,... Definitionen? Falls ja, dann kann man sich sehr schön weitere definieren und immer um 3.0 pt größer machen.

Was ich als kleine Verständnisfrage noch gerne wissen würde: Wieso wird bei der grundlegenden Definition jeweils der rechte und linke Delimiter jeweils nur mit \left definiert und erhält rechts ein right.?


Viele Grüße,

guy.brush™
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