3

LaTeX テーブルである文字列があります。私はn番目(3番目としましょう)の列を見つけようとしていて\emph{}、区切りのドル記号を一致させずに、すべてを内側にラップしています。

2番目の列である最初の列を探してい&...&ます。次に、&...&2 番目のグループ化である次のグループを見つけます。偶然ではなく、表の 3 番目の列を見つけます。

私のダミーの例は機能しますが、 two の間にテキストがあるため、少し異なります&...&。後の段階で取り組む予定の小さな問題があります。後方参照と前方参照を使用し&て呼び出しの外に置く必要があります。\emph{}

xy <-  "This is &more or less& a match and here is &another one&.\nSecond line with &occurrance 1& and &occurrance 2&"
gsub("(&.*?&)|(.*?&)(.*)(&.*?&)", "\\1\\2\\3\\\\emph{\\4}", xy, perl = TRUE)
[1] "This is &more or less& a match and here is \\emph{&another one&}.\nSecond line with &occurrance 1& and \\emph{&occurrance 2&}"

LaTeXテーブルを使用した読み取りセットに一段階上げると(バム!)、少し異なります。two の間に文字はありません。&...&つまり、one が&2 つの列に接しています。それを念頭に置いて、私は削除しました(.*)。何を試しても、これを機能させることはできません。任意のヒント?

library(xtable)
data(tli)
tli.table <- xtable(tli[1:5,])
x <- print.xtable(tli.table, print.results = FALSE, include.rownames = FALSE)

cat(x)
% latex table generated in R 2.15.1 by xtable 1.7-0 package
% Thu Jul 26 14:13:39 2012
\begin{table}[ht]
\begin{center}
\begin{tabular}{rlllr}
  \hline
grade & sex & disadvg & ethnicty & tlimth \\ 
  \hline
  6 & M & YES & HISPANIC &  43 \\ 
    7 & M & NO & BLACK &  88 \\ 
    5 & F & YES & HISPANIC &  34 \\ 
    3 & M & YES & HISPANIC &  65 \\ 
    8 & M & YES & WHITE &  75 \\ 
   \hline
\end{tabular}
\end{center}
\end{table}

gsub("(&.*?&)(&.*?&)", "\\1\\\\emph{\\2}", x, perl = TRUE)
4

2 に答える 2

4

1番目の列がn <- 1(ではない) であると仮定するとn <- 0、n 番目の列の置換に使用する正規表現は次のようになります。

(?m)^(?=[^&\n\r]*&)((?:[^&]*&){n-1})\\s*([^&]*?)\\s*(&|\\\\)
                                ↑
                                └ replace this n-1 with real number

そして置換文字列は でなければなりません\\1\\\\emph{\\2}\\3

したがって、交換コードは次のとおりです。

input <- "% latex table generated in R 2.15.1 by xtable 1.7-0 package\n% Thu Jul 26 17:49:09 2012\n\\begin{table}[ht]\n\\begin{center}\n\\begin{tabular}{rlllr}\n  \\hline\ngrade & sex & disadvg & ethnicty & tlimth \\\\ \n  \\hline\n  6 & M & YES & HISPANIC &  43 \\\\ \n    7 & M & NO & BLACK &  88 \\\\ \n    5 & F & YES & HISPANIC &  34 \\\\ \n    3 & M & YES & HISPANIC &  65 \\\\ \n    8 & M & YES & WHITE &  75 \\\\ \n   \\hline\n\\end{tabular}\n\\end{center}\n\\end{table}\n"

n <- 1
regex <- paste(c('(?m)^(?=[^&\n\r]*&)((?:[^&]*&){', n-1, '})\\s*([^&]*?)\\s*(&|\\\\)'), collapse='')
cat(gsub(regex, "\\1\\\\emph{\\2}\\3", input, perl = TRUE))
于 2012-07-26T12:59:30.447 に答える
2

別のアプローチは、emph{}xtable を呼び出す前に列をラップすることです。

data(tli)
tli[, 4] <- paste0("\\\\emph{", tli[, 4], "}")

次に、スクリプトを次のようにします。

tli.table <- xtable(tli[1:5,])
x <- print.xtable(tli.table, print.results = FALSE, include.rownames = FALSE)
cat(x)

以下を生成します。これにより、望ましい結果が得られるはずです。

% latex table generated in R 2.15.0 by xtable 1.7-0 package
% Thu Jul 26 16:08:58 2012
\begin{table}[ht]
\begin{center}
\begin{tabular}{rlllr}
  \hline
grade & sex & disadvg & ethnicty & tlimth \\ 
  \hline
  6 & M & YES & $\backslash$$\backslash$emph\{HISPANIC\} &  43 \\ 
    7 & M & NO & $\backslash$$\backslash$emph\{BLACK\} &  88 \\ 
    5 & F & YES & $\backslash$$\backslash$emph\{HISPANIC\} &  34 \\ 
    3 & M & YES & $\backslash$$\backslash$emph\{HISPANIC\} &  65 \\ 
    8 & M & YES & $\backslash$$\backslash$emph\{WHITE\} &  75 \\ 
   \hline
\end{tabular}
\end{center}
\end{table}
于 2012-07-26T15:12:19.270 に答える