LaTeX에서 테이블 변환

LaTeX에서 테이블 변환

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
  • 라인을 선택하세요.
    • :LEXTABLEEnter 시작과 끝을 포함하는 테이블 행을 만듭니다.
    • :LEXTABLE 0Enter 테이블 행만 생성됩니다.
    • :LEXTABLE c l l cEnter 테이블 행을 생성하고 "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}

관련 정보