Существуют ли какие-либо специфичные для HTML команды LaTeX, которые могли бы составить электронный документ со встроенными прокручиваемыми текстовыми полями?

Существуют ли какие-либо специфичные для HTML команды LaTeX, которые могли бы составить электронный документ со встроенными прокручиваемыми текстовыми полями?

Я думал об экспериментальном макете электронной книги, который бы использовал встроенныепрокручиваемые текстовые полядля того, что по сути будет функционировать как очень длинные сноски на полях или примечания по отношению к основному тексту.

Например, представьте себе страницу, разделенную на две колонки: основной текст слева и два текстовых поля одинаковой высоты справа (в каждом из которых находится фрагмент текста, который читатель может прокручивать и читать по своему усмотрению).

Можно ли создать электронный документ какого-либо рода с использованием 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"

Вы можете увидеть результатздесь

Хорошо то, что нажатие на номер сноски приведет к прокрутке к соответствующему тексту сноски.

Связанный контент