Seite 1 von 1

Farbige Box nach Paragraph-Heading

Verfasst: So 28. Apr 2013, 12:58
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

Verfasst: So 28. Apr 2013, 16:35
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

Verfasst: Mi 1. Mai 2013, 14:26
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!

Verfasst: Mi 1. Mai 2013, 15:46
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}

Verfasst: Mi 1. Mai 2013, 17:22
von mais88
Oha, vielen Dank! Ich habe das übernommen!

Da merkt man doch eine dezente Erfahrungsdifferenz. :-)