私は埋め込み型電子書籍レイアウトの実験的なアイデアを考えていましたスクロールテキストボックス本質的には、本文に対する非常に長い余白または脚注として機能するもの。
たとえば、ページが 2 つの列に分割され、左側にメイン テキスト、右側に同じ高さの 2 つのテキスト ボックス (それぞれに大量のテキストが含まれており、読者は必要に応じてスクロールして読むことができます) があるとします。
このように機能する何らかの電子文書を LaTeX を使用して作成することは可能でしょうか? おそらく、 にエクスポートできるものHTML
( 内の HTML 固有のコマンドをいくつか使用latex2html
) で、機能的な電子書籍に変換できるものでしょうか? を使用せずにそれを実行する方法はありますかHTML
?
これはありふれた質問かもしれないと承知していますが、私は と組み合わせて LaTeX を使用したことはありませんし、どんな状況でも電子書籍を書くためにLaTeXHTML
を使用することが適切であるかどうかさえわかりません。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}
2 つのスクロール (情報) ボックスが使用され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"
結果はご覧の通りここ
良い点は、脚注番号をクリックすると、対応する脚注テキストまでスクロールすることです。