这只与 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 的内容,因为不同的表可能会有所不同,因为我不知道每次TBL
tex4ht 会生成什么 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
,因为第二个是在将表格放入文档之前执行的,因此这里的表格编号是错误的。
结果如下: