LaTeXからテーブルを変換する

LaTeXからテーブルを変換する

Calc(またはTracker)からテーブルをコピーします。

私の研究に基づいて、私は3つの方法を知っています。

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

これはあなたが望むものではないかもしれませんが、このような状況に直面したとき、より頻繁にそうであると思われる場合は通常、これに対する関数を作成します。 (これに関する問題の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}

関連情報