如何在 tex4ht 中制作固定宽度的表格?(不是固定列宽)

如何在 tex4ht 中制作固定宽度的表格?(不是固定列宽)

这只与 tex4ht 有关,与 pdf 无关。这是 tex4ht 中一直存在的问题。

我刚刚在 HTML 中发现,通过固定整个表格的宽度,列宽将按照p规格保持固定。

本论坛之前没有提供任何解决方案固定宽度列在 tex4ht 中运行良好。

所以如果有一种方法可以告诉 tex4ht 让整个表格具有某个给定的固定宽度(使用 px 规格),那么最终将解决这个问题。

首先展示一下问题。这里是 MWE

\documentclass[12pt]{article}
\usepackage{hyperref}
\begin{document}
\begin{tabular}{|p{.5in}|p{2in}|p{2in}|p{2in}|p{2in}|}\hline 
\href{somelink}{1234}& second column stuff & third column stuff & 4th column stuff & 5th column stuff\\\hline 
\href{somelink}{1234}& second column stuff & third column stuff & 4th column stuff & 5th column stuff\\\hline 
\end{tabular}
\end{document}

使用命令进行编译(注意使用p-width

 make4ht -ulm default -a debug  foo.tex "htm,p-width"

问题是,尽管p列有规格,但列宽会随着浏览器窗口宽度由用户调整。

我不想这样。我希望每列的宽度保持不变。如果用户想看到整个表格,他们就必须加宽窗口。

以下是一段小视频,展示了发生的事情

在此处输入图片描述

你可以看到列宽是如何变化的。这是 tex4ht 生成的 HTML,我只显示了需要更改以修复此问题的部分

<!DOCTYPE html> 
<html lang='en-US' xml:lang='en-US'> 
<head><title></title> 
<meta charset='utf-8' /> 
<link href='foo.css' rel='stylesheet' type='text/css' /> 
<meta content='foo.tex' name='src' /> 
</head><body> 
<div class='tabular'> <table class='tabular' id='TBL-1'>
etc...
 
</body> 
</html>

我可以通过手动编辑 HTML 文件来解决这个问题,所以上面那行

<div class='tabular'> <table class='tabular' id='TBL-1'>

变成

<div class='tabular'> <table class='tabular' id='TBL-1' table-layout="fixed" width="800px">

现在的效果如下:

在此处输入图片描述

您可以看到,现在列宽已按照规范固定p。这是将整个表格设为固定宽度的副作用。

问题是,如何告诉 tex4ht 执行此操作并为其指定固定宽度(本例中为“800px”)?显然,每次手动编辑所有 HTML 文件并每次都进行这些更改是不切实际的。

我想针对每个特定表执行此操作,而不是针对所有内容和所有文件执行此操作。

因此,这是在创建表时需要从 Latex 文件内部按表传递给 tex4ht 的内容,而不是从我的全局 .cfg 文件传递​​给 tex4ht 的内容,因为不同的表可能会有所不同,因为我不知道每次TBLtex4ht 会生成什么 id,而且宽度不能在某些 .cfg 文件中硬编码。

例如,使用如下一些假想命令

\ifdefined\HCode 
    \makeThisTableFixedWidth{800px} %command for tex4ht
\fi
\begin{tabular}{|p{.5in}|p{2in}|p{2in}|p{2in}|p{2in}|}\hline 
...
\end{tabular}

\ifdefined\HCode 
    \makeThisTableFixedWidth{600px} %command for tex4ht
\fi
\begin{tabular}{|p{.5in}|p{2in}|p{2in}|p{2in}|p{2in}|}\hline 
...
\end{tabular}
...

这可能吗?如果没有给出这个命令,那么它将默认为现在的状态。基本上只需要一种方法来传递给 tex4ht,即特定表格应该是固定宽度并为其提供实际宽度值。如何做到这一点取决于哪种方法最容易。

TL2022。

答案1

您需要为这个特殊表使用自定义环境:

\documentclass[12pt]{article}
\newenvironment{fixedtabular}[2]{\gdef\tablewidth{#2}\begin{tabular}{#1}}{\end{tabular}}
\usepackage{hyperref}
\begin{document}
\begin{fixedtabular}{|p{.5in}|p{2in}|p{2in}|p{2in}|p{2in}|}{800px}\hline 
\href{somelink}{1234}& second column stuff & third column stuff & 4th column stuff & 5th column stuff\\\hline 
\href{somelink}{1234}& second column stuff & third column stuff & 4th column stuff & 5th column stuff\\\hline 
\end{fixedtabular}
\end{document}

在此示例中,fixedtabular环境仅将其参数传递给常规表格。但它允许您为此表格使用一些 CSS:

\Preamble{xhtml}
\ConfigureEnv{fixedtabular}{}{
\Css{\#TBL-\TableNo{
table-layout: fixed;
width: \tablewidth;
}}
}{}{}
\begin{document}
\EndPreamble

这里我们配置环境以传递当前表格的 CSS 信息。该\TableNo命令包含表格编号,用于id生成的 HTML 中的属性。我们需要在 的第三个参数中使用此命令\ConfigureEnv,因为第二个是在将表格放入文档之前执行的,因此这里的表格编号是错误的。

结果如下:

在此处输入图片描述

相关内容