![如何在表格环境的每一行末尾自动添加换行符“\\”?](https://linux22.com/image/402197/%E5%A6%82%E4%BD%95%E5%9C%A8%E8%A1%A8%E6%A0%BC%E7%8E%AF%E5%A2%83%E7%9A%84%E6%AF%8F%E4%B8%80%E8%A1%8C%E6%9C%AB%E5%B0%BE%E8%87%AA%E5%8A%A8%E6%B7%BB%E5%8A%A0%E6%8D%A2%E8%A1%8C%E7%AC%A6%E2%80%9C%5C%5C%E2%80%9D%EF%BC%9F.png)
\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
以及\addlinebreakOff
在tabular
(实际上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
,然后替换$
为\\\\
,可能先选择然后全部替换。
这个想法是,使用正则表达式,$
字符指定行的结尾。