Beispiel xkeyval aus DTK 3/2011

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Beispiel xkeyval aus DTK 3/2011

von Klaus » Sa 7. Jan 2012, 17:41

Hi,
Alles klar! :)
iTob hat geschrieben: Hab’ die Lösung. Folgende Definition führt zum Ziel:
\makeatletter
\newenvironment{env}{%
	\par\addvspace{\baselineskip}%
	\hspace*{2em}%
	\begin{minipage}{0.5\textwidth}%
}{%
	\end{minipage}%
	\par\addvspace{\baselineskip}%
	\@endpetrue%
}
\makeatother
Habe auf TeX.SX gefragt und dort wusste es natürlich jemand :-)
Heißen Dank! Du bist der Beste. :)

Viele Grüße,
Klaus.

von iTob » Sa 7. Jan 2012, 17:15

Hab’ die Lösung. Folgende Definition führt zum Ziel:
\makeatletter
\newenvironment{env}{%
	\par\addvspace{\baselineskip}%
	\hspace*{2em}%
	\begin{minipage}{0.5\textwidth}%
}{%
	\end{minipage}%
	\par\addvspace{\baselineskip}%
	\@endpetrue%
}
\makeatother
Habe auf TeX.SX gefragt und dort wusste es natürlich jemand :-)

von Sepp99 » Sa 7. Jan 2012, 16:05

Klaus hat geschrieben:
iTob hat geschrieben: PS: Der Status Rückfrage ist anders gedacht ;-)
Äh, wie dann?
Siehe http://www.golatex.de/themen-mit-status ... t1872.html

Gruß, Sepp.-

von Klaus » Sa 7. Jan 2012, 15:28

Heißen Dank!

Damit muss ich gleich mal rumspielen und ausprobieren! :)
iTob hat geschrieben: PS: Der Status Rückfrage ist anders gedacht ;-)
Äh, wie dann?

Gruß,
Klaus.

von iTob » Sa 7. Jan 2012, 14:34

Da du ja nicht nur einen Zeilenumbuch sondern einen neuen Absatz willst, würde ich \par benutzen. Um die zusätzlichen Abstnde einzufügen empfielt sich \addvspace statt \vspace, weil ersteres den Leerraum nicht vergrößert, wenn bereit einer eingefügt wurde.
Um nach einer ggf. in einen (inhaltlichen) Absatz integrierten Minipage keinen Einzug zu bekommen, kannst du \noindent\ignorespacesafterend einfügen:

Hier nun der Code
\documentclass{scrartcl}

\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}

\makeatletter
\newenvironment{env}{%
	\par\addvspace{2\baselineskip}%
	\hspace*{2em}%
	\begin{minipage}{0.5\textwidth}%
}{%
	\end{minipage}%
	\par\addvspace{2\baselineskip}%
	\noindent\ignorespacesafterend%
}
\makeatother

\begin{document}
Das ein inhaltlicher Absatz davor (Fülltext Fülltext Fülltext Fülltext Fülltext
Fülltext Fülltext Fülltext Fülltext Fülltext Fülltext Fülltext Fülltext
Fülltext Fülltext Fülltext Fülltext),
\begin{env}
--- Das ist die Minipage ---
\end{env}
der danach weitergeht (Fülltext Fülltext Fülltext Fülltext Fülltext
Fülltext Fülltext Fülltext Fülltext Fülltext Fülltext Fülltext Fülltext
Fülltext Fülltext Fülltext Fülltext).

Neuer Absatz (Fülltext Fülltext Fülltext Fülltext Fülltext
Fülltext Fülltext Fülltext Fülltext Fülltext Fülltext Fülltext Fülltext
Fülltext Fülltext Fülltext Fülltext) \dots
\begin{env}
--- Noch eine Minipage ---
\end{env}

Dieses mal beginnt danach aber ein neuer inhaltlicher Absatz (Fülltext
Fülltext Fülltext Fülltext Fülltext Fülltext Fülltext Fülltext Fülltext
Fülltext Fülltext Fülltext Fülltext)

\begin{env}
--- Folgen zwei aufeinander, ---
\end{env}
\begin{env}
--- wird trotzdem nur einfacher Abstand eingefügt ---
\end{env}
\end{document}
Anmerkung: Das was ich zu \addvspace gesagt habe stimmt, wird hier aber blöderweise ausgehebelt. Ich muss mal schauen, ob ich da noch eine bessere Lösung finde.

PS: Der Status Rückfrage ist anders gedacht ;-)

von Klaus » Sa 7. Jan 2012, 14:30

Ich habe dazu nochmal eine Rückfrage.
Ich habe das obige Minimalbeispiel leicht modifiziert mit einem Satz vor und nach der Box:
\documentclass[a4paper,fontsize=11pt,ngerman]{scrartcl}
% Packages
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage{xkeyval}
\usepackage{calc}
% new Commands
\newcommand*\TextColor{black}
\newcommand*\BackgroundColor{white}
\newcommand*\BorderColor{black}
\makeatletter
\define@choicekey{TextAlignment}{align}[\val\al]{right,left,center,block}{%
   \ifcase\al\relax \raggedleft%
      \or\raggedright%
      \or\centering%
      \or% Blocksatz
   \fi}  
\define@key{TextBox}{textcolor}{\renewcommand*\TextColor{#1}}
\define@key{TextBox}{background}{\renewcommand*\BackgroundColor{#1}}
\define@key{TextBox}{bordercolor}{\renewcommand*\BorderColor{#1}}
\define@key{TextBox}{border}{\setlength\fboxrule{#1}}
\define@key{TextBox}{bordersep}{\setlength\fboxsep{#1}}
\presetkeys{TextBox}{bordercolor=black,textcolor=black,background=white,%
border=0.8pt,bordersep=3pt}{}%
\presetkeys{TextAlignment}{align=block}{}%
\makeatother
\newcommand\framedtext[2][]{%
\begingroup%
\setkeys*{TextBox}{#1}%
\fcolorbox{\BorderColor}{\BackgroundColor}{%
\begin{minipage}{\linewidth-2\fboxsep-2\fboxrule}%
\setrmkeys{TextAlignment}%
\textcolor{\TextColor}{#2}%
\end{minipage}}%
\endgroup}%
\begin{document}
Hier steht davor Text.
\framedtext[align=center]{%
Hello World!%
}
Und hier danach
\end{document}
Was mich jetzt wundert, dass die Box diret in der gleichen Zeile begonnen wird, wo der erste Satz aufhört.
Also scheinbar impliziert die minipage-Umgebung keinen automatischen Zeilenumbruch, wie ich es z.B. von Mathematikumgebungen (displaymath, equation, usw.) gewohnt bin?

Wie kann ich das denn zusätzlich einbauen?

Muss ich dann in der Definition der fcolorbox noch ein linebreak (oder ein vspace{} ) vor und nach der Minipageumgebung einbauen, z.B. so:
\fcolorbox{\BorderColor}{\BackgroundColor}{%
\linebreak
\begin{minipage}{\linewidth-2\fboxsep-2\fboxrule}%
\setrmkeys{TextAlignment}%
\textcolor{\TextColor}{#2}%
\end{minipage}%
\linebreak}%
Gruß,
Klaus.

von bloodworks » Di 20. Dez 2011, 14:17

Klaus hat geschrieben:
Ich gestehe, dass ich das Beispiel dahingehend verändert habe, dass der Author seine documentclass mit der Option
parskip=half-
definiert hat. Das sollte die Box doch auch zum Positiven verändern, oder?
Ja bei dieser Option wird der parindet auf 0 gesetzt. Damit gibts es keinen Absatzeinzug. Das ist ein bisschen ein Trick, damit muss der Autor sich nicht um den Einzug kümmern muss.
Klaus hat geschrieben: [1] Nun, dieser Kommentar rennt gerade bei mir offene Türen ein. So sehr wir LaTex Neulinge darauf getrimmt werden kompilierfähige Minimalbeispiele zu liefern, so fehlte erstmal die Angabe, dass 'xkeyval' und 'color' als Paket geladen werden sollen. Und jetzt scheinbar noch zusätzlich 'calc'? Das hat mich ein wenig geärgert. ;)
Nun ja ich spreche mich sehr dafür aus, auch in der DTK komplette lauffähige Beispiele zu machen. Wenn du möchtest, kannst du das ja mal verifizieren (also ich für meinen Teil würde den Fehler erst mal bei mir vermuten) und dann den Autor darauf ansprechen. Entweder direkt oder in der dante mailing liste.

Grüße

von Klaus » Di 20. Dez 2011, 14:08

bloodworks hat geschrieben:Füge noch ein
\usepackage{calc}
hinzu.
Cool, das hat funktioniert! :shock: [1]

Warum?

bloodworks hat geschrieben: Ich finde das Beispiel so im Übrigen nicht so gut. Ohne \noindent vor dem Befehl ragt die Box über den Satzspiegel hinaus.
\usepackage{showframe}
zeigt das ganz gut.
Ich gestehe, dass ich das Beispiel dahingehend verändert habe, dass der Author seine documentclass mit der Option
parskip=half-
definiert hat. Das sollte die Box doch auch zum Positiven verändern, oder?

Gruß,
Klaus.

[1] Nun, dieser Kommentar rennt gerade bei mir offene Türen ein. So sehr wir LaTex Neulinge darauf getrimmt werden kompilierfähige Minimalbeispiele zu liefern, so fehlte erstmal die Angabe, dass 'xkeyval' und 'color' als Paket geladen werden sollen. Und jetzt scheinbar noch zusätzlich 'calc'? Das hat mich ein wenig geärgert. ;)

von bloodworks » Di 20. Dez 2011, 12:33

Füge noch ein
\usepackage{calc}
hinzu. Ich habe jetzt die DTK nicht zur Hand (was natürlich für eine pdf-Version sprechen würde, vll gehe ich doch nach Leipzig), deshalb kann ich dir nicht sagen, wie das im Beispiel gelöst wurde.

Ich finde das Beispiel so im Übrigen nicht so gut. Ohne \noindent vor dem Befehl ragt die Box über den Satzspiegel hinaus.
\usepackage{showframe}
zeigt das ganz gut.

Beispiel xkeyval aus DTK 3/2011

von Klaus » Di 20. Dez 2011, 12:30

Hi,

ich habe mir das Beispiel zu Textboxen mit Hilfe des xkeyval Pakets (aus der texnischen Komödie 3/2011) zu Gemüte geführt.

Momentan sieht mein Code so aus:
\documentclass[a4paper,fontsize=11pt]{scrartcl}
% Packages
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{color}
\usepackage{xkeyval}
% new Commands
\newcommand*\TextColor{black}
\newcommand*\BackgroundColor{white}
\newcommand*\BorderColor{black}
\makeatletter
\define@choicekey{TextAlignment}{align}[\val\al]{right,left,center,block}{%
	\ifcase\al\relax \raggedleft%
		\or\raggedright%
		\or\centering%
		\or% Blocksatz
	\fi}	
\define@key{TextBox}{textcolor}{\renewcommand*\TextColor{#1}}
\define@key{TextBox}{background}{\renewcommand*\BackgroundColor{#1}}
\define@key{TextBox}{bordercolor}{\renewcommand*\BorderColor{#1}}
\define@key{TextBox}{border}{\setlength\fboxrule{#1}}
\define@key{TextBox}{bordersep}{\setlength\fboxsep{#1}}
\presetkeys{TextBox}{bordercolor=black,textcolor=black,background=white,%
border=0.8pt,bordersep=3pt}{}%
\presetkeys{TextAlignment}{align=block}{}%
\makeatother
\newcommand\framedtext[2][]{%
\begingroup%
\setkeys*{TextBox}{#1}%
\fcolorbox{\BorderColor}{\BackgroundColor}{%
\begin{minipage}{\linewidth-2\fboxsep-2\fboxrule}%
\setrmkeys{TextAlignment}%
\textcolor{\TextColor}{#2}%
\end{minipage}}%
\endgroup}%
\begin{document}
\framedtext[align=center]{%
Hello World!%
}
\end{document}
Wenn ich kompiliere, dann bekomme ich eine Box, in der Hello World zentriert ist, allerdings am linken Rand noch ein -2-2 steht. :shock:

Kommt das von der Definition der Minipage? Schließlich verwende ich dort zwei Mal -2. Aber ich kann mir nicht erklären was da passiert.

Gruß,
Klaus.

Nach oben