我正在考慮使用嵌入式的實驗性電子書佈局捲動文字框本質上是作為與正文相關的長邊距或腳註。
例如,一個頁面分為兩列,左側是主要文本,右側是兩個高度相等的文本框(每個文本框都有一堆文本,讀者可以根據需要滾動和閱讀)。
是否可以使用 LaTeX 創建某種以這種方式運行的電子文檔?也許可以匯出一些東西HTML
(也許使用一些特定於 HTML 的命令latex2html
?)然後可以翻譯成功能性電子書?有沒有辦法不用HTML
?
我意識到這可能是一個平庸的問題,但我從未將 LaTeX 與 結合使用HTML
,或者即使它在任何情況下都適合用來HTML
編寫電子書。
無論如何,有什麼想法嗎?
答案1
更新 更靈活的版本
OP想要具有不同數量的滾動框的解決方案。我的想法是提供聲明新LaTeX
框的命令,然後可以向其中添加一些材料。所以文件可以是這樣的:
\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}
使用兩個滾動(資訊)框dialogues
和second
。任何材料都可以用巨集添加\addtoinfobox
。我認為好主意是創建一些巨集來隱藏此介面,並且\addtoinfobox
僅在tex4ht
運行時調用,否則將資訊直接列印到文字或頁邊註釋。
包裹infoboxes.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
和包裝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;
}
}
有趣的部分是
\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}
}
它循環列印所有資訊框,並為每個資訊框添加css
聲明,其中包含根據資訊框計數計算出的位置和高度資訊。
編譯用
htlatex sample "xhtml, fn-in"
你可以看到結果
原答案
我認為這不是一個好主意。電子書通常在小螢幕裝置上閱讀,主要內容佔據整個區域。腳註或旁注通常放置在獨立文件中,並帶有指向它們的文本鏈接,或直接放置在它們出現的段落之後,如下所示epub3樣本。還有一個問題是,有些電子書設備沒有觸控介面,這樣的盒子將無法存取。
但是,如果你真的想製作這樣的盒子,當然可以。使用tex4ht
,您可以選擇將所有腳註放入正文下方的框中。只需幾行css
,您就可以將此框轉換為位於頁面固定位置的捲動框。
樣本文件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}
帶有 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
編譯用
htlatex sample "scroll, fn-in"
你可以看到結果這裡
好處是單擊腳註編號將滾動到相應的腳註文字。