Estaba pensando en un diseño de libro electrónico experimental que utilizaríacuadros de texto desplazablespara lo que esencialmente funcionaría como márgenes o notas a pie de página realmente largas en relación con un texto principal.
Digamos, por ejemplo, una página dividida en dos columnas, con el texto principal a la izquierda y dos cuadros de texto de altura uniforme a la derecha (cada uno con un montón de texto que el lector puede desplazar y leer como desee).
¿Sería posible crear un documento electrónico de algún tipo usando LaTeX que funcionara de esta manera? ¿Quizás algo que pueda exportarse HTML
(¿quizás con algunos comandos específicos de HTML en latex2html
?) que luego pueda traducirse a un libro electrónico funcional. ¿Hay alguna manera de hacerlo sin HTML
?
Me doy cuenta de que esta podría ser una pregunta pedestre, pero nunca he usado LaTeX junto con HTML
, o incluso si alguna vez, bajo alguna circunstancia, sería apropiado usarlo HTML
para escribir un libro electrónico.
En cualquier caso, ¿alguna idea?
Respuesta1
Actualizar Versión más flexible
OP quiere una solución con varios cuadros de desplazamiento. Mi idea es proporcionar un comando que declare un nuevo LaTeX
cuadro al que luego se le puede agregar algún material. Entonces el documento puede verse así:
\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}
Se utilizan dos cuadros de desplazamiento (información) dialogues
y second
. Cualquier material se puede agregar con \addtoinfobox
macro. Creo que una buena idea es crear algunas macros que oculten esta interfaz y que llamen \addtoinfobox
solo cuando tex4ht
se esté ejecutando; de lo contrario, imprimirán la información directamente en texto o en notas al margen.
Paqueteinfoboxes.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
y paquete 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;
}
}
La parte interesante es
\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 todos los cuadros de información en bucle y para cada uno agrega css
una declaración con información de posición y altura calculada a partir del recuento de cuadros de información.
Compilar con
htlatex sample "xhtml, fn-in"
puedes ver elresultado
Respuesta original
No creo que sea una buena idea. Los libros electrónicos suelen leerse en dispositivos con pantalla pequeña, donde toda el área está llena del contenido principal. Las notas al pie o al margen generalmente se colocan en un archivo independiente con un enlace del texto que apunta a ellas, o directamente después del párrafo en el que aparecieron, como en estemuestra epub3. También existe el problema de que algunos dispositivos de libros electrónicos no tienen una interfaz táctil y dicha caja sería inaccesible.
Pero si realmente quieres hacer una caja así, puedes hacerlo, por supuesto. Con tex4ht
, tiene la opción de colocar todas las notas a pie de página en el cuadro ubicado debajo del texto principal. Con unas pocas líneas css
, puede transformar este cuadro en un cuadro de desplazamiento ubicado en un lugar fijo de la página.
Archivo de muestra 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}
Archivo de configuración con instrucciones 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
compilar con
htlatex sample "scroll, fn-in"
Puedes ver el resultadoaquí
Lo bueno es que al hacer clic en el número de la nota al pie se desplazará al texto de la nota al pie correspondiente.