使 \marginpar 与 tex4ht 一起工作

使 \marginpar 与 tex4ht 一起工作

我尝试使用\marginpartex4ht 和 pdflatex。

以下是 PDF 输出:

\marginpar PDF

以下是 HTML 输出:

\marginpar HTML

是否可以配置 tex4ht 来生成带有美观边注的 HTML 输出?

答案1

这其实只是一个css问题。 生成的样式表tex4ht非常简单和基本,这是一件好事,因为您可以根据需要轻松修改外观。

默认情况下,所生成的内容tex4ht会调整大小以填充整个页面宽度。从排版和可用性的角度来看,这是错误的,因为长行难以阅读。此特定问题的第二个问题是右列中没有空间可供边距浮动。

因此,我们需要将文本宽度设置为一定大小,以方便阅读,并在页边距中留出一些空间。为了让事情变得更困难,我们必须考虑到这样一个事实:如今,许多人使用智能手机或平板电脑浏览网页,因此我们必须处理这些设备的宽度小于理想页面宽度且没有空间留给页边距的情况。

可以使用名为media queries和的CSS 技术来解决responsive web。我喜欢有关网页排版的文章,为响应式排版提供了基本模板。

我制作了一个小包以便于使用csstex4ht它尚未发布,但它对于包含外部 css 文件很有用。这个包叫做cssframework.sty

\ProvidesPackage{cssframework}
\edef\css@curroutpufile{}

% open css file
\newcommand\cssstartoutput[1]{%
    \xdef\css@curroutpufile{#1}%
  \special{t4ht>\css@curroutpufile}%
}

% close css file
\newcommand\cssstopoutput{%
  \special{t4ht<\css@curroutpufile}%
}

\newcommand\CssLink[1]{%
    \Configure{@HEAD}%
      {\HCode{<link rel="stylesheet" type="text/css" href="#1" />}}%
}
% #1 template name
% #2 css output file
\newcommand\processcss[2]{%
    \CssLink{#2}
    \AtBeginDocument{%
    \cssstartoutput{#2}%
    \NoFonts%
    \input{#1}%
    \EndNoFonts%
    \cssstopoutput%
  }
}

\newcommand\includecss[1]{%
  \CssLink{#1}%
  \special{t4ht+@File: #1}
}

\edef\css@selectrpath{}
\def\hnl{\HCode{\Hnewline}}
%\def\finselectr{}
\newcommand\Selector[2]{%
    \bgroup%
    \edef\css@selectrpath{\css@selectrpath{} #1}
    \hnl\unskip\css@selectrpath\{\hnl
    #2
  \hnl\}\hnl
    \egroup%
}

% support for media queries 
% default medium is all, #2 is rule, #3 is 
\newcommand\MediaQuery[3][all]{%
    @media #1 and (#2)\{\hnl
        #3\hnl%
        \}\hnl%
}

% Various helper functions
% default font size
\newcommand\emwidth{16}
% convert pt to rem
\newcommand\CalcRem[1]{\strip@pt\dimexpr(#1)/\emwidth}
% support for browsers without rem 
\newcommand\RemProperty[2]{%
      #1:\the\dimexpr #2\relax;#1:\CalcRem{#2}rem;
}

我对 Viljamis 提供的代码做了一些修改,并进行了一些调整tex4ht,你可以从 gist 下载它:比例.css

现在您需要在自定义配置文件中组合这些部分:

\usepackage{cssframework}
\Preamble{xhtml}
\includecss{scale.css}
\begin{document}
\Css{.marginpar {width:5em; float:right; text-align:left; margin-left:auto; font-size:85\%; text-decoration:none;color:\#aaa;}
}

\Css{@media screen and (min-width: 46.3em){
.marginpar{margin-right:-6em;}
}}
\EndPreamble

我们加载了cssframework包、包含文件scale.css并为 marginpar 提供了基本样式。请注意,我们使用\%\#来转义特殊字符。有趣的部分是

\Css{@media screen and (min-width: 46.3em){
.marginpar{margin-right:-6em;}
}}

通过查看scale.css,我发现当有足够空间时,文本宽度设置为 34.3em。Marginpar 的宽度为 5em,再加上 1em 作为文本和注释之间的空间。因为文本是居中的,我们需要在两边有足够空间时将 marginpar 显示在边距中,所以我们需要计算text width + 2 * (margin par width + space) = 34.3em + 2 * (5em + 1em) = 46.3em。因此,显示 margin par 的足够空间是 46.3em。

有足够空间时的结果:

在此处输入图片描述

当宽度太小时:

在此处输入图片描述

答案2

我建议这样做make4ht.cfg:)

\Css{
  .marginpar {width: auto; margin-right: -7em; position: relative; top: -1em;}
}

相关内容