如果一行以 \hline 结尾,我该如何在 emacs auctex 中垂直对齐 & 单元格?

如果一行以 \hline 结尾,我该如何在 emacs auctex 中垂直对齐 & 单元格?

我正在使用以下答案来格式化表格emacs auctex 表格单元格的垂直对齐方式. 它就像它的功能名一样,具有神奇的魔力iw/tabular-magic

作为一个小小的区别,我希望每个项目之间都有一条线。当我使用 执行此操作时\hline,我观察到如果一行以 结尾,\\ \hline其格式就会变得混乱。

原来的:

\begin{longtable}{| p{.10\textwidth} | p{.85\textwidth} |}\hline
    \textbf{Symbol}              & \textbf{Meaning}               \\ \hline
    $J$        & Set of jobs            \\ \hline
    $D$                   & Set of data files \\ \hline
\end{longtable}

格式化后:

\begin{longtable}{| p{.10\textwidth} | p{.85\textwidth} |}\hline
    \textbf{Symbol}   & \textbf{Meaning}  \\ \hline $J$ & Set of jobs      \\ \hline $D$           & Set of
    data files 
\end{longtable}

没有\hline格式化的输出:

\begin{longtable}{| p{.10\textwidth} | p{.85\textwidth} |}\hline
    \textbf{Symbol}                                                            & \textbf{Meaning}                                                                      \\
    $J$     & Set of Jobs        \\
    $D$     & Set of data files  \\
\end{longtable}

如果一行以 结尾,我该如何在 emacs auctex 中垂直对齐 & celss \hline

答案1

我怀疑您的初始化文件中没有以下行:

(setq TeX-parse-self t)

通过 init 文件中的行,AUCTeX 会查看 .tex 文件中的包并为其加载支持文件,在本例中,longtable.el该文件包含以下内容:

(add-to-list (make-local-variable 'LaTeX-indent-environment-list)
             '("longtable" LaTeX-indent-tabular) t)

这一行告诉 AUCTeX 如何填充 longtable 中的内容。如果没有这一行,函数调用(LaTeX-fill-environment nil)会破坏格式。

因此,要么使用(setq TeX-parse-self t)(强烈推荐),要么尝试注释掉该行的函数:

(defun iw/tabular-magic ()
  (interactive)
  (unless (string= (LaTeX-current-environment) "document")
    (let ((s (make-marker))
          (e (make-marker)))
      (set-marker s (save-excursion
                      (LaTeX-find-matching-begin)
                      (forward-line)
                      (point)))
      (set-marker e (save-excursion
                      (LaTeX-find-matching-end)
                      (forward-line -1)
                      (end-of-line)
                      (point)))
      ;; Delete the next 2 lines if you don't like indenting and removal
      ;; of whitespaces:
      ;; (LaTeX-fill-environment nil)
      (whitespace-cleanup-region s e)
      (align-regexp s e "\\(\\s-*\\)&" 1 1 t)
      (align-regexp s e "\\(\\s-*\\)\\\\\\\\")
      (set-marker s nil)
      (set-marker e nil))))

相关内容