如何在表格环境的每一行末尾自动添加换行符“\\”?

如何在表格环境的每一行末尾自动添加换行符“\\”?
\begin{center}
    \begin{tabular}{ |c|c|c| } 
        \hline
        \multicolumn{3}{|c|}{\textbf{Cycle Number and Phase}} \\
        \hline
        t & $ \phi $ & I  \\
        \hline
        6911.68158278 & 0.6843291408376899 & -1
        6911.69533917 & 0.6966511591836024 & -1
        6911.70882358 & 0.7087295567434921 & -1
        6911.7216598  & 0.7202273507382415 & -1
        6911.73451918 & 0.7317458898514815 & -1
        6911.74735541 & 0.7432436928038442 & -1
        6911.76036523 & 0.7548969856170515 & -1
        6911.77317833 & 0.7663740703219446 & -1
        9046.86818608 & 0.23613219262733764 & 1912
        9129.52570639 & 0.27499570945110463 & 1986
        \hline
    \end{tabular}
\end{center}    

对于如图所示的代码,我尝试在每一行中设置换行符,以便将其输出为表格。目前在“-1”或“1912”之后没有字符。但我希望在所有这些之后有一个“\\”。我该怎么做?我尝试使用许多文本编辑器都有的查找和替换功能,但没有要替换的字符,我似乎无法做到这一点。

另外,需要澄清的是,这实际上是一个 100 多行的表,其结束值并不总是等于 -1,所以我不能将所有 -1 替换为“-1 \\”。

答案1

纯 TeX 方法:使用\obeylines

\begin{center}
  \bgroup
    \let\par=\cr
    \obeylines%
    \begin{tabular}{ |c|c|c| }%
        \hline%
        \multicolumn{3}{|c|}{\textbf{Cycle Number and Phase}}
        \hline%
        t & $ \phi $ & I
        \hline%
        6911.68158278 & 0.6843291408376899 & -1
        6911.69533917 & 0.6966511591836024 & -1
        6911.70882358 & 0.7087295567434921 & -1
        6911.7216598  & 0.7202273507382415 & -1
        6911.73451918 & 0.7317458898514815 & -1
        6911.74735541 & 0.7432436928038442 & -1
        6911.76036523 & 0.7548969856170515 & -1
        6911.77317833 & 0.7663740703219446 & -1
        9046.86818608 & 0.23613219262733764 & 1912
        9129.52570639 & 0.27499570945110463 & 1986
        \hline%
    \end{tabular}%
  \egroup
\end{center}    

我想当我们深入了解宏包时,一些 LaTeX 纯粹主义者会对此皱眉,但这是一个非常小的干预,不需要任何外部工具或附加包。

简单说一下上面的内容:

  • 在 之后\obeylines,直到当前大括号级别结束,每个未被 屏蔽的行尾都%被翻译为\par。这通常与空白行相同,我们将其重定向到,这反过来与表格环境中的\cr相同。\\
  • 附加%到我们不希望产生上述效果的每一行。
  • 不幸的是\obeylines不能出现在的正文中{tabular},所以我们必须把它放在外面并添加一些%

有关等的更多详细信息,\obeylines请参阅tex/plain/base/plain.tex:517ff

\let\bgroup={ \let\egroup=}

% In \obeylines, we say `\let^^M=\par' instead of `\def^^M{\par}'
% since this allows, for example, `\let\par=\cr \obeylines \halign{...'
{\catcode`\^^M=\active % these lines must end with %
  \gdef\obeylines{\catcode`\^^M\active \let^^M\par}%
  \global\let^^M\par} % this is in case ^^M appears in a \write

(LaTeX 基础latex.ltx包含相同的定义,但省略了注释。)

答案2

这是一个基于 LuaLaTeX 的解决方案,它在编译期间“动态”添加换行符。它设置了一个名为 的 Lua 函数addlinebreak,该函数只是添加\\到每行输入的末尾,以及两个 LaTeX 宏,分别称为\addlinebreakOn\addlinebreakOff。前一个宏将 Lua 函数添​​加到 LuaTeX 的process_input_buffer回调中,后一个宏从该回调中删除 Lua 函数。

注意我把宏放在哪里\addlinebreakOn以及\addlinebreakOfftabular(实际上array)环境中:前者应该放在结尾缺少指令的行组之前的最后一行\\,后者应放在结尾最后一行缺少\\指令。

在此处输入图片描述

% !TEX TS-program = lualatex
\documentclass{article}

\usepackage{luacode} % for 'luacode*' environment
\begin{luacode*}
function addlinebreak ( s )
  return s.."\\\\"
end
\end{luacode*}

%% two LaTeX macros:
\newcommand\addlinebreakOn{\directlua{%
   luatexbase.add_to_callback("process_input_buffer", addlinebreak, "addlinebreak" )}}
\newcommand\addlinebreakOff{\directlua{%
   luatexbase.remove_from_callback("process_input_buffer", "addlinebreak" )}}

\begin{document}
\[
  \begin{array}{ |c|c|c| } 
    \hline
    \multicolumn{3}{|c|}{$Cycle Number and Phase$} \\
    \hline
    t & $ \phi $ & I \\
    \hline \addlinebreakOn
    6911.68158278 & 0.6843291408376899 & -1
    6911.69533917 & 0.6966511591836024 & -1
    6911.70882358 & 0.7087295567434921 & -1
    6911.7216598  & 0.7202273507382415 & -1
    6911.73451918 & 0.7317458898514815 & -1
    6911.74735541 & 0.7432436928038442 & -1
    6911.76036523 & 0.7548969856170515 & -1
    6911.77317833 & 0.7663740703219446 & -1
    9046.86818608 & 0.23613219262733764 & 1912
    9129.52570639 & 0.27499570945110463 & 1986 \addlinebreakOff
    \hline
  \end{array}
\]
\end{document}

答案3

只是为了好玩:

\documentclass{article}
\usepackage{pgfplotstable}

\begin{document}

\begin{center}
    \pgfplotstabletypeset[col sep=&, row sep=newline,
      columns/T/.style={column type=|c,column name=t, string type},
      columns/PHI/.style={column type=|c,column name=$\phi$, string type},
      columns/I/.style={column type=|c|,column name=I, int detect, set thousands separator={}},
      every head row/.style={
        before row={
          \hline
          \multicolumn{3}{|c|}{\textbf{Cycle Number and Phase}}\\
          \hline},
        after row={\hline}},
      every last row/.style={
        after row=\hline}]{
    T & PHI & I
    6911.68158278 & 0.6843291408376899 & -1
    6911.69533917 & 0.6966511591836024 & -1
    6911.70882358 & 0.7087295567434921 & -1
    6911.7216598  & 0.7202273507382415 & -1
    6911.73451918 & 0.7317458898514815 & -1
    6911.74735541 & 0.7432436928038442 & -1
    6911.76036523 & 0.7548969856170515 & -1
    6911.77317833 & 0.7663740703219446 & -1
    9046.86818608 & 0.23613219262733764 & 1912
    9129.52570639 & 0.27499570945110463 & 1986
}
\end{center}    
\end{document}

演示

答案4

emacs如果您使用该编辑器,这就是答案。只需运行M-x query-replace-regexp,然后替换$\\\\,可能先选择然后全部替换。

这个想法是,使用正则表达式,$字符指定行的结尾。

相关内容