我正在从另一种格式转换并创建具有不同列数的表格。我希望列的布局大致相同。如果有两列,我希望每列占用一半的空间。如下所示:
\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\textwidth
或0.3\linewidth
)。因此,使用\textwidth/2
无法立即使用。如果您想使用它,那么您需要e-TeX 的\dimexpr
:
\dimexpr\textwidth/2\relax
尾随\relax
是可选的,取决于用例。
该过程由calc
包裹这会更新 LaTeX 命令\setcounter
、\addtocounter
和\setlength
以\addtolength
接受算术参数。以下是示例:
\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}