使用除法来计算列大小

使用除法来计算列大小

我正在从另一种格式转换并创建具有不同列数的表格。我希望列的布局大致相同。如果有两列,我希望每列占用一半的空间。如下所示:

\begin{longtable}{ p{\textwidth/2}  p{\textwidth/2} }

也就是说,对于两列,我想将文本宽度除以二。其他地方的文档建议使用正斜杠字符进行除法。

但是,我得到的结果是两列都是整个文本宽度的大小,并且每个单元格都以“/2”开头。就好像 /2 被解释为“默认文本”,放在每个单元格中,甚至是标题行单元格中。见下文:

在此处输入图片描述

很奇怪。我在网上找到的每个示例都是通过将文本宽度乘以小数来计算列宽。但这对我来说很不方便:当我有三列时,我希望将其除以三,依此类推。我没有现成的该分数的小数。

知道如何做才能使分工正常运作吗?

答案1

您始终可以在 TeX 中(无需额外包)将维度寄存器乘以十进制数:

\documentclass{article}

\begin{document}

\begin{tabular}{ | p{.2\linewidth} | p{.25\linewidth} | }
  a & b
\end{tabular}

\end{document}

如果要使用带斜杠的语法进行除法,请将其包装在\dimexpr

\documentclass{article}

\begin{document}

\begin{tabular}{ | p{\dimexpr\linewidth/5\relax} | p{\dimexpr\linewidth/4\relax} | }
  a & b
\end{tabular}

\end{document}

你也可以在里面\dimexpr做添加等...,但是它的语法0.2*\linewidth和原始的 Knuth TeX 一样不合法。你不能*在这个位置使用。的优点\dimexpr是允许诸如

\dimexpr0.2\linewidth+3\tabcolsep-0.9876\dimexpr15pt\relax+\textwidth/25\relax

请注意,多年来,pdflatex 格式仅建立在具有 e-TeX 扩展(包括)的 pdftex 之上\dimexpr

calc软件包的历史比较早。您仍可以使用它的某些功能,例如 \widthof,您使用的某些软件包可能仍会加载它。它不提供任何\dimexpr不提供的计算功能:例如,它们都不允许您计算平方根(计算平方根会引发维度单位的问题)。

对于使用乘法和加法手动调整某些列尺寸的解决方案xfp肯定是过度的,但是如果您确实需要幂或平方根,这是自然的选择(还有其他软件包可以进行此类计算)。

答案2

默认情况下,您只能在长度设置内使用最少的计算,特别是乘法(如0.5\textwidth0.3\linewidth)。因此,使用\textwidth/2无法立即使用。如果您想使用它,那么您需要e-TeX 的\dimexpr

\dimexpr\textwidth/2\relax

尾随\relax是可选的,取决于用例。

该过程由calc包裹这会更新 LaTeX 命令\set­counter\ad­dto­counter\setlength\ad­dtolength接受算术参数。以下是示例:

在此处输入图片描述

\documentclass{article}

\usepackage{calc}

\begin{document}

\begin{tabular}{ | p{\linewidth/5} | p{\linewidth/4} | }
  a & b
\end{tabular}

\begin{tabular}{ | p{\linewidth/5+10pt} | p{\linewidth/4-10pt} | }
  a & b
\end{tabular}

\end{document}

如果您想对长度执行更复杂的算术运算,我建议使用xfp.xfp\fpeval长度转换为pt并在执行计算时删除该维度。因此,人们通常会使用\fpeval{<length calc>}pt来指定长度。这是另一个示例:

在此处输入图片描述

\documentclass{article}

\usepackage{xfp}

\begin{document}

\begin{tabular}{ | p{\fpeval{\linewidth/5 - 4^2}pt} | p{\fpeval{sqrt(3^3) + \linewidth/4}pt} | }
  a & b
\end{tabular}

\hspace*{\fpeval{\arrayrulewidth+\tabcolsep}pt}%
\rule{\fpeval{\linewidth/5 - 4^2}pt}{1pt}%
\hspace{\fpeval{2\tabcolsep+\arrayrulewidth}pt}%
\rule{\fpeval{sqrt(3^3) + \linewidth/4}pt}{1pt}

\end{document}

相关内容