在类似表格的环境中更改对齐字符(默认值:&)

在类似表格的环境中更改对齐字符(默认值:&)

我想定义一个简单的表格环境,将空格视为列分隔符。因此,类似的东西a b c d应该被视为a & b & c & d。我试过使用\StrSubstitute,但似乎不可能欺骗它用替换空格&。有什么办法可以实现这一点吗?

谢谢。

答案1

该方法的问题a b c d在于,内容之间的多个空格将被解释​​为额外的列分隔符,即错误输入的空格字符可能被视为“额外的制表符对齐”字符

但是,这里有一个方法可以做到这一点:

&角色的 catcode 为4(对齐标签)而spacecatcode 有10空间)。

然后需要提供spacecatcode 4(以及&另一个,比如说10,才能在列中使用“空格”。

我在一个新的表格环境中应用了对 catcodes 的重新定义,该环境基本上复制了传统的tabular。如果需要使用其他表格环境中的其他功能 - 请自行添加,我将其留作家庭作业 ;-)

由于这种重新定义发生在群体内部,因此不会泄露到外部。

我已经展示了这种方法和传统的表格,其中垂直线仅用于提供表格的外观并显示额外的间距。

\documentclass{article}


\newenvironment{mytabular}[2][c]{%
  \catcode`\&=10
  \catcode`\ =4
  \begin{tabular}[#1]{#2}
}{%
\end{tabular}
}

\begin{document}

\begin{mytabular}{|*{5}{c|}}
a b c d a&word 
\end{mytabular}

\vskip\baselineskip
\begin{tabular}{|*{5}{c|}}
a & b &  c & d & a word
\end{tabular}


\end{document}

在此处输入图片描述

答案2

根据内容,pgfplotstable可能适用:

\documentclass{article}
\usepackage{pgfplotstable}
\begin{document}
    \pgfplotstabletypeset[col sep=space]{
A B C D
-2.35 -2.27 -32.94 134.32
}
\end{document}

在此处输入图片描述

答案3

这是一个基于 LuaLaTeX 的解决方案。它允许单个和多种的使用空格字符(空格、制表符和换行符)来表示列分隔符。它适用于所有tabulartabular*tabularxtabulary环境。

两条评论:

  • 如果单元格包含两个或多个以空格分隔的单词,则在处理之前需要用特殊字符替换这些空格。在下面的示例中,我建议使用#表示“真实”空格的字符。

  • 要生成空单元格,请使用{}&&(后者没有相邻空格)。请参阅下面的应用示例。

解决方案的工作原理如下:sp2amp设置一个名为(“space to ampersand”的缩写)的 Lua 函数。它首先检查正在处理的输入行是否在tabulartabular*tabularxtabulary环境中;如果是,它将布尔变量设置ok_2_process为“true”。(如果您需要扩展函数的范围以包括longtable环境,请告诉我——概括条件并不困难if。)当且仅当ok_2_process等于“true”时,输入行中一个或多个空格字符的所有实例都将替换为&,并且 的所有实例#都将替换为(单个空格字符)。通过将 Lua 函数分配给process_input_buffer回调,它的工作在处理的早期阶段完成,TeX 的“眼睛”——更不用说它的“嘴巴”和“胃”——开始完成它们的工作。

在此处输入图片描述

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

\usepackage{luacode,luatexbase}
\begin{luacode}
ok_to_process = false
function sp2amp ( line )
  if string.find ( line , "\\begin{tabular[%*xy]?}" ) then
     ok_to_process = true
  elseif string.find ( line , "\\end{tabular[%*xy]?}" ) then
     ok_to_process = false
  elseif ok_to_process then
      line = string.gsub ( line , "%s+", "&" )
      line = string.gsub ( line , "#", " " )
  end
  return line
end
luatexbase.add_to_callback( "process_input_buffer", sp2amp, "sp2amp")
\end{luacode}

\begin{document}
\begin{tabular}{|*{5}{l|}}
a  b c  
   d    A#complete#sentence.\\
e&&g {} i
\end{tabular}
\end{document} 

相关内容