Existe algum comando LaTeX específico para HTML que possa compilar um documento eletrônico com caixas de texto de rolagem incorporadas?

Existe algum comando LaTeX específico para HTML que possa compilar um documento eletrônico com caixas de texto de rolagem incorporadas?

Eu estava pensando em um layout experimental de e-book que usariarolando caixas de textopara o que funcionaria essencialmente como notas de margem ou de rodapé realmente longas em relação a um texto principal.

Digamos, por exemplo, uma página dividida em duas colunas, com o texto principal à esquerda e duas caixas de texto de altura igual à direita (cada uma com um monte de texto que o leitor pode rolar e ler conforme desejar).

Seria possível criar algum tipo de documento eletrônico usando LaTeX que funcionasse dessa maneira? Talvez algo que possa ser exportado HTML(talvez com alguns comandos específicos de HTML em latex2html?) Que possa então ser traduzido em um e-book funcional? Existe uma maneira de fazer isso sem HTML?

Sei que essa pode ser uma pergunta trivial, mas nunca usei o LaTeX em conjunto com o LaTeX HTML, ou mesmo se, em alguma circunstância, seria apropriado usá-lo HTMLpara escrever um e-book.

De qualquer forma, alguma ideia?

Responder1

Atualizar Versão mais flexível

OP deseja solução com vários números de caixas de rolagem. Minha idéia é fornecer um comando que declare uma nova LaTeXcaixa à qual possa ser adicionado algum material. Portanto, o documento pode ser parecido com:

\documentclass{article}
\usepackage{lipsum}
\usepackage{infoboxes}
\newinfobox{dialogues}
\newinfobox{second}
\begin{document}

    Some text, blah blah\footnote{hello} bla bla\footnote{\lipsum[2]}

    \lipsum[2-8]

    \addtoinfobox{dialogues}{Hello \emph{world}}
    \addtoinfobox{dialogues}{Another line}
    \addtoinfobox{second}{\lipsum[3-9]}
    Another text\footnote{world}. %And now some\marginpar{Margin note. \lipsum[3-4]}

\end{document} 

Duas caixas de rolagem (informações) são usadas dialoguese second. Qualquer material pode ser adicionado com \addtoinfoboxmacro. Acho que uma boa ideia é criar algumas macros que escondam essa interface e que chamem \addtoinfoboxapenas quando tex4htestiver em execução, caso contrário imprimam as informações diretamente no texto ou nas notas de margem.

Pacoteinfoboxes.sty

\ProvidesPackage{infoboxes}

\RequirePackage{etoolbox}
\newcounter{infoboxescnt}
\newcounter{tempinfbx}
\newcommand\newinfobox[1]{%
    \stepcounter{infoboxescnt}
    \expandafter\newbox\csname #1infobx\endcsname
    \listcsgadd{@usedinfboxes}{#1}
}

\newcommand\addtoinfobox[2]{%
    \global\expandafter\setbox\csname #1infobx\endcsname=\vtop\bgroup
    \expandafter\ifvoid\csname #1infobx\endcsname%
    \else\expandafter\unvbox\csname #1infobx\endcsname\fi#2\egroup
}

\newcommand\a@prntfbx[1]{}
\newcommand\b@prntfbx[1]{}
\newcommand\printinfobox[1]{\a@prntfbx{#1}\expandafter\copy\csname #1infobx\endcsname\b@prntfbx{#1}}

\newcommand\printinfoboxes{%
    \setcounter{tempinfbx}{0}
    \renewcommand\do[1]{%
        \typeout{Print info box: ##1}
        \stepcounter{tempinfbx}
        \printinfobox{##1}
    }
  \dolistcsloop{@usedinfboxes}
    %\forcsvlist{\if\relax\detokenize{##1}\relax Prazdny\else##1\fi}{\@usedinfboxes}
}

\endinput

e pacote para tex4ht,infoboxes.4ht

\def\LeavePar{\ifvmode\IgnorePar\fi \EndP}

\NewConfigure{printinfobox}{2}
\renewcommand\a@prntfbx[1]{\def\:bxname{#1}\a:printinfobox}
\renewcommand\b@prntfbx[1]{\b:printinfobox}

\Configure{printinfobox}{\IgnorePar\HCode{
<div class="infobox \:bxname">\Hnewline}\ShowPar}{\EndP\HCode{</div>}}

\let\tmp:prtfbxs\printinfoboxes

\renewcommand\printinfoboxes{}

\NewConfigure{printinfoboxes}{2}

\newcommand\mathexpression[1]{
    \strip@pt\dimexpr #1\relax
}

\newcommand\my:prntnfbxs{%
 \setcounter{tempinfbx}{0} 
 \renewcommand\do[1]{%
   \printinfobox{##1}\relax
   \Css{%
     .##1{margin-left:66\%;
     height:\mathexpression{1pt / \value{infoboxescnt} * 100}\%;
     top:\mathexpression{\value{tempinfbx}pt * 1 / \value{infoboxescnt} * 100}\%;
     }
   }
   \stepcounter{tempinfbx}
 }
 \dolistcsloop{@usedinfboxes} 
}
\Configure{@BODY}
  {\LeavePar
   \HCode{<article>\Hnewline}\par\ShowPar%
  }
\Configure{@/BODY}
  {\LeavePar
  \HCode{</article>\Hnewline}
  \par\ShowPar
\my:prntnfbxs
  }

\Css{article,.infobox{margin:0;padding:0;}}  
\Css{
article,.footnotes{width:66\%;}
}
\Css{
.infobox{
    width:33\%;
    float:right;
    margin-left:66\%;
    position:fixed;
    overflow:scroll;
}
}

Parte interessante é

\renewcommand\do[1]{%
   \printinfobox{##1}\relax
   \Css{%
     .##1{margin-left:66\%;
     height:\mathexpression{1pt / \value{infoboxescnt} * 100}\%;
     top:\mathexpression{\value{tempinfbx}pt * 1 / \value{infoboxescnt} * 100}\%;
     }
   }
   \stepcounter{tempinfbx}
 }

que imprime todas as infoboxes em loop e para cada uma adiciona cssuma declaração com informações de posição e altura calculadas a partir da contagem de infoboxes.

Ajuntar com

htlatex sample "xhtml, fn-in"

você pode ver oresultado

Resposta original

Não acho que seja uma boa ideia. Os e-books costumam ser lidos em aparelhos com tela pequena, onde toda a área é preenchida com o conteúdo principal. As notas de rodapé ou notas laterais geralmente são colocadas em um arquivo independente com um link do texto apontando para elas ou diretamente após o parágrafo em que apareceram, como nesteamostra epub3. Há também o problema de que alguns dispositivos de e-book não possuem interface sensível ao toque e tal caixa ficaria inacessível.

Mas, se você realmente quiser fazer essa caixa, você pode, claro. Com tex4htvocê tem a opção de colocar todas as notas de rodapé na caixa abaixo do texto principal. Com poucas linhas de css, você pode transformar esta caixa em uma caixa de rolagem situada em um local fixo da página.

Arquivo de amostra sample.tex:

\documentclass{article}
\usepackage{lipsum}
\begin{document}

Some text, blah blah\footnote{hello} bla bla\footnote{\lipsum[2]}

\lipsum[2-8]

Another text\footnote{world}
\end{document} 

Arquivo de configuração com instruções CSS scroll.cfg,:

\Preamble{xhtml}
\begin{document}
\Css{
body{
width:35em;
margin-left:auto;
margin-right:auto;
}
}
\Css{
.footnotes{
   float:right;
   width:10em; 
   height:10em; 
   overflow:scroll;
   margin-left:42em;
   position:fixed;
   top:0;
}
}
\EndPreamble

ajuntar com

htlatex sample "scroll, fn-in"

Você pode ver o resultadoaqui

O bom é que clicar no número da nota de rodapé irá rolar para o texto da nota de rodapé correspondente.

informação relacionada