PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : cdashline - Liniendicke (\arrayrulewidth) und \hline



Thesis
01-12-2013, 15:30
Schönen Sonntag miteinander,


[EDIT: Problem gelöst, siehe meinen letzten Post]
http://www.mrunix.de/forums/showpost.php?p=356409&postcount=7


Zwei Fragen zum Package arydshln und der dazugehörigen Funktion \cdashline{von-bis}[dash/gap]
System: MiKTeX 2.9 mit den neuesten Updates, TeXnicCenter 2.02 Stable (32 bit)

1. Das Paket verträgt sich bei mir nicht mit \hline bzw. Abwandlungen davon (hier \hlineDOUB)



\documentclass{scrreprt}

\usepackage{arydshln}
\usepackage{tabulary}

\newlength\savewidth
\newcommand\hlineDOUB
{
\noalign
{
\global\savewidth\arrayrulewidth
\global\arrayrulewidth 1pt % Standard: 0.5pt
}
\hline
\noalign
{
\global\arrayrulewidth\savewidth
}
}

\begin{document}
\begin{table}[htbp]
\centering
\begin{tabulary}{15cm}{L|C|R}
aaaaaaaaaa &aaaaaaaaaa &aaaaaaaaaa\\ \hlineDOUB
a &a &a\\ \hline
a &a &a\\ \cdashline{2-2}[0.5pt/2.5pt]
\end{tabulary}
\end{table}
\end{document}


Das Resultat ist zwar wie gewünscht, doch ich bekomme 10 Fehlermeldungen:


! Undefined control sequence.
\adl@hline ...mpcnta \xdef \adl@rowsL {\adl@rowsL
(#1/\number \@tempcnta );}...
\end{tabulary}

! Undefined control sequence.
<argument> \adl@connect
\end{tabulary}

! Undefined control sequence.
\adl@hline ...nta );}\xdef \adl@rowsR {\adl@rowsR
(#1/\number \@tempcnta );}
\end{tabulary}

! Undefined control sequence.
<argument> \adl@connect
\end{tabulary}
...

2. Wie kann ich die Liniendicke/Linienbreite von \cdashline ändern?

Um keine Fehler zu erzeugen, kann obiger Code abgeändert werde zu



\documentclass{scrreprt}

\usepackage{arydshln}
\usepackage{tabulary}

\begin{document}
\begin{table}[htbp]
\centering
\begin{tabulary}{15cm}{L|C|R}
aaaaaaaaaa &aaaaaaaaaa &aaaaaaaaaa\\ \cdashline{1-3}[1pt/0pt]
a &a &a\\ \cdashline{1-3}[1pt/0pt]
a &a &a\\ \cdashline{2-2}[0.5pt/2.5pt]
\end{tabulary}
\end{table}
\end{document}


Ich ersetze also \hline durch \cdashline{1-3}[1pt/0pt]. Wie aber kann ich \hlineDOUB durch \cdashline ausdrücken? Könnte man lokal die \arrayrulewidth von \cdashline manipulieren und auf z.B. 2pt hochsetzen?
Das Paket booktabs mit \midrule (bzw. \midrule[2pt] oder \newcommand\midruleDOUB{\midrule[2\lightrulewidth]} ... \mudruleDOUB) kann ich nicht verwenden, da die vertikalen Linien sonst von den horizontalen unterbrochen werden.
Die eigentliche Tabelle ist etwas komplexer und benötigt die vertikalen Linien unbedingt.


Vielen Dank im Voraus,
Beste Grüße und schönen Restsonntag

esdd
01-12-2013, 20:28
Lade das Paket booktabs (http://www.ctan.org/pkg/booktabs) und verwende \midrule statt \hline. \midrule hat ein optionales Argument für die Linienstärke.


\documentclass{scrreprt}

\usepackage{booktabs}
\usepackage{arydshln}
\usepackage{tabulary}

\newcommand\midruleDOUB{\midrule[2\lightrulewidth]}

\begin{document}
\begin{table}[htbp]
\centering
\begin{tabulary}{15cm}{LRC}
aaaaaaaaaa &aaaaaaaaaa &aaaaaaaaaa\\ \midrule[2pt]
a &a &a\\ \midrule
a &a &a\\ \midruleDOUB
a &a &a\\ \cdashline{2-2}[0.5pt/2.5pt]
\end{tabulary}
\end{table}
\end{document}

Gruß
Elke

Thesis
01-12-2013, 21:52
Hallo Elke,


Vielen Dank für Deine Antwort, doch es ist nicht wonach ich suche.
\midrule und die anderen Befehle von booktabs sind für Tabellen ohne vertikale Trennstriche ausgelegt, welche ich jedoch verwenden muss. Mit Trennstrichen entstehen knapp über und unter \midrule weiße Leerflächen, die ich nicht gebrauchen kann.

Kann man vielleicht die Linienstärke direkt in \cdashline manipulieren?
Und wieso gibt LaTeX zig Fehlermeldungen bei Kombination von arydshln und \hline aus?


Nochmals Danke, Grüße

esdd
01-12-2013, 22:20
Die Kombination von arydshln und \hrule ist schon möglich. Bei mir läuft folgendes fehlerfrei:


\documentclass{scrreprt}
\usepackage{arydshln}
%\usepackage{tabulary}
\newlength\savewidth
\newcommand\hlineDOUB
{
\noalign
{
\global\savewidth\arrayrulewidth
\global\arrayrulewidth 1pt % Standard: 0.5pt
}
\hline
\noalign
{
\global\arrayrulewidth\savewidth
}
}

\begin{document}
\begin{table}[htbp]
\centering
\begin{tabular}{lrc}
aaaaaaaaaa &aaaaaaaaaa &aaaaaaaaaa\\ \hlineDOUB
a a &a\\ \hline
a &a &a\\ \cdashline{2-2}[0.5pt/2.5pt]
\end{tabular}
\end{table}
\end{document}

Es klappt auch noch, wenn ich tabulary vor arydshln lade. Erst wenn tabulary dann noch verwendet wird, funktioniert es nicht mehr. Kannst du vielleicht auf tabularx ausweichen? Muss aber ebenfalls vor arydshln geladen werden.

Gruß
Elke

Thesis
01-12-2013, 23:51
Guten Abend Elke,


Vielen Dank, Folgendes funktioniert nun:


\documentclass{scrreprt}
\usepackage{array}
\usepackage{arydshln}
\usepackage{tabularx}

\newlength\savewidth
\newcommand\hlineDOUB
{
\noalign
{
\global\savewidth\arrayrulewidth
\global\arrayrulewidth 1pt % Standard: 0.5pt
}
\hline
\noalign
{
\global\arrayrulewidth\savewidth
}
}

\begin{document}
\begin{table}[htbp]
\centering
\begin{tabularx}{15cm}{X|X|X}
aaaaaaaaaa &aaaaaaaaaa &aaaaaaaaaa\\ \hlineDOUB
a &a &a\\ \hline
a &a &a\\ \cdashline{2-2}[0.5pt/2.5pt]
\end{tabularx}
\end{table}
\end{document}

Es muss also zuerst array und dann arydshln geladen werden. Schließlich kann, je nach Bedarf, tabularx geladen werden.


Dafür funktioniert bei mir tabulary nicht mehr (nicht weiter tragisch, aber seltsam):



\documentclass{scrreprt}
\usepackage{array}
\usepackage{arydshln}
\usepackage{tabulary}

\newlength\savewidth
\newcommand\hlineDOUB
{
\noalign
{
\global\savewidth\arrayrulewidth
\global\arrayrulewidth 1pt % Standard: 0.5pt
}
\hline
\noalign
{
\global\arrayrulewidth\savewidth
}
}

\begin{document}
\begin{table}[htbp]
\centering
\begin{tabulary}{15cm}{L|C|R}
aaaaaaaaaa &aaaaaaaaaa &aaaaaaaaaa\\
a &a &a\\
a &a &a\\
\end{tabulary}
\end{table}
\end{document}



Nochmals besten Dank, Grüße

esdd
02-12-2013, 08:26
Wie ich schon geschrieben habe, lade tabularx vor arydshln. tabularx lädt dann automatisch auch array. Du brauchst array also nicht extra einzubinden, wenn du tabularx verwendest.

Gruß
Elke

Thesis
02-12-2013, 12:43
Hallo Elke,



Vielen Dank für deine Tipps.


Es gibt aber übrigens eine recht einfache Lösung für die lokale Veränderung der Dicke von \cdashline. Im folgenden ist ein Beispiel, das dies verdeutlicht und Unterschiede zwischen \hline und \cdashline aufzeigt.


\documentclass{scrreprt}
%\usepackage{array} % Muss nicht geladen werden, da das Paket tabularx das Paket array lädt
\usepackage{tabularx}
%\usepackage{tabulary} % Zahlreiche Fehlermeldungen wegen arydshln
%\usepackage{booktabs} % Kann geladen werden, sollte aber nicht in der selben Tabelle mit cdashline verwendet werden
\usepackage{arydshln}

% Makro für die Liniendicke von \cdashline
% ... \ArrRlWdthSet{2pt}\cdashline{2-3}[0.5pt/3pt]\ArrRlWdthRestr ...
\newdimen\arrayrulewidthsave
\def\ArrRlWdthSet#1{\noalign{\global\arrayrulewidt hsave\arrayrulewidth
\global\arrayrulewidth#1\relax}}
\def\ArrRlWdthRestr{\noalign{\global\arrayrulewidt h\arrayrulewidthsave}}

% \Befehl \hlineDOUB
\newlength\savewidth
\newcommand\hlineDOUB
{
\noalign
{
\global\savewidth\arrayrulewidth
\global\arrayrulewidth 1pt % Standard: 0.5pt
}
\hline
\noalign
{
\global\arrayrulewidth\savewidth
}
}

\begin{document}

\begin{table}[htbp]
\centering
\begin{tabularx}{13cm}{XX|X:X;{0.5pt/3pt}X}
%
aaaaa &aaaaa &aaaaa &aaaaa &aaaaa \\ \hline
a &a &a &a &a \\ \cdashline{1-5}[1pt/0pt]
%
a &a &a &a &a \\ \hlineDOUB
a &a &a &a &a \\ \ArrRlWdthSet{1pt}\cdashline{1-5}[1pt/0pt]\ArrRlWdthRestr
%
a &a &a &a &a \\ \cdashline{3-4}[1pt/0pt]
a &a &a &a &a \\ \ArrRlWdthSet{1pt}\cdashline{3-4}[1pt/0pt]\ArrRlWdthRestr
%
%
a &a &a &a &a \\ \cdashline{3-4}[0.5pt/3pt]
a &a &a &a &a \\ \ArrRlWdthSet{1pt}\cdashline{3-4}[0.5pt/3pt]\ArrRlWdthRestr
%
\end{tabularx}
\end{table}

\end{document}


Mit \ArrRlWdthSet{1pt}\cdashline{3-4}[1pt/0pt]\ArrRlWdthRestr können in Tabellen horizontale (Voll-)Linien zwischen bestimmten Zellen gezeichnet werden, wobei die Linienstärke/Liniendicke eingestellt werden kann. Analog dazu ergibt \ArrRlWdthSet{1pt}\cdashline{3-4}[0.5pt/3pt]\ArrRlWdthRestr eine horizontale Strichlinie zwischen bestimmten Zellen in der gewünschten Linienstärke/Liniendicke. Falls im ersten Argument ...\cdashline{1-b}... für b die Gesamtanzahl der Tabellenspalten eingesetzt wird, ist das Ergebnis identisch zu \hline.



Grüße