Sie sind hier

Nicht-zentriere Tabellenüberschrift vermeiden bei ctable/float mit KOMA-Script (Cross-post tex.SO)

Hallo,

Ich versuche meine Gleitumgebungen mit Hilfe von float und KOMA's komaabove/komabelow einzustellen. Dabei gitb es mit ctables ein Überschriftenpositionierungs-Problem, wenn ich \restylefloat auf tabellen anwende.

Wie bekomm ich die Überschrift korrekt zentriert?

MWE:

\documentclass{scrartcl}
\usepackage{float}
\usepackage{ctable}
\floatstyle{komaabove}
\restylefloat{table}
\begin{document}
\ctable[table,caption={Test test test test testtest test test testtest},
label=tbl:things]%
{>{}p{.4\linewidth}@{}c}{}{%
\FL Part           & done
\ML Title          & yes
\NN Intro          & yes
\NN Solution       & yes
\NN Implementation & yes
\NN Evaluation     & no
\NN Related Work   & no
\NN Conclusion     & yes
\LL
}
\end{document}

Info: Cross-post, da im Stackoverflow-artikel gesagt wurde, ich solle mich besser an den KOMA-Script-Entwickler wenden.

forum: 
Bild von Markus Kohm

Lass das nichts als Ärger verursachende float-Paket bzw. \restylefloat weg:

\documentclass[captions=tableabove]{scrartcl}
%\usepackage{float}
\usepackage{ctable}
%\floatstyle{komaabove}
%\restylefloat{table}
\begin{document}
\ctable[table,caption={Test test test test testtest test test testtest},
label=tbl:things]%
{>{}p{.4\linewidth}@{}c}{}{%
\FL Part           & done
\ML Title          & yes
\NN Intro          & yes
\NN Solution       & yes
\NN Implementation & yes
\NN Evaluation     & no
\NN Related Work   & no
\NN Conclusion     & yes
\LL
}
\end{document}

Mit article gibt es das Zentrierungsproblem ganz genauso:

\documentclass{article}
\usepackage{float}
\usepackage{ctable}
%\floatstyle{komaabove}
\restylefloat{table}
\begin{document}
\ctable[table,caption={Test test test test testtest test test testtest},
label=tbl:things]%
{>{}p{.4\linewidth}@{}c}{}{%
\FL Part           & done
\ML Title          & yes
\NN Intro          & yes
\NN Solution       & yes
\NN Implementation & yes
\NN Evaluation     & no
\NN Related Work   & no
\NN Conclusion     & yes
\LL
}
\end{document}

Das ist also kein KOMA-Script-Problem, sondern ein Problem des Zusammenspiels von ctable und float.

Danke für den Hinweis.

Hier die Begründung, Warum ich eigentlich mit float arbeite:

Ich schreibe eine Wrapper-Klasse und meine Nutzer werden sehr wahrscheinlich
so Pakte wie listings, algorithm2e, alogrithm, subcaption und so weiter brauchen.

Ich wollte sicherstellen, dass tabellenartige/listingartige Gleitumgebungen (die in diesen Paketen gemacht werden und z.T. direkt auf dem float-Paket aufbauen) auch Über- statt Unterschriften erhalten und entsprechen der KOMA-Einstellungen gestyled sind (in meinem Fall captionlabel fett, \setcapindent{1em}).

Bild von Markus Kohm

Die Pakete listings und subcaption benötigen kein float. Die anderen (hoffentlich) kein \restylefloat, sondern allenfalls ein \floatstyle bevor sie geladen werden. Aber es gibt meist Alternativen, beispielsweise die Definition der Gleitumgebung mit Hilfe von \DeclareNewTOC und lediglich die Verwendung der Pseudo-Code-Umgebungen der verschiedenen Pakete statt deren Gleitumgebungen. Hier ein Beispiel mit algorithmicx statt algorithm2e:

\documentclass{scrartcl}
\usepackage{algpseudocode}
 
% Noch ohne Einstellungen für das Gleiten oder das Verzeichnis,
% siehe dazu ggf. die KOMA-Script-Anleitung oder das -Buch.
\DeclareNewTOC[name=Algorithm,
  type=algorithm,
  atbegin=\KOMAoptions{captions=above},
  float]{alg}
 
% Wenn man denn unbedingt eine Linie über und unter dem
% Algorithmus haben will, dann gehört das an diese Umgebung
% und nicht an die Gleitumgebung gebunden!
\usepackage{etoolbox}
\pretocmd{\algorithmic}{\hrulefill}{}{\undefined}
\apptocmd{\endalgorithmic}{\hrulefill}{}{\undefined}
 
\begin{document}
\begin{algorithm}
\caption{The Bellman-Kalaba algorithm}
\begin{algorithmic}[1]
\Procedure {BellmanKalaba}{$G$, $u$, $l$, $p$}
\ForAll {$v \in V(G)$}
\State $l(v) \leftarrow \infty$
\EndFor
\State $l(u) \leftarrow 0$
\Repeat
\For {$i \leftarrow 1, n$}
\State $min \leftarrow l(v_i)$
\For {$j \leftarrow 1, n$}
\If {$min > e(v_i, v_j) + l(v_j)$}
\State $min \leftarrow e(v_i, v_j)$\State $p(i) \leftarrow v_j$
\EndIf
$+l(v_j)$
\EndFor
\State $l’(i) \leftarrow min$
\EndFor
\State $changed \leftarrow l \not= l’$
\State $l \leftarrow l’$
\Until{$\neg changed$}
\EndProcedure
\Statex
\Procedure {FindPathBK}{$v$, $u$, $p$}
\If {$v = u$}
\State \textbf{Write} $v$
\Else
\State $w \leftarrow v$
\While {$w \not= u$}
\State \textbf{Write} $w$
\State $w \leftarrow p(w)$
\EndWhile
\EndIf
\EndProcedure
\end{algorithmic}
\end{algorithm}
\end{document}

Es gibt weitere Pakete zum Setzen von Pseudocode/Algorithmen. Inwiefern diese geeignet oder geeigneter sind, weiß ich bisher aber nicht.

Und noch etwas: Eine mit Paketen vollgestopfte Wrapper-Klasse kann auch genau das Gegenteil bewirken, also dem Anwender das Leben schwer machen (wie Dein eigenes Beispiel zeigt). Meist beginnt es damit, dass es den Anwender einschränkt, weil er nicht mehr die Pakete verwenden kann, die er will, sondern die verwenden muss, die ihm die Klasse vorschreibt. Glücklich, wer dann weiß, dass er eigentlich überflüssige Pakete mit Hilfe von scrlfile (ja, das Paket kann mit \RequirePackage auch vor der Klasse geladen werden) deaktivieren kann … Ganz schlimm wird es, wenn ihm die Klasse die Verwendung von inputenc oder fontenc (womöglich noch mit ganz bestimmten Optionen) vorschreibt …

Danke für dieses gute Beispiel. Ich werde sehen, dass ggf mit einzubauen.

Mein versuch bestimmte Einschränkungen einzuführen rührt von Verlagsanforderungen her.
Außerdem wollte ich den Nachbearbeitungs-Aufwand gering halten.
Einige Pakete (insbesonderen für Schriften und aus dem l2tabu) habe ich per PreventPackageFromLoading abgeschaltet und auch alte Schriftschalter deaktiviert.

Ich werde jetzt wohl eher auf das laden von bestimmten Paketen reagieren als sie proaktiv zu laden (Stichwort \AfterPackage), weil diese Problematik halt weitergehend ist als nur ctable und Pseudocode (z.B., Anwender lädt andere Tabellen- oder Listing-Pakete).

Ich richte mich einfach auf die Fragen der Anwender ein :)

Comments for "Nicht-zentriere Tabellenüberschrift vermeiden bei ctable/float mit KOMA-Script (Cross-post tex.SO)" abonnieren