Das von der Funktion xtable generierte Latex wird nicht auf Sonderzeichen wie eckige Klammern analysiert

Das von der Funktion xtable generierte Latex wird nicht auf Sonderzeichen wie eckige Klammern analysiert

Ich verwende das knitrPaket, um meine RAusgabe in PDF umzuwandeln. Bei der Verwendung habe ich zwei Probleme xtable:

  1. Wenn meine Tabellendaten Zeichen wie diese enthalten, [schlägt ]die Konvertierung von .texin .pdfmit dem Fehler fehl

  2. Wenn ich das Paket verwende, seqinr:stresc()um solche Zeichen zu maskieren, kann ich den Inhalt zumindest anzeigen lassen (besser als in Situation 1 oben). Aber es bleibt das Problem, dass das endgültige PDF am Ende so angezeigt wird: \lbrack{}ABD\rbrack{} r22statt so: [ABD] r22.

Kann uns jemand erklären, wie wir das Problem lösen können?

Antwort1

Dies kann passieren, wenn Ihre Zeilennamen mit einer linken Klammer beginnen. In diesem Fall tritt das Problem auf, das David in seinem Kommentar beschrieben hat. Ich habe noch kein Problem mit Klammern im Hauptteil der Tabelle gesehen (aber es kann in einigen Fällen vorkommen). Wenn dies bei Ihnen der Fall ist, können Sie sanitize.rownames.functionder print.xtableFunktion ein benutzerdefiniertes Argument hinzufügen, um diese in Klammern einzuschließen.

\documentclass{article}
\begin{document}

<<>>=
library("xtable")
DF <- data.frame(x=c("[]", "bleah", "foo[", "[", "]"),
                 stringsAsFactors = FALSE)
rownames(DF)[1:2] <- c("[1,2]", "[3,4]")
@

<<results="asis">>=
print(xtable(DF),
      sanitize.rownames.function = function(x) paste0("{",x,"}"))
@

\end{document}

Die .texdaraus generierte Datei (nicht angezeigt) ergibt ein gültiges PDF. Ohne das sanitize.rownames.functionwird ein Fehler ausgegeben:

[....] 
! Illegal unit of measure (pt inserted).
<to be read again> 
                   >
l.83   [3,4]
             & bleah \\
? 
! Emergency stop.
<to be read again> 
                   >
l.83   [3,4]
             & bleah \\
!  ==> Fatal error occurred, no output PDF file produced!
[....]

Beachten Sie, dass Sie, falls Ihre Zeilennamen möglicherweise andere Sonderzeichen enthalten, diese ebenfalls bereinigt werden müssen, diese auch in Ihre benutzerdefinierte Funktion aufnehmen müssen, da die Standardbereinigungsfunktion nicht verwendet wird, wenn Sie eine solche angeben.

verwandte Informationen