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 HTML
para 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 LaTeX
caixa à 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 dialogues
e second
. Qualquer material pode ser adicionado com \addtoinfobox
macro. Acho que uma boa ideia é criar algumas macros que escondam essa interface e que chamem \addtoinfobox
apenas quando tex4ht
estiver 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 css
uma 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 tex4ht
você 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.