Anzeige:
Ergebnis 1 bis 10 von 10

Thema: datatool in tabular ergibt Misplaced \noalign

  1. #1
    Registrierter Benutzer
    Registriert seit
    23.02.2012
    Beiträge
    82

    datatool in tabular ergibt Misplaced \noalign

    Hallo Zusammen,

    ich lade eine Tabelle über datatool und möchte den Inhalt darstellen. Das klappt aber nicht ohne eine nicht gewollte Leerzeile im Quellcode (siehe auskommentierte Zeile über \bottomrule):
    Code:
    \documentclass{scrreprt} 
    % Kodierungspakete
    \usepackage[T1]{fontenc}
    \usepackage{selinput}
    \SelectInputMappings{
    	adieresis={ä},
    	germandbls={ß},
    	Euro={€},
    }
    \usepackage{booktabs, datatool}
    
    \begin{document} 
    
    \DTLnewdb{dbTest}
    \DTLnewrow{dbTest}
    \DTLnewdbentry{dbTest}{Daten}{32.1}
    \DTLnewrow{dbTest}
    \DTLnewdbentry{dbTest}{Daten}{98.7}
    
    \begin{table}[ht]
    	\centering
    	\begin{tabular}[t]{lc}
    		\toprule
    		Über & schrift\\
    		\midrule
    		\DTLforeach{dbTest}{%
    			\Daten=Daten}{%
    			\theDTLrowi & \Daten\\%
    		}%
    		%\\
    		\bottomrule
    	\end{tabular}
    	\caption{Test}
    	\label{tabTest}
    \end{table}
    
    \end{document}
    Die Leerzeile ist natürlich ungewollt. Wie bekomme ich das hin?

    Vielen Dank und Grüße
    Dirk

  2. #2
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    496
    Hallo,

    hier ist ein Vorschlag, wie sich das Problem vermeiden lässt:
    Code:
    \documentclass{scrreprt} 
    % Kodierungspakete
    \usepackage[T1]{fontenc}
    \usepackage{selinput}
    \SelectInputMappings{
    	adieresis={ä},
    	germandbls={ß},
    	Euro={€},
    }
    \usepackage{booktabs, datatool}
    
    \begin{document} 
    
    \DTLnewdb{dbTest}
    \DTLnewrow{dbTest}
    \DTLnewdbentry{dbTest}{Daten}{32.1}
    \DTLnewrow{dbTest}
    \DTLnewdbentry{dbTest}{Daten}{98.7}
    
    \begin{table}[ht]
      \centering
      \begin{tabular}[t]{lc}
        \toprule
        Über & schrift\\
        \midrule
        \DTLforeach{dbTest}{%
          \Daten=Daten}{%
          \DTLiffirstrow{}{\\}\theDTLrowi & \Daten%
        }%
        \\
        \bottomrule
      \end{tabular}
      \caption{Test}
      \label{tabTest}
    \end{table}
    
    \end{document}
    Gruß
    Elke

  3. #3
    Registrierter Benutzer
    Registriert seit
    23.02.2012
    Beiträge
    82
    Danke! So sollte es laufen.

    Da war ich doch glatt eine Seite über der Beschreibung von iffirst und finde das nicht. Asche über mein Haupt.

    Das ist aber so auch gewollt und kein Bug?
    Für \DTLdisplaydb wird \bottomrule auch mit führendem \\ in \dtldisplayendtab definiert. Hier gibt es keine zusätzliche Leerzeile.

    Viele Grüße
    Dirk

  4. #4
    Registrierter Benutzer
    Registriert seit
    23.02.2012
    Beiträge
    82
    Hallo Zusammen,

    ich habe das gerade bei mir eingebaut und ein weiteres Problem tat auf. Bei manchen Spalten nutze ich den S-Spaltentyp aus dem siunitx Paket. Hier klappt allerdings das \DTLiffirstrow nicht, es gibt einen Fehler. Damit bin ich wieder beim eigentlichen Problem, dass ich unten oder oben eine leer Zeile einbauen muss, was ich natürlich auch nicht möchte.

    Hier das Minimalbeispiel:
    Code:
    \documentclass{scrreprt} 
    % Kodierungspakete
    \usepackage[T1]{fontenc}
    \usepackage{selinput}
    \SelectInputMappings{
    	adieresis={ä},
    	germandbls={ß},
    	Euro={€},
    }
    \usepackage{booktabs, datatool, siunitx}
    
    \begin{document} 
    
    \DTLnewdb{dbTest}
    \DTLnewrow{dbTest}
    \DTLnewdbentry{dbTest}{Daten}{32.1}
    \DTLnewrow{dbTest}
    \DTLnewdbentry{dbTest}{Daten}{5.9}
    \DTLnewrow{dbTest}
    \DTLnewdbentry{dbTest}{Daten}{9.81}
    
    \begin{table}[ht]
    	\centering
    	\begin{tabular}[t]{lS}
    		\toprule
    		Über & schrift\\
    		\midrule
    		\DTLforeach*{dbTest}{%
    			\Daten=Daten}{%
    			\DTLiffirstrow{}{\\}%
    			\theDTLrowi & \Daten%\\%
    		}%
    		\\%
    		\bottomrule
    	\end{tabular}
    	\caption{Test}
    	\label{tabTest}
    \end{table}
    
    \end{document}
    Viele Grüße
    Dirk

  5. #5
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    496
    Hallo,

    vermutlich muss am Ende der S Spalten immer ein & oder ein \\ stehen. Du könntest eine zusätzliche leere Spalte am Ende einfügen oder am Ende der Tabelle einen negativen Abstand einfügen und damit die \bottomrule wieder nach oben schieben:
    Code:
    \documentclass{scrreprt} 
    % Kodierungspakete
    \usepackage[T1]{fontenc}
    \usepackage{selinput}
    \SelectInputMappings{
    	adieresis={ä},
    	germandbls={ß},
    	Euro={€},
    }
    \usepackage{booktabs, datatool, siunitx}
    
    \begin{document} 
    
    \DTLnewdb{dbTest}
    \DTLnewrow{dbTest}
    \DTLnewdbentry{dbTest}{Daten}{32.1}
    \DTLnewrow{dbTest}
    \DTLnewdbentry{dbTest}{Daten}{5.9}
    \DTLnewrow{dbTest}
    \DTLnewdbentry{dbTest}{Daten}{9.81}
    
    \begin{tabular}[t]{lS@{}l}
      \toprule
      Über & {schrift}\\
      \midrule
      \DTLforeach*{dbTest}{%
        \Daten=Daten}{%
        \DTLiffirstrow{}{\\}%
        \theDTLrowi & \Daten&%
      }%
      \\
      \bottomrule
    \end{tabular}
    \hspace{3em}
    \begin{tabular}[t]{lS}
      \toprule
      Über & {schrift}\\
      \midrule
      \DTLforeach*{dbTest}{%
        \Daten=Daten}{%
        \theDTLrowi & \Daten\\%
      }%
      \\[\dimexpr-\ht\strutbox-\dp\strutbox\relax]%
      \bottomrule
    \end{tabular}
    
    \end{document}
    Gruß
    Elke
    Geändert von esdd (13-11-2012 um 12:26 Uhr)

  6. #6
    Registrierter Benutzer
    Registriert seit
    23.02.2012
    Beiträge
    82
    Hallo Elke,

    ok, so kann man es lösen. Danke!

    Allerdings finde ich, dass der grad der Workarounds fast schon auf einen Bug schließen lässt. Oder interpretiere ich das falsch? Falls nicht, würde ich das dem Entwickler mit einem Link auf das Forum hier zurückmelden.

    Was meinst du?

    Viele Grüße
    Dirk

  7. #7
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    496
    Hallo,

    ich hab jetzt doch mal in die Doku von siunitx geschaut. Da gibt es für solche Fälle das Makro \tablenum als Alternative zum Spaltentyp S:
    Code:
    \begin{tabular}[t]{lc}
      \toprule
      Über & schrift\\
      \midrule
      \DTLforeach*{dbTest}{%
        \Daten=Daten}{%
        \DTLiffirstrow{}{\\}%
        \theDTLrowi & \tablenum{\Daten}%
      }%
      \\
      \bottomrule
    \end{tabular}
    Gruß
    Elke

  8. #8
    Registrierter Benutzer
    Registriert seit
    23.02.2012
    Beiträge
    82
    Prima!

    Du kannst offensichtlich besser Dokus lesen als ich. Das Kapitel über datatool in siunitx habe ich gefunden, nur das \tablenum-Macro nicht.

    Vielen Dank!

    Grüße
    Dirk

  9. #9
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    496
    Den Abschnitt über datatool hab ich dafür gar nicht gesehen. Damit gibt es noch eine weitere Möglichkeit:
    Code:
    \begin{table}
      \sisetup{parse-numbers = false}
      \begin{tabular}[t]{lS}
        \toprule
        Über & {schrift}\\
        \midrule
        \DTLforeach*{dbTest}{%
          \Daten=Daten}{%
          \DTLiffirstrow{}{\\}%
          \theDTLrowi & \Daten%
        }%
        \\
        \bottomrule
      \end{tabular}
    \end{table}
    Gruß
    Elke

  10. #10
    Registrierter Benutzer
    Registriert seit
    23.02.2012
    Beiträge
    82
    Wobei ich das ausprobiert habe und mir überhaupt nicht gefällt. Das siunitx Paket macht aus unterschiedlichen Zahlen (9.81 bzw. 9,81) je nach Sprache das richtige. Dazu erkennt es in wissenschaftlichen Zahlen (2,4e-5) die Zehnerpotenz und stellt die Zahl schön dar (2,4*10^-5). Dazu kommt noch die Ausrichtung am Komma. Das stellt man mit der Option "parse-numbers=false" alles aus. Neee. ;-)

    Viele Grüße
    Dirk

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •