Calc(또는 Tracker)에서 테이블을 복사합니다.
내 연구를 바탕으로 나는 세 가지 방법을 알고 있습니다.
1:매크로 기록: ( @a0f cw & <ESC>;.;.I\hline <ESC>A \\
공간 개수;))
그런 다음VG:normal @a<ENTER>
2: VG:s/ / \& /gv:<UP><ENTER>gv:<UP><ENTER>
그런 다음 및에 대한 다른 \hline
매크로 가 있습니다.\\
삼: f <C-v>kkk23jc & <ESC>;.;.
그럼 다시I\hlineA \\<ESC>
다른 방법이 있나요?
입력 예:
0.79 0.80 5.40 6.48
0.86 0.87 4.57 5.81
0.93 0.94 4.04 5.32
산출:
\hline 0.79 & 0.80 & 5.40 & 6.48 \\
\hline 0.86 & 0.87 & 4.57 & 5.81 \\
\hline 0.93 & 0.94 & 4.04 & 5.32 \\
답변1
이것은 당신이 원하는 것이 아닐 수도 있지만, 이런 상황에 직면했을 때, 더 자주 할 것 같으면 보통 이에 대한 함수를 작성합니다. (이것에 대한 한 가지 문제는 내가 약간 배 밖으로 나가는 경향이 있다는 것입니다.)
이 프로세스는 매크로를 사용하여 수행할 수도 있지만 기능을 사용할 때 제가 좋아하는 점은 사용자 정의할 수 있는 유연성입니다.
매크로로서 c
기록 방법은 다음과 같습니다.
qc:s/\s\+/ \& /g<Enter>:s/^/\\hline /<Enter>:s/$/\\\\/<Enter>q
s/\s\+/ \& /g Substitute 1+ spaces with " & ", globally.
s/^/\\hline / Substitute start of line with \hline.
s/$/\\\\/ Substitute end of line with \\.
선택 범위:
<Ctrl>+v23j
:norm @c
다음은 함수를 사용한 예입니다. .vimrc
일부 자동 로드 디렉터리에 추가되었거나 더 좋은 파일이 아직 추가되었습니다.
그것이 하는 일은 LaTeXTable()
선택된 행에서 실행되는 것입니다. 또한 매개변수 1이 0이 아니면 테이블의 머리글과 바닥글을 추가합니다. 그러므로:
- Ctrl+v
- 라인을 선택하세요.
:LEXTABLE
Enter 시작과 끝을 포함하는 테이블 행을 만듭니다.:LEXTABLE 0
Enter 테이블 행만 생성됩니다.:LEXTABLE c l l c
Enter 테이블 행을 생성하고 "cll c"를 열 지정자로 사용합니다.
샘플 코드:
function! LaTeXTable(...) range
" Replace consecutive spaces with " & "
'<,'>s/\s\+/ \& /g
" Replace start with \hline
'<,'>s/^\s*/\\hline /
" Replace end with \\
'<,'>s/\s*$/ \\\\/
" If argument is 0 then do not add table def
if a:1 == "0"
return
" Else if argument is not empty use it as column specifier
elseif a:1 != ""
let cc = a:1
" Else split first line on & and make all center c
else
let ands = split(getline(a:firstline), '&')
call map(ands, '"c"')
let cc = join(ands, " ")
endif
" Add start of table
call append(a:firstline - 1,"\\begin{tabular}{ " . cc . " }")
" Add end of table
call append(a:lastline + 1,"\\end{tabular}")
endfun
" -nargs=? allow 0 or 1 argument
" -range use range
" LEXTABLE name
" silent do not echo what is done
" <line.> range
" <q-args> Quote argument
command! -nargs=? -range LEXTABLE silent <line1>,<line2>call LaTeXTable(<q-args>)
일반적으로 테이블의 시작/끝을 추가하지 않으려면 함수를 다음과 같이 쉽게 변경할 수 있습니다.
arg가 비어 있거나 0이면 생성되지 않고,
arg=1 auto이면 자동 생성되고,
그렇지 않으면 문자열로 사용됩니다..
어쩌면 더 좋을 수도 있습니다:
if a:1 == "" || a:1 == "0"
return
elseif a:1 != "1"
let cc=a:1
else
let ands = split(getline(a:firstline), '&')
call map(ands, '"c"')
let cc = join(ands, " ")
endif
그래서:
:'<,'>LEXTABLE<Enter> # Only parse lines, no header.
:'<,'>LEXTABLE 0<Enter> # Only parse lines, no header.
:'<,'>LEXTABLE 1<Enter> # Auto generate column specifiers.
:'<,'>LEXTABLE c l<Enter> # Use 'c l' as column specifiers.
:'<,'>LEXTABLE c | l l<Enter> # Use 'c | l l' as column specifiers.
이를 통해 테이블을 사용하여 구성 파일을 추가로 확장할 수 있습니다. 예를 들어 매개변수가 "P1"이면 "cccc c"를 사용하고, "P2"가 "clcl c"를 사용하면 등입니다.
이 모든 내용과 더 많은 내용을 살펴보고 싶을 수도 있습니다.Vim-LaTeX등.
위의 공식으로부터 우리는 다음을 얻을 수 있습니다:
선택한 경로:
0.79 0.80 5.40 6.48
0.86 0.87 4.57 5.81
0.93 0.94 4.04 5.32
주문하다:
:'<,'>LEXTABLE c | l l l
결과:
\begin{tabular}{ c | l l l }
\hline 0.79 & 0.80 & 5.40 & 6.48 \\
\hline 0.86 & 0.87 & 4.57 & 5.81 \\
\hline 0.93 & 0.94 & 4.04 & 5.32 \\
\end{tabular}