xtable関数で生成されたLaTeXは、角括弧などの特殊文字を解析しません。

xtable関数で生成されたLaTeXは、角括弧などの特殊文字を解析しません。

出力を PDF に knitrするためにパッケージを使用しています。使用中に 2 つの問題が発生します。Rxtable

  1. テーブルデータに次のような文字が含まれている場合[、から]への変換はエラーで失敗します。.tex.pdf

  2. パッケージを使用してseqinr:stresc()このような文字をエスケープすると、少なくともコンテンツを表示することができます (上記の状況 1 よりはましです)。ただし、最終的な PDF が次のように表示されるのでは\lbrack{}ABD\rbrack{} r22なく、次のように表示されるという問題が残ります。[ABD] r22

これを解決するにはどうしたらよいか、誰か教えていただけませんか?

答え1

これは、行名が左括弧で始まる場合に発生する可能性があります。その場合、David がコメントで説明した問題が発生します。表の本体の括弧で問題が発生することは見たことがありません (ただし、場合によっては発生する可能性があります)。そのように表示される場合は、関数sanitize.rownames.functionにカスタム引数を追加してprint.xtable、これらを中括弧で囲むことができます。

\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}

.texこれから生成されたファイル (図示せず) は有効な PDF を生成しますが、 がないとエラーsanitize.rownames.functionが発生します。

[....] 
! 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!
[....]

行名にサニタイズする必要のある他の特殊文字がある場合は、デフォルトのサニタイズ関数を指定しても使用されないため、カスタム関数にその特殊文字も含める必要があることに注意してください。

関連情報