PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Longtable Tabelle an Textbreite angepasst



Jady1903
15-06-2010, 01:05
Hallo,
ich habe mir bereits Themen im Forum durchgelesen, aber ich komme trotzdem nicht weiter...
Wie schaffe ich es, dass diese Tabelle, genau so breit ist wie der Text?


\begin{longtable}{p{0.25\textwidth}p{0.25\textwidt h}p{0.25\textwidth}p{0.25\textwidth}}
\caption{PCR-Ansatz}\\
\toprule
\textbf{Reagenz} & \textbf{Konzentration} &\textbf{Volumen($\mu$L)} &\textbf{Endkonzentration}\\
\midrule
\endhead
\bottomrule
\endfoot
DNA-Probe\\ pBI-FGE C50A& 0.53 $\mu$g/$\mu$L & 1.89 & 100 ng\\
DNA-Probe\\ pBI-FGE C52A& 0.66 $\mu$g/$\mu$L & 1.51 & 100 ng\\
\emph{Pfu} Puffer&10x&5&1x\\
\emph{Pfu}-\\DNA-Polymerase&1 U/$\mu$L&1&0.02 U/$\mu$L\\
\end{longtable}

\end{document}

Kann mir wer helfen?
MfG

Karlo
15-06-2010, 03:44
Guten abend... oder morgen? *überleg*... ;)
....das Problem liegt darin, dass zu der Spaltenbreite noch ein kleiner Abstand, \tabcolsep, hinzukommt. Dieser Abstand ist zwischen linken und rechten Rand einer Zelle und den Inhalt der Zelle.

Hier zwei Lösungsvorschläge, wobei der Zweite eher ungünstig ist. Die 8 kommt durch "2 Abstände pro Zelle * Anzahl der Spalten" zustande.




\documentclass{scrartcl}
\usepackage{longtable}
\usepackage{booktabs}

\begin{document}

\newlength{\asdf} %definiere neue länge
\setlength{\asdf}{\textwidth} %setze neue länge auf textbreite
\addtolength{\asdf}{-8\tabcolsep} %subtrahiere -8\cdot textbreite von asdf

\begin{longtable}{p{0.25\asdf}p{0.25\asdf}p{0.25\a sdf}p{0.25\asdf}}
\caption{PCR-Ansatz}\\
\toprule
\textbf{Reagenz} & \textbf{Konzentration} &\textbf{Volumen($\mu$L)} &\textbf{Endkonzentration}\\
\midrule
\endhead
\bottomrule
\endfoot
DNA-Probe\\ pBI-FGE C50A& 0.53 $\mu$g/$\mu$L & 1.89 & 100 ng\\
DNA-Probe\\ pBI-FGE C52A& 0.66 $\mu$g/$\mu$L & 1.51 & 100 ng\\
\emph{Pfu} Puffer&10x&5&1x\\
\emph{Pfu}-\\DNA-Polymerase&1 U/$\mu$L&1&0.02 U/$\mu$L\\
\end{longtable}


\setlength{\tabcolsep}{0pt} %setze \tabcolsep = 0
\begin{longtable}{p{0.25\textwidth}p{0.25\textwidt h}p{0.25\textwidth}p{0.25\textwidth}}
\caption{PCR-Ansatz}\\
\toprule
\textbf{Reagenz} & \textbf{Konzentration} &\textbf{Volumen($\mu$L)} &\textbf{Endkonzentration}\\
\midrule
\endhead
\bottomrule
\endfoot
DNA-Probe\\ pBI-FGE C50A& 0.53 $\mu$g/$\mu$L & 1.89 & 100 ng\\
DNA-Probe\\ pBI-FGE C52A& 0.66 $\mu$g/$\mu$L & 1.51 & 100 ng\\
\emph{Pfu} Puffer&10x&5&1x\\
\emph{Pfu}-\\DNA-Polymerase&1 U/$\mu$L&1&0.02 U/$\mu$L\\
\end{longtable}

\end{document}



gute nacht denn
karlo

Legion
15-06-2010, 07:10
Warum mit Kanonen auf Spatzen schießen? Ein PCR-Ansatz ist nicht so lang, als dass man eine longtable verwenden müsste. Wie schon mal erwähnt wäre tabularx eine bessere Alternative.

Vielleicht noch ein paar allgemeine Anmerkungen:
- Die Konzentration deines Plasmids/Templates gehört in die Spaltenbeschriftung und nicht in die Tabelle selbst, dabei ist zu beachten, dass das \mu nicht kursiv, sonder aufrecht zu schreiben ist. Ist ja keine Variable ;) Schau die mal das Paket upgreek an. Dann kommst du mit \upmu besser hin. Oder du nimmst, wie ich, gleich siunitx, dann werden alle Einheiten konsitent gesetzt, auch mit den richtigen Abständen zu den Werten :)

- Das pipettierte Volumen ist überflüssig. Ich vermeide immer Angaben in µl. Besser nur mit Konzentrationen arbeiten.

-Im Prinzip reicht ein exemplarischer PCR-Ansatz, sprich ohne Nennung irgendwelcher Templates, denn der Ansatz variiert ja nicht. Oder verwendet du unterschiedliche Polymerasen? Für genaues Amplifizieren kann ich die Phusion Taq von Finnzymes empfehlen ;);););)

voss
15-06-2010, 11:19
ich habe mir bereits Themen im Forum durchgelesen, aber ich komme trotzdem nicht weiter...
Wie schaffe ich es, dass diese Tabelle, genau so breit ist wie der Text?


\begin{longtable}{p{0.25\textwidth}p{0.25\textwidt h}p{0.25\textwidth}p{0.25\textwidth}}



\usepackage{calc}
\newcolumntype{P}{p{0.25\textwidth-2\tabcolsep}}
...
\begin{longtable}{*4P}
...


Herbert

Jady1903
16-06-2010, 19:21
Mh, so nachdem ich endlich mein Texnic Center Problem gelöst habe,
arbeite ich weiter an der Tabellenbreite...

Danke Carlo, deine erste Lösung ging auf:) Ich bin in diesem Moment dermaßen erleichtert, das glaubst du garnicht:-)

Vielen Dank

MfG

Jady1903
16-06-2010, 19:30
Ich bräuchte nur noch eine genaue Definition wie man 3 gleichmäßige Spalten hinbekommt, weil mit \begin{longtable}{p{0.33\asdf}p{0.33\asdf}p{0.33\a sdf}}...

wird es nicht exakt bündig.

MfG

voss
16-06-2010, 19:53
Ich bräuchte nur noch eine genaue Definition wie man 3 gleichmäßige Spalten hinbekommt, weil mit \begin{longtable}{p{0.33\asdf}p{0.33\asdf}p{0.33\a sdf}}...

wird es nicht exakt bündig.


das siehst du doch oben, wo ich es für 4 Spalten gezeigt habe ...

Herbert

Jady1903
16-06-2010, 20:27
Ah ok ,danke, dann eben mit 6 anpassen:-) Gut, ...ihr wisst garnicht wie erleichtert ich gerade bin:-)

Vielen Dank nochmal

Legion
16-06-2010, 20:43
Ich glaube Herbert meint
\usepackage{calc}
\newcolumntype{P}{p{0.25\textwidth-2\tabcolsep}}
...
\begin{longtable}{*3P}
...


;)

Jady1903
16-06-2010, 20:59
oder so..
ich habe mich an Carlo gehalten:

mit dem Anfang:
\newlength{\asdf} %definiere neue länge
\setlength{\asdf}{\textwidth} %setze neue länge auf textbreite
\addtolength{\asdf}{-8\tabcolsep} %subtrahiere -8\cdot textbreite von asdf


MfG

Legion
16-06-2010, 21:17
hm ... da finde ich Herberts Lösung eleganter, da man da in der Anzahl der SPalten flexibler ist. Außerdem ist der Code kürzer, aber sowas ist immer Geschmackssache ;)

Jady1903
17-06-2010, 20:32
Kann man denn diese Lösung von Herbert für verschiedene Tabellen anwenden?
Also

der Part:
\usepackage{calc}
\newcolumntype{P}{p{0.25\textwidth-2\tabcolsep}}

steht doch in der Präambel oder?und nicht wieder vor jeder neuen Tabelle?


MfG

lockstep
17-06-2010, 20:54
Steht in der Präambel.

lockstep

Jady1903
17-06-2010, 21:06
Leider funktioniert bei mir diese einfache Variante nicht. Es steht oben zu Beginn dann ein P25 und die Tabelle ist viel schmaler als die Seite und es werden 7 Fehler angezeigt.

Schade,
weil mit der Variante, wo es funktioniert, wird pro Tabelle auch ein Fehler angerechnet :-(

\newlength{\asdf} %definiere neue länge
\setlength{\asdf}{\textwidth} %setze neue länge auf textbreite
\addtolength{\asdf}{-8\tabcolsep} %subtrahiere -8\cdot textbreite von asdf

\begin{longtable}{p{0.25\asdf}p{0.25\asdf}p{0.25\a sdf}p{0.25\asdf}}


Wofür steht denn dieses asdf überhaupt?
MfG

lockstep
17-06-2010, 21:24
Mit dem Paket array sollte Herberts Lösung klappen.



\documentclass{scrartcl}

\usepackage[latin9]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}

\usepackage{array}
\usepackage{booktabs}
\usepackage{longtable}
\usepackage{calc}

\newcolumntype{P}{p{0.25\textwidth-2\tabcolsep}}

\begin{document}

\begin{longtable}{*4P}
\caption{PCR-Ansatz}\\
\toprule
\textbf{Reagenz} & \textbf{Konzentration} &\textbf{Volumen($\mu$L)} &\textbf{Endkonzentration}\\
\midrule
\endhead
\bottomrule
\endfoot
DNA-Probe\\ pBI-FGE C50A& 0.53 $\mu$g/$\mu$L & 1.89 & 100 ng\\
DNA-Probe\\ pBI-FGE C52A& 0.66 $\mu$g/$\mu$L & 1.51 & 100 ng\\
\emph{Pfu} Puffer&10x&5&1x\\
\emph{Pfu}-\\DNA-Polymerase&1 U/$\mu$L&1&0.02 U/$\mu$L\\
\end{longtable}

\end{document}


lockstep

Jady1903
17-06-2010, 22:11
Mh ok gut danke, das funktioniert nun. Aber wie mache ich es denn, wenn ich verschiedene Tabellen habe, und zum Beispiel nur 2 Spalten, die aber auch die ganze Textbreite einnehmen sollen?

MfG

voss
17-06-2010, 22:36
Mh ok gut danke, das funktioniert nun. Aber wie mache ich es denn, wenn ich verschiedene Tabellen habe, und zum Beispiel nur 2 Spalten, die aber auch die ganze Textbreite einnehmen sollen?



\newcolumntype{P}[1]{p{#1-2\tabcolsep}}

\begin{document}

\begin{longtable}{*2{P{0.5\textwidth}}}
oder

\begin{longtable}{P{0.5\textwidth} P{0.5\textwidth}}


Herbert

Karlo
17-06-2010, 23:07
weil mit der Variante, wo es funktioniert, wird pro Tabelle auch ein Fehler angerechnet :-(

Ein Fehler oder eine Warnung? Wenn du die Overfull hbox meinst - die letzte Spalte ist zu schmal für "Endkonzentration" - wenn du als Dokumentoption "draft" angibst sieht man es.



Wofür steht denn dieses asdf überhaupt?
MfG
Das ist einfach ein Produkt meiner Einfallslosigkeit, könnte auch kuckucksei heißen ;) - ist also einfach nur eine Bezeichnung für die neu definierte Länge.

lg
karlo

ps: die ander Lösung gefällt mir auch besser - nur wusste ich es bis dahin noch nicht besser ;)

Jady1903
18-06-2010, 21:31
Ok,
also das Beispiel von Herbert funktioniert. Allerdings wird dabei nicht beachtet, dass meine Tabellen (egal wie viele Spalten) immer die volle Textbreite einnehmen sollen, das heißt wenn ich nur 2 Spalten habe, sind die dementsprechend auch schmaler.

Das kann mabn nicht berücksichtigen oder?

@Karlo: Es wird jedesmal ein Fehler angezeigt, bin leider nun schon bei 10:-( Ansonsten klappt dein Beispiel gut, weil ich individuell auch noch die einzelen Breiten bestimmen kann.

MfG

lockstep
18-06-2010, 21:52
Ok,
also das Beispiel von Herbert funktioniert. Allerdings wird dabei nicht beachtet, dass meine Tabellen (egal wie viele Spalten) immer die volle Textbreite einnehmen sollen, das heißt wenn ich nur 2 Spalten habe, sind die dementsprechend auch schmaler.

Das kann mabn nicht berücksichtigen oder?

Oder. Du musst den Parameter in Herberts Spaltendefinition je nach Anzahl der Tabellenspalten wählen - z.B. 0.1667\textwidth bei 6 Spalten.


@Karlo: Es wird jedesmal ein Fehler angezeigt, bin leider nun schon bei 10:-(

Mach ein _vollständiges_ _lauffähiges_ Beispiel.

lockstep

Jady1903
18-06-2010, 22:05
\documentclass[12pt,paper=a4,bibliography=totoc,captions=tableabo ve,headsepline,headinclude=false]{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{SIunits}

\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs}
\usepackage{longtable}
\usepackage{calc}
\usepackage{array}
\usepackage{caption}

\title{Hallo}
\begin{document}
\maketitle

\newpage
\newlength{\asdf}
\setlength{\asdf}{\textwidth}
\addtolength{\asdf}{-4\tabcolsep}

\begin{longtable}{p{0.50\asdf}p{0.5\asdf}}
\toprule
\textbf{Gerät} & \textbf{Hersteller}\\
\midrule
\endhead
\bottomrule
\endfoot
Hallo&Hallo\\
\end{longtable}

\newlength{\asdf}
\setlength{\asdf}{\textwidth}
\addtolength{\asdf}{-8\tabcolsep}


\begin{longtable}{p{0.25\asdf}p{0.25\asdf}p{0.20\a sdf}p{0.30\asdf}}
\toprule
\textbf{Antikörper} & \textbf{Herkunft} &\textbf{Verdünnung}&\textbf{Hersteller}\\
\midrule
\endhead
\bottomrule
\endfoot
Hallo & Hallo&Hallo&Hallo\\
Hallo & Hallo&Hallo&Hallo\\
\end{longtable}


\end{document}


Es steht in diesekm Beispiel 1 Fehler, weil das asdf mehrfach definiert wurde..

Mfg

lockstep
18-06-2010, 22:27
Tu das erste \newlength{\asdf} in die Präambel und lass alle folgenden weg. Und überleg das nächste Mal selbst, was du tun könntest, wenn sich LaTeX über einen mehrfach definierten Befehl beschwert.

lockstep

EDIT: Und verwende Herberts Lösung - sie ist deutlich eleganter.

Jady1903
18-06-2010, 23:00
Oh Danke, nun klappt alles wunderbar :-)
Eine Frage hätte ich noch: Wie kann ich verschiedene Zentrierungen in den Spalten erreichen, die erste soll z. B linksbündig und die weiteren 2 zentriert. Normal gibt man das ja oben mit l, r und c an oder?

MfG

Karlo
18-06-2010, 23:41
google is your friend...


|>{\centering}p..

Jady1903
19-06-2010, 01:25
Mh das hat bei mir leider nicht funktioniert, irgendwie wurde dann die angegeben Breite der Tabelle ignoriert:

\setlength{\asdf}{\textwidth}
\addtolength{\asdf}{-6\tabcolsep}

\begin{longtable}{|>{\centering}p{0.33\asdf}|>{\centering}p{0.33\asdf}|>{\centering}p{0.33\asdf}}

\caption{PCR-Programm}\\
\toprule
\textbf{Anzahl der Zyklen} & \textbf{Temperatur [°C]} &\textbf{Zeit [sec]}\\
\midrule
\endhead
\bottomrule
\endfoot
1& 95& 300\\\hline
&95&30\\
30&50&30\\
&72&30\\ \hline
1&72&300\\
1&4&dauerhaft\\
\end{longtable}

MfG

voss
19-06-2010, 09:19
Mh das hat bei mir leider nicht funktioniert, irgendwie wurde dann die angegeben Breite der Tabelle ignoriert:


du scheinst ein Fable für umständliche Lösungen zu haben ...

\listfiles
\documentclass{article}
\usepackage{ragged2e,array,longtable,booktabs,calc }
\newcolumntype{C}[1]{>{\Centering}p{#1-2\tabcolsep}}

\begin{document}

\noindent\rule{\linewidth}{1pt}

\begin{longtable}{|*3{C{0.33\textwidth}|}}
\caption{PCR-Programm}\\\toprule
\textbf{Anzahl der Zyklen} & \textbf{Temperatur [°C]} &\textbf{Zeit [sec]}\\\midrule
\endhead
\midrule
\endfoot
\bottomrule
\endlastfoot
1& 95& 300\\\hline
&95&30\\
30&50&30\\
&72&30\\ \hline
1&72&300\\
1&4&dauerhaft\\
\end{longtable}

\end{document}

nebenbei: die senkrechten Linien lassen die Tabelle schlecht aussehen ...
Lass sie weg.

Herbert

Jady1903
25-06-2010, 15:37
Vielen Dank für eure nette Hilfe. Ja ich kenne mich leider noch nicht so gut aus mit Latex.
MfG