Parameter auf Leerheit überprüfen

Klassen und Pakete zur einfachen Umsetzung individueller Vorstellungen


Mathefreak
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: So 27. Feb 2011, 03:37

Parameter auf Leerheit überprüfen

Beitrag von Mathefreak »

Hallo erstmal,

Ich werde demnächst meine Diplomarbeit schreiben und wollte bevor es losgeht soweit mit LaTeX umgehn können, damit ich mich während der Diplomarbeit net damit rumschlagen muss bei Problemen. Bin also absoluter Laie.

Hoffe mit kann einer bei meinem Problem helfen:

Hab mir "alg"(Algorithmus) definiert als ein Theorem aus dem amsmath Package und nach meinen Wünschen umgeändert durch Programmierungen, die ich mir ergoogelt habe.

Wenn ich jetzt ein neuen alg beginne
\begin{alg}[Extrapolationsalgorithmus]
gebe ich noch den Zusatzparameter "Extrapolationsalgorithmus" an. Wenn ich das tue, soll LaTeX einen Zeileumbruch machen.

Wenn ich keinen Zusatzparameter schreibe, soll er ein paar Zeilen freilassen, etwa mit \quad.

Da ist mir eine if-Abfrage in den Sinn gekommen
\ifthenelse{\equal{"Extrapolationsalgorithmus"}{\empty}}{\quad}{\newline}%
Mein Problem ist, das ich net weiß, wie ich den Parameter abfragen soll (deswegen steht im Code auch der Name, der ja von Fall zu Fall verschieden ist).
Jmd ne Idee?

Und wo im Header platzier ich den am besten?

Danke für die Hilfen im voraus.

Hier mein Minimalbeispiel (hoffe, es ist alles dabei):
\documentclass[15pt, ngerman, bigheadings]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{stmaryrd}
\usepackage{dsfont}
\usepackage{amssymb}
\usepackage{amsmath, amssymb, amsfonts, amsthm}
\usepackage{algorithmic}
\usepackage{ifthen}
\newtheoremstyle{neu}
   {0.5cm}                   %Space above
   {}                   %Space below
   {}                           %Body font: original {\normalfont}
   {}                      %Indent amount (empty = no indent,
                           %\parindent = para indent)
   {\normalfont}  %Thm head font original {\normalfont\bfseries}
   {}                     %Punctuation after thm head original :
   {\newline}              %Space after thm head: " " = normal interword
                           %space; \newline = linebreak
   {\underline{\textbf{\thmname{#1}\thmnumber{ #2}}}\textit{\thmnote{ (#3)}}}
\theoremstyle{neu}
\newtheorem{alg}{Algorithmus}[section]

\begin{document}
\section{Extrapolation}
test\\
\begin{alg}[Extrapolationsalgorithmus]
\ 
test\\test
\end{alg}
\end{document}
Zuletzt geändert von Mathefreak am So 27. Feb 2011, 14:28, insgesamt 1-mal geändert.

Benutzeravatar
iTob
Forum-Meister
Forum-Meister
Beiträge: 1221
Registriert: Mo 19. Apr 2010, 22:19
Kontaktdaten:

Beitrag von iTob »

Guten Morgen,

ich habe grad kein TeX-System, kann also nix testen. Auf die Parameter (= Argumente) einer Definition kannst du mit #n mit n aus {1,2,...,9}. Dabei steht n für die Nummer des Arguments. Das (einzig mögliche) optionale ist immer das erste, also #1. Die obligatorischen sind dann #2–#9, wenn es ein optionales Argument gibt bzw. #1–#9, wenn es nur obligatorische gibt.
In deinem Fall ist es also #1.
Siehe auch unser Wiki: http://www.golatex.de/wiki/index.php?ti ... nvironment


Die if-Abfrage könnte eventuell nicht klappen, weiß ich nicht. mir hat das geholfen:
http://www.golatex.de/newcommand-und-op ... t2549.html
(Antwort von Stefan zum (dort erst definierten) ifEmpty-Befehl)

Übrigens ist unterstreichen so ziemlich das Böseste, was man an Textauszeichnung machen kann, wenn man technisch weiter fortgeschritten ist, als Schreibmaschine. Ich würd’s einfach weglassen (Fett als Auszeichnung ist mehr als genug. Da in den KOMA-Klassen die Gliederungsebenen alle in serifenloser Schrift gesetzt sind, könnte man das hier eventuell übernehmen, also \textsf{…} statt \underline{…} und die Kursivierung der Note müsste dann eventuell durch eine schräge ersetzt werden: \textsl{…} statt \textit{…}.

Viele Grüße
Tobi

PS: Ich hab’s zwar nicht testen können, aber dein Beispiel schaut gut aus!

EDIT: Ich hab dein Beispiel jetzt doch gestestet. Du willst nicht wirklich 15pt Schriftgröße oder? Schreibst du ein Kinderbuch? :wink:
Was deine [size]-Befehle sollen, verstehe ich auch nicht. Das sieht mir eher nach BBCode, als nach LaTeX aus.

Hier noch das angepasste Beispiel:
\documentclass[ngerman, bigheadings]{scrartcl} 
\usepackage[T1]{fontenc} 
\usepackage[utf8]{inputenc} 
\usepackage{babel} 
\usepackage{stmaryrd} 
\usepackage{amssymb} 
\usepackage{amsmath, amssymb, amsfonts, amsthm} 
\usepackage{algorithmic} 
\makeatletter 
\def\ifEmpty#1{\def\@temp{#1}\ifx\@temp\@empty} 
\makeatother
\newtheoremstyle{neu} 
   {0.5cm}                   %Space above 
   {}                   %Space below 
   {}                           %Body font: original {\normalfont} 
   {}                      %Indent amount (empty = no indent, 
                           %\parindent = para indent) 
   {\normalfont}  %Thm head font original {\normalfont\bfseries} 
   {}                     %Punctuation after thm head original : 
   {}              %Space after thm head: " " = normal interword 
                           %space; \newline = linebreak 
   {\textbf{\textsf{\thmname{#1}~\thmnumber{#2}}}%
      \ifEmpty{#3}\quad%
      \else\textit{\thmnote{ (#3)\par}}%
      \fi%      
   } 
\theoremstyle{neu} 
\newtheorem{alg}{Algorithmus}[section] 

\begin{document} 
\section{Extrapolation} 
test

\begin{alg}[Extrapolationsalgorithmus]  
test

test 
\end{alg} 

\begin{alg}
test

test 
\end{alg} 
\end{document}
Sehe ich grad erst: „KOMA-Script“ ist jetzt eher nicht das richtige Unterforum für deine Frage. Besser gewesen wäre „Test- und Listenformatierung“ oder meiner Meinung nach am ehesten „eigene Strukturen“ …

Mathefreak
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: So 27. Feb 2011, 03:37

Beitrag von Mathefreak »

iTob hat geschrieben:Auf die Parameter (= Argumente) einer Definition kannst du mit #n mit n aus {1,2,...,9}. Dabei steht n für die Nummer des Arguments. Das (einzig mögliche) optionale ist immer das erste, also #1. Die obligatorischen sind dann #2–#9, wenn es ein optionales Argument gibt bzw. #1–#9, wenn es nur obligatorische gibt.
In deinem Fall ist es also #1.
Siehe auch unser Wiki: http://www.golatex.de/wiki/index.php?ti ... nvironment
Das war das Wissen, was mir fehlte. Das kommt davon, wenn man sein Wissen sich aus Bücher und Google erschleicht. ;)

iTob hat geschrieben:Übrigens ist unterstreichen so ziemlich das Böseste, was man an Textauszeichnung machen kann, wenn man technisch weiter fortgeschritten ist, als Schreibmaschine. Ich würd’s einfach weglassen [...]
Du willst nicht wirklich 15pt Schriftgröße oder? Schreibst du ein Kinderbuch? :wink:
Nein, ich werd meine Diplomarbeit in Mathe schreiben, befinde mich aber noch in der Testphase. Bisher mach ich das, wie ich das vom handschriftlichen her kenne. Muss mich am Ende wahrscheinlich eh an die Angaben des Lehrstuhls halten.
iTob hat geschrieben:Was deine [size]-Befehle sollen, verstehe ich auch nicht. Das sieht mir eher nach BBCode, als nach LaTeX aus.
Fehlerteufel eingeschlichen. Hab's oben korrigiert.


Dein Beispiel hat bei mir net gefunzt, dennoch hat mir dein Beitrag zur Lösung des Problems geholfen.
Hab meine if-Abfrage genommen und sie da eingesetzt, wo du deine hingetan hattest, mit der Korrektur, dass zuerst die "Befehlsstruktur" von \newtheoremstyle net verletzt wird. Außerdem musste ich bei %Space after thm head \newline mit 0cm ersetzen, da er ja net von Anfang an nen Zeilenumbruch machen soll.

So sieht also mein funktionierendes Beispiel aus:
\documentclass[12pt, ngerman, bigheadings]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{stmaryrd}
\usepackage{dsfont}
\usepackage{amssymb}
\usepackage{amsmath, amssymb, amsfonts, amsthm}
\usepackage{algorithmic}
\usepackage{ifthen}
\newtheoremstyle{neu}
   {0.5cm}                   %Space above
   {}                   %Space below
   {}                           %Body font: original {\normalfont}
   {}                      %Indent amount (empty = no indent,
                           %\parindent = para indent)
   {\normalfont}  %Thm head font original {\normalfont\bfseries}
   {}                     %Punctuation after thm head original :
   {0cm}              %Space after thm head: " " = normal interword
                           %space; \newline = linebreak
  {\underline{\textbf{\thmname{#1}\thmnumber{ #2}}}\textit{\thmnote{ (#3)}}
    \ifthenelse{\equal{#3}{\empty}}
   {\quad}
   {\newline}
   }
\theoremstyle{neu}
\newtheorem{alg}{Algorithmus}[section]
\begin{document}
\section{Extrapolation}
test\\
\begin{alg}[Extrapolationsalgorithmus]
test\\test
\end{alg}

\begin{alg}
test\\test
\end{alg}

\end{document}
iTob hat geschrieben:Sehe ich grad erst: „KOMA-Script“ ist jetzt eher nicht das richtige Unterforum für deine Frage. Besser gewesen wäre „Test- und Listenformatierung“ oder meiner Meinung nach am ehesten „eigene Strukturen“ …
Sag ja, Neuling. :D Wußte net so recht wohin mit meinem Anliegen.

Benutzeravatar
iTob
Forum-Meister
Forum-Meister
Beiträge: 1221
Registriert: Mo 19. Apr 2010, 22:19
Kontaktdaten:

Beitrag von iTob »

Hast du versucht mein Beipiel wie es ist zu kompilieren oder hast du es in dein Dokument kopiert? Dann hast du vielleicht vergessen die Definition von \ifEmpty mit zu kopieren? (die \…atletter sind wichtig!).

Wenn alles geklärt ist, solltest du den Status hier bitte entsprechend anpassen.


Noch was allgemeines: Also zusammegooglen schön und gut aber ich würde dir schon einen systematischen Einstieg empfehlen. Wenn du gerne viel ließt, dann zum Beispiel den LaTeX-Begleiter von Mittelbach/Goosens – da steht sehr viel zu LaTeX drin. Oder auch die KOMA-Script Dokumentation, in der ein paar allgemeinere Sachen auch erklärt werden; dennoch ist sie nicht unbedingt als Einstig in LaTeX gedacht.
Ich würde nicht versuchen, deine handschriftlichen Sachen nachzuempfinden durch angaben wie 15pt etc. Wenn du keine Ahnng von Layout und Typografie hast, solltest du dich zunächst auf die Standards von LaTeX verlassen, di bringen schon ganz schöne Ergebnisse. Lass also alles raus, was mit Layout & Co. zu tun hat, solange du nicht weißt was du warum damit erreichen willst ;)

Mathefreak
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: So 27. Feb 2011, 03:37

Beitrag von Mathefreak »

Hab deinen kompletten Code kopiert so wie er da stand. Bei mir funzte er net.

Ich hab hier ein Buch für LaTeX in Naturwissenschaften & Mathematik. Da steht nicht der theoretische Hintergrund im Vordergrund, sondern Lösungen für gewisse Problematiken. Also keinen systematischen Einstieg gehabt und deswegen meine Wissenslücken.

Standard schön und gut, aber dennoch würde ich gern nach meinen Vorstellungen bzw. an Beispiele einiger Skripts das Layout anpassen. 15pt war ne falsche Angabe, geb ich zu, hatte es ja bisher net ausgedruckt und gesehn, dass es vorne und hinten net passt. Wenn ich dann vom Lehrstuhl Layoutvorgaben bekomme, kann ich sie immer noch umändern bzw. den Standard wiederherstellen.

Benutzeravatar
iTob
Forum-Meister
Forum-Meister
Beiträge: 1221
Registriert: Mo 19. Apr 2010, 22:19
Kontaktdaten:

Beitrag von iTob »

Mit welcher Fehlermeldung geht der Code denn nicht?

Standard schön und gut, aber dennoch würde ich gern nach meinen Vorstellungen bzw. an Beispiele einiger Skripts das Layout anpassen. 15pt war ne falsche Angabe, geb ich zu, hatte es ja bisher net ausgedruckt und gesehn, dass es vorne und hinten net passt. Wenn ich dann vom Lehrstuhl Layoutvorgaben bekomme, kann ich sie immer noch umändern bzw. den Standard wiederherstellen.
Klar kann man seine eigenen Vorstellungen umsetzten nur hilft es, wenn man weiß was man tut und 15pt Schriftgröße sprechen eher dafür, dass man das nicht weiß. Aber das bleibt ja dir überlassen und das müssen wir an dieser Stelle auch nicht ausdiskutieren … ;)

Schönen Abend noch!
Tobi

Mathefreak
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: So 27. Feb 2011, 03:37

Beitrag von Mathefreak »

! Paragraph ended before \text@command was complete.
Das kommt raus.

Wie gesagt, muss man
Mathefreak hat geschrieben:bei %Space after thm head \newline mit 0cm ersetzen
sonst gibt der einen weiteren Fehler an.

Hab auch jetzt rausgefunden woran es liegt. Er akzeptiert den Befehl \par (neuen Absatz) in der if-Abfrage nicht, dafür aber z.B. \newline (neue Zeile). Liegt wohl an der Definition der if-Abfrage.

Dann funzt auch dein Vorschlag.

Antworten