Farbige Box nach Paragraph-Heading

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


mais88
Forum-Anfänger
Forum-Anfänger
Beiträge: 13
Registriert: So 22. Apr 2012, 21:39

Farbige Box nach Paragraph-Heading

Beitrag von mais88 »

Ich möchte gerne vor (/hinter) jeder Paragraph-Überschrift eine farbige Box haben.
Ich habe das ganze jetzt behelfsmäßig folgendermaßen realisiert:
\documentclass[paper=a4,11pt]{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[ansinew]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[usenames,svgnames]{xcolor}
\usepackage{ifthen}
\usepackage{lipsum}
\parskip10pt
\parindent0pt

% Definition
\newcommand{\myparagraph}[2][0]{%
{\normalfont\normalsize\bfseries
\ifthenelse{\equal{#1}{0}}{%
#2%

}{}
\ifthenelse{\equal{#1}{used}}{%
\raisebox{.25ex}{\fcolorbox{black}{Green!75}{\begin{minipage}{1.2ex}\hfill\vspace{1.2ex}\end{minipage}}}~#2%

}{}
\ifthenelse{\equal{#1}{usable}}{%
\raisebox{.25ex}{\fcolorbox{black}{Orange!75}{\begin{minipage}{1.2ex}\hfill\vspace{1.2ex}\end{minipage}}}~#2%

}{}
\ifthenelse{\equal{#1}{unusable}}{%
\raisebox{.25ex}{\fcolorbox{black}{Red!75}{\begin{minipage}{1.2ex}\hfill\vspace{1.2ex}\end{minipage}}}~#2%

}{}
}}

\begin{document}
	\myparagraph[used]{Test}
	\lipsum[1]

	\myparagraph[usable]{Test}
	\lipsum[1]

	\myparagraph[unusable]{Test}
	\lipsum[1]
\end{document}
Nachteile die mir hier auffallen ist der fehlende Bezug zum eigentlichen Paragraph, also die interne Nummerierung und die Verwendbarkeit von bspw. \autoref.

Die Zentrierung der Box ist auch irgendwie gebastelt.

Ich wäre sehr dankbar über einige Verbesserungsvorschläge oder auch einen komplett anderen Weg unter Verwendung des \paragraph's.
Hier habe ich leider keinen Einstiegspunkt gefunden wo ich hätte ansetzen können!

Gruß!
Marcel

Epllus
Forum-Guru
Forum-Guru
Beiträge: 470
Registriert: So 23. Sep 2012, 17:31

Beitrag von Epllus »

Zur Numerierung:
\documentclass[paper=a4,11pt]{scrartcl} 
\usepackage[ngerman]{babel} 
\usepackage[ansinew]{inputenc} 
\usepackage[T1]{fontenc} 
\usepackage[usenames,svgnames]{xcolor} 
\usepackage{ifthen} 
\usepackage{lipsum,hyperref} 
\parskip10pt 
\parindent0pt 

\setcounter{secnumdepth}{5}	
\setcounter{tocdepth}{5}		

\newcounter{pcount}

% Definition  
%%% Wenn du keinen Absatz nachher möchstest, kommentiere die Leerzeilen aus
\newcommand{\myparagraph}[2][0]{\refstepcounter{pcount}% 
{\normalfont\normalsize\bfseries 
\ifthenelse{\equal{#1}{0}}{% 
#2~\thepcount% 

}{}%
\ifthenelse{\equal{#1}{used}}{% 
\raisebox{.25ex}{\fcolorbox{black}{Green!75}{\begin{minipage}{1.2ex}\hfill\vspace{1.2ex}\end{minipage}}}~#2~\thepcount% 

}{}%
\ifthenelse{\equal{#1}{usable}}{% 
\raisebox{.25ex}{\fcolorbox{black}{Orange!75}{\begin{minipage}{1.2ex}\hfill\vspace{1.2ex}\end{minipage}}}~#2~\thepcount% 

}{}%
\ifthenelse{\equal{#1}{unusable}}{% 
\raisebox{.25ex}{\fcolorbox{black}{Red!75}{\begin{minipage}{1.2ex}\hfill\vspace{1.2ex}\end{minipage}}}~#2~\thepcount% 

}{}%
}} 


\begin{document} 
   \myparagraph[used]{Test} 
   \lipsum[1] \label{ref}

   \myparagraph[usable]{Test} 
   \lipsum[1] 

   \myparagraph[unusable]{Test} 
   \lipsum[1] 

   \autoref{ref}
\end{document} 
Hoffe es hilft
Epllus

mais88
Forum-Anfänger
Forum-Anfänger
Beiträge: 13
Registriert: So 22. Apr 2012, 21:39

Beitrag von mais88 »

Okay, danke soweit!

Noch eine Frage an die LaTeX--Spezialisten:

Ich möchte teilweise zwischen diesen einzelnen myparagraphs verweisen.
Ist es sehr übertrieben/schlecht programmiert wenn ich das Command folgendermaßen erweitere?
% Mein Abschnitt
\newcommand{\myparagraph}[3][0]{%
{\normalfont\normalsize\bfseries
\ifthenelse{\equal{#1}{0}}{%
\phantomsection
#2%
\label{myp:#3}

}{}
\ifthenelse{\equal{#1}{used}}{%
\phantomsection
\raisebox{.4ex}{\fcolorbox{black}{Green!75}{\begin{minipage}{.5ex}\hfill\vspace{.5ex}\end{minipage}}}~#2%
\label{myp:#3}

}{}
\ifthenelse{\equal{#1}{usable}}{%
\phantomsection
\raisebox{.4ex}{\fcolorbox{black}{Orange!75}{\begin{minipage}{.5ex}\hfill\vspace{.5ex}\end{minipage}}}~#2%
\label{myp:#3}

}{}
\ifthenelse{\equal{#1}{unusable}}{%
\phantomsection
\raisebox{.4ex}{\fcolorbox{black}{Red!75}{\begin{minipage}{.5ex}\hfill\vspace{.5ex}\end{minipage}}}~#2%
\label{myp:#3}

}{}
}}
Vielleicht auch mit kurzer Begründung :-)
Danke!

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4300
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Beitrag von u_fischer »

Die ganze Definition ist verkorkst. Die vielen ifthenelse sind unnötig, die minipage ist zweifelhaft (eine einfachere Box reicht völlig) und Seitenumbrüche zwischen der Überschrift und dem nachfolgenden Text werden nicht unterdrückt.

Du solltest sowas besser mit \@startsection machen (falls die Überschriften sind in die Hierarchie einordnen sollen), oder dich an der Definition von minisec orientieren:
\documentclass[paper=a4,11pt]{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[ansinew]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[usenames,svgnames]{xcolor}
\usepackage{ifthen}
\usepackage{lipsum}
\parskip10pt
\parindent0pt

\colorlet{used}{Green!75}
\colorlet{usable}{Orange!75}
\colorlet{unusable}{Red!75}

\newcounter{myparagraph}
\makeatletter
\newcommand\myparagraph[2][]{%
 \refstepcounter{myparagraph}%
  \@afterindentfalse \vskip 1.5ex
  {\parindent\z@
   \setlength{\parfillskip}{\z@ plus 1fil}%
    \raggedsection\normalfont\sectfont\nobreak
    \usekomafont{minisec}%
    \ifthenelse{\equal{#1}{}}
    {}
    {\raisebox{.25ex}{\fcolorbox{black}{#1}{\rule{0pt}{1.2ex}\hspace{1.2ex}}}\hspace{1.2ex}}%
    \themyparagraph~#2\par\nobreak}\nobreak%
  \@afterheading
}
\makeatother
\begin{document}
    \myparagraph[used]{Test}
    \lipsum[1]

    \myparagraph[usable]{Test}
    \lipsum[1]

    \myparagraph[unusable]{Test}
    \lipsum[1]
    
    \myparagraph{Test}
    blub
\end{document}

mais88
Forum-Anfänger
Forum-Anfänger
Beiträge: 13
Registriert: So 22. Apr 2012, 21:39

Beitrag von mais88 »

Oha, vielen Dank! Ich habe das übernommen!

Da merkt man doch eine dezente Erfahrungsdifferenz. :-)

Antworten