includegraphics 不会在电子书转换时剪辑图片

includegraphics 不会在电子书转换时剪辑图片

这是我使用 LaTeX 创建电子书的延续,之前的部分在这里:tex4ht 标题问题:未定义控制序列

当我将文档转换为电子书时,命令

\includegraphics[trim=0 0 {.5\wd0} 0,width=\dimexpr\paperwidth\relax,clip]{#1} 

不会剪辑我的图片,而普通(pdf)转换会剪辑。

有什么建议吗?

第二个问题,为什么电子书转换后会重复我的文档两次?

文件代码:

\documentclass[12pt, twodise]{book}
\usepackage[polish, russian, english]{babel}
\usepackage[babel,autostyle=true]{csquotes}
\MakeOuterQuote{"}
\selectlanguage{english}
\usepackage[utf8]{inputenc}
\usepackage[T2A]{fontenc}
\usepackage{indentfirst}
\usepackage{needspace}
\usepackage{comment}
\usepackage[inner=0.75in, outer=0.75in, top=0.75in, bottom=0.75in, paperwidth=6in, paperheight=9in]{geometry}% inner=0.875in
%\usepackage{changepage}
\usepackage{caption}
\usepackage{graphicx}
\usepackage{anyfontsize}
\usepackage{xargs}
\usepackage{epigraph}
\usepackage{afterpage}
\usepackage[figuresright]{rotating}
\usepackage{lettrine}
\usepackage{yfonts}
\usepackage{dpfloat}
\usepackage{nopageno}
\usepackage{fancyhdr}
\usepackage{lipsum}
\usepackage[font=Large,labelfont=Large]{caption}
\graphicspath{{"graphics/"}}
\DeclareGraphicsExtensions{.pdf,.png,.jpg}
\setlength{\parskip}{1em}

\newcommandx{\spic}[3][1=0,2]{
    \clearpage
    \noindent\begin{minipage}[t][\dimexpr\textheight-6pt\relax][c]{\textwidth}
    \centering\includegraphics[angle=#1, width=\textwidth]{#3}
    %\caption*{#2}
    \end{minipage}
    \clearpage
}
\newcommandx{\pic}[3][1=0,2]{
    \begingroup
    \clearpage
    \newpage
    \vspace*{3in}  
    \centering{\Large #2}
    \newpage
    \begin{minipage}[t][\dimexpr\textheight-6pt\relax][c]{\textwidth}
    \center{\includegraphics[angle=#1, width=\textwidth]{#3}}
    %\caption*{#2}
    \end{minipage}
    \clearpage
    \endgroup
}
\newcommandx{\lpic}[3][1=0, 2=]{
    \newpage
%   \clearpage
%   \thispagestyle{empty}
    \begin{sidewaysfigure}[ht]
    \center{\includegraphics[angle=#1, width=0.8\textheight]{#3}}
    \caption*{#2}
    \end{sidewaysfigure}
}
\newcommand\blankpage{
    \null
    %\thispagestyle{empty}
    %\addtocounter{page}{-1}
    \newpage
}
\newcommand{\tmpx}{}
\newcommand\tmp[1]{\renewcommand{\tmpx}{#1}}
\fancypagestyle{capt}{\fancyfoot[R]{\tmpx}}
\newcommandx{\twosidepic}[2][2]{
    \clearpage
    \begingroup
    \sbox0{\includegraphics{#1}}
    \begin{figure}[p]% will be the left-side figure
    \begin{leftfullpage}
    \noindent\begin{minipage}[t][\textheight][c]{\paperwidth}
    \hspace*{-2\leftmargin}
    \includegraphics[trim=0 0 {.5\wd0} 0,width=\dimexpr\paperwidth\relax,clip]{#1}
    \captionsetup{font = Large, labelfont=Large, singlelinecheck = false, format= hang, justification=raggedleft, labelsep=space}


%   \caption*{}


    \end{minipage}
    \end{leftfullpage}
    \end{figure}
    \begin{figure}[p]
    \begin{fullpage}
    \noindent\begin{minipage}[t][\textheight][c]{\paperwidth}
    \hspace*{-2\leftmargin}
    \includegraphics[trim={.5\wd0} 0 0 0,width=\dimexpr\paperwidth\relax,clip]{#1}
    \captionsetup{font = Large, labelfont=Large, singlelinecheck = false, format= hang, labelsep=space, justification=centering} %justification=justified

%   \caption*{#2}
%

    \end{minipage}
    \end{fullpage}
    \end{figure}
    \endgroup
}
% \pagestyle{fancy}
 \fancyhf{}
 \fancypagestyle{alim}{\fancyhf{}\renewcommand{\headrulewidth}{0pt}\fancyfoot[C]{\arabic{page}}}

\addto\captionsenglish{\renewcommand{\figurename}{}}

\begin{document}

\pic{_SDC2222}
\blankpage
\twosidepic{_SDC3333}




%\end{comment}
\end{document}

根据评论,这是我使用的配置文件:

\Preamble{xhtml}
\Configure{@TITLE}{\let\titlefont\relax}
\Configure{graphics*}  
    {pdf}  
    {\Needs{"convert '\csname Gin@base\endcsname.pdf'  
                         '\csname Gin@base\endcsname.jpg'"}%  
    \Picture[pict]{\csname Gin@base\endcsname.jpg}%  
    \special{t4ht+@File: \csname Gin@base\endcsname.jpg}
    }  
\begin{document}
\EndPreamble

按照以下说明,我将我的文件编辑为 mypic.sty、mypic.4ht 和 mydocument.tex:

mypic.sty:

\ProvidesPackage{mypic}
\usepackage{graphicx}
\usepackage{dpfloat}
\usepackage{xargs}
\usepackage[font=Large,labelfont=Large]{caption}
\graphicspath{{"graphics/"}}
\DeclareGraphicsExtensions{.pdf,.png,.jpg}

\newcommandx{\spic}[3][1=0,2]{
    \clearpage
    \noindent\begin{minipage}[t][\dimexpr\textheight-6pt\relax][c]{\textwidth}
    \centering\includegraphics[angle=#1, width=\textwidth]{#3}
    %\caption*{#2}
    \end{minipage}
    \clearpage
}
\newcommandx{\pic}[3][1=0,2]{
    \begingroup
    \clearpage
    \newpage
    \vspace*{3in}  
    \centering{\Large #2}
    \newpage
    \begin{minipage}[t][\dimexpr\textheight-6pt\relax][c]{\textwidth}
    \center{\includegraphics[angle=#1, width=\textwidth]{#3}}
    %\caption*{#2}
    \end{minipage}
    \clearpage
    \endgroup
}
\newcommandx{\lpic}[3][1=0, 2=]{
    \newpage
%   \clearpage
    \begin{sidewaysfigure}[ht]
    \center{\includegraphics[angle=#1, width=0.8\textheight]{#3}}
    \caption*{#2}
    \end{sidewaysfigure}
}
\newcommandx{\twosidepic}[2][2]{
    \clearpage
    \begingroup
    \sbox0{\includegraphics{#1}}
    \begin{figure}[p]% will be the left-side figure
    \begin{leftfullpage}
    \noindent\begin{minipage}[t][\textheight][c]{\paperwidth}
    \hspace*{-2\leftmargin}
    \includegraphics[trim=0 0 {.5\wd0} 0,width=\dimexpr\paperwidth\relax,clip]{#1}
    \captionsetup{font = Large, labelfont=Large, singlelinecheck = false, format= hang, justification=raggedleft, labelsep=space}
    \caption*{}
    \end{minipage}
    \end{leftfullpage}
    \end{figure}
    \begin{figure}[p]
    \begin{fullpage}
    \noindent\begin{minipage}[t][\textheight][c]{\paperwidth}
    \hspace*{-2\leftmargin}
    \includegraphics[trim={.5\wd0} 0 0 0,width=\dimexpr\paperwidth\relax,clip]{#1}
    \captionsetup{font = Large, labelfont=Large, singlelinecheck = false, format= hang, labelsep=space, justification=centering} %justification=justified
    \caption*{#2}
    \end{minipage}
    \end{fullpage}
    \end{figure}
    \endgroup
}

\addto\captionsenglish{\renewcommand{\figurename}{}}
\newcommand\trimimage[1]{%
}
\endinput

mypic.4ht

\NewConfigure{twosidepic}{2}
\renewcommandx\twosidepic[2][2]{%
\ifvmode\IgnorePar\fi\EndP%
\a:twosidepic%
\begin{figure}%
\openin15=#1-01.jpg
\ifeof15
\Needs{"convert "#1.jpg"  -crop 50\%x100\% +repage "#1-\%02d.jpg""}
\else
\includegraphics{#1-00.jpg}%
\includegraphics{#1-01.jpg}%
\fi
\caption*{#2}%
\end{figure}%
\b:twosidepic\par%
}

我的文档.tex:

\documentclass[12pt, twodise]{book}
\usepackage[polish, russian, english]{babel}
\usepackage[babel,autostyle=true]{csquotes}
\MakeOuterQuote{"}
\selectlanguage{english}
\usepackage[utf8]{inputenc}
\usepackage[T2A]{fontenc}
\usepackage{indentfirst}
\usepackage{needspace}
\usepackage{comment}
\usepackage[inner=0.75in, outer=0.75in, top=0.75in, bottom=0.75in, paperwidth=6in, paperheight=9in]{geometry}% inner=0.875in
%\usepackage{changepage}
\usepackage{anyfontsize}
\usepackage{epigraph}
\usepackage{afterpage}
\usepackage[figuresright]{rotating}
\usepackage{lettrine}
\usepackage{yfonts}
\usepackage{nopageno}
\usepackage{fancyhdr}
\usepackage{lipsum}
\usepackage{mypic}
\setlength{\parskip}{1em} % changes vertical space between paragraphs
\setlength\parindent{0pt} % sets indent to zero

\newcommand\blankpage{
    \null
    %\thispagestyle{empty}
    %\addtocounter{page}{-1}
    \newpage
}
\newcommand{\tmpx}{}
\newcommand\tmp[1]{\renewcommand{\tmpx}{#1}}
\fancypagestyle{capt}{\fancyfoot[R]{\tmpx}}

% \pagestyle{fancy}
 \fancyhf{}
 \fancypagestyle{alim}{\fancyhf{}\renewcommand{\headrulewidth}{0pt}\fancyfoot[C]{\arabic{page}}}

\begin{document}

\pic{1}
\blankpage
\twosidepic{2}

%\end{comment}
\end{document}

答案1

如果我理解正确的话,您的命令\twosdepic会将图像分割成两个相对的面,以占据打开的书的整个尺寸。我的第一反应是,此功能在电子书中没什么用,因为您通常一次只查看一页,因此如果将其分割成两页,您将看不到全尺寸的图像。因此,真正的解决方案是重新定义 TeX4ht 的宏,使其仅包含一次全尺寸图像。

如果你真的想剪辑图像(我真的认为这对你来说不是一个好主意),你有两个选择:

  • 准备两张图片,每张图片是原始图片的一半,并将它们包含在内。这可以使用 Imagemagick 自动完成。这个解决方案的好处是它应该适用于任何电子书阅读器。
  • 使用 CSS 剪辑图像。请注意,电子书阅读器因 CSS 支持不佳而臭名昭著,因此您最终可能会得到阅读器呈现的两张全尺寸图像。

无论如何,我要做的第一件事就是将你的自定义命令从 TeX 文件提取到独立包中。例如mypackages.sty

\ProvidesPackage{mypackages}
\RequirePackage{graphicx}
\RequirePackage{caption}
\RequirePackage{xargs}
\RequirePackage{fancyhdr}
\RequirePackage{dpfloat}
\DeclareGraphicsExtensions{.pdf,.png,.jpg}
\setlength{\parskip}{1em}

\newcommandx{\spic}[3][1=0,2]{
    \clearpage
    \noindent\begin{minipage}[t][\dimexpr\textheight-6pt\relax][c]{\textwidth}
    \centering\includegraphics[angle=#1, width=\textwidth]{#3}
    %\caption*{#2}
    \end{minipage}
    \clearpage
}
\newcommandx{\pic}[3][1=0,2]{
    \begingroup
    \clearpage
    \newpage
    \vspace*{3in}
    \centering{\Large #2}
    \newpage
    \begin{minipage}[t][\dimexpr\textheight-6pt\relax][c]{\textwidth}
    \center{\includegraphics[angle=#1, width=\textwidth]{#3}}
    %\caption*{#2}
    \end{minipage}
    \clearpage
    \endgroup
}
\newcommandx{\lpic}[3][1=0, 2=]{
    \newpage
%   \clearpage
%   \thispagestyle{empty}
    \begin{sidewaysfigure}[ht]
    \center{\includegraphics[angle=#1, width=0.8\textheight]{#3}}
    \caption*{#2}
    \end{sidewaysfigure}
}
\newcommand\blankpage{
    \null
    %\thispagestyle{empty}
    %\addtocounter{page}{-1}
    \newpage
}
\newcommand{\tmpx}{}
\newcommand\tmp[1]{\renewcommand{\tmpx}{#1}}
\fancypagestyle{capt}{\fancyfoot[R]{\tmpx}}
\newcommandx{\twosidepic}[2][2]{
    \clearpage
    \begingroup
    \sbox0{\includegraphics{#1}}
    \begin{figure}[p]% will be the left-side figure
    \begin{leftfullpage}
    \noindent\begin{minipage}[t][\textheight][c]{\paperwidth}
    \hspace*{-2\leftmargin}
    \includegraphics[trim=0 0 {.5\wd0} 0,width=\dimexpr\paperwidth\relax,clip]{#1}
    \captionsetup{font = Large, labelfont=Large, singlelinecheck = false, format= hang, justification=raggedleft, labelsep=space}


%   \caption*{}


    \end{minipage}
    \end{leftfullpage}
    \end{figure}
    \begin{figure}[p]
    \begin{fullpage}
    \noindent\begin{minipage}[t][\textheight][c]{\paperwidth}
    \hspace*{-2\leftmargin}
    \includegraphics[trim={.5\wd0} 0 0 0,width=\dimexpr\paperwidth\relax,clip]{#1}
    \captionsetup{font = Large, labelfont=Large, singlelinecheck = false, format= hang, labelsep=space, justification=centering} %justification=justified

%   \caption*{#2}
%

    \end{minipage}
    \end{fullpage}
    \end{figure}
    \endgroup
}
% \pagestyle{fancy}
 \fancyhf{}
 \fancypagestyle{alim}{\fancyhf{}\renewcommand{\headrulewidth}{0pt}\fancyfoot[C]{\arabic{page}}}

\addto\captionsenglish{\renewcommand{\figurename}{}}

\newcommand\trimimage[1]{%
}
\endinput

这使得您的 TeX 文件更易于处理,更重要的是,它使我们能够为其编写 TeX4ht 配置。mypackages.4ht每次使用包时都会使用该文件。基本格式如下:

\NewConfigure{twosidepic}{2}
\renewcommandx\twosidepic[2][2]{%
\ifvmode\IgnorePar\fi\EndP%
\a:twosidepic%
\begin{figure}%
\includegraphics{#1}%
\caption*{#2}%
\end{figure}%
\b:twosidepic\par%
}

它只是简化了\twosidepic命令以仅包含最低限度的内容,因为大多数原始代码在转换过程中根本没有用,它只是处理 PDF 文件中的视觉外观。它包括全尺寸的图像。定义了\NewConfigure{twosidepic}{2}两个新命令,\a:twosidepic\b:twosidepic。它们可用于从 TeX4ht 配置文件插入特定的 HTML 代码。我们尚未在此版本中使用它们,但在需要时可以使用它们会很好。

以下是示例文件:

\documentclass{article}
\usepackage[english]{babel}
\usepackage{mypackages}
\begin{document}
\twosidepic{example-image}
\end{document}

这是 PDF 版本:

在此处输入图片描述

HTML 内容如下:

在此处输入图片描述

这是图像分割方法的配置文件:

\NewConfigure{twosidepic}{2}
\renewcommandx\twosidepic[2][2]{%
\ifvmode\IgnorePar\fi\EndP%
\a:twosidepic%
\begin{figure}%
\openin15=#1-01.png
\ifeof15
\Needs{"convert "#1.png"  -crop 50\%x100\% +repage "#1-\%02d.png""}
\else
\includegraphics{#1-00.png}%
\includegraphics{#1-01.png}%
\fi
\caption*{#2}%
\end{figure}%
\b:twosidepic\par%
}

它使用 Imagemagick 将图像分割成两部分。使用以下命令进行请求:

\Needs{"convert "#1.png"  -crop 50\%x100\% +repage "#1-\%02d.png""}

仅当裁剪的图像不存在时才请求图像转换,使用以下方法检查:

\openin15=#1-01.png
\ifeof15

请注意,我们希望图像采用 PNG 格式,您可以根据使用情况将其更改为其他格式。

当图像存在时,将插入左侧和右侧的图像。

请注意,此方法需要两个编译步骤tex4ebook。第一次调用将生成图像,它们只能在第二次运行中被包含。

结果如下:

在此处输入图片描述

最后一种方法,使用 CSS,会更复杂,我已经尝试过了,所以我可能会稍后再尝试。

编辑:

以下是mypic.4ht支持以下版本的版本\graphicspath

\NewConfigure{twosidepic}{2}
\renewcommandx\twosidepic[2][2]{%
\ifvmode\IgnorePar\fi\EndP%
\a:twosidepic%
\begin{figure}%
\def\my@ext{.jpg}
\ifx\Ginput@path\@undefined
  \let\Ginput@path\input@path
\fi
\let\input@path\Ginput@path%
\@iffileonpath{#1\my@ext}{
  \typeout{file found: \@filef@und}%
  \expandafter\filename@parse\expandafter{\@filef@und}
  \edef\base@name{\filename@area\filename@base}
  \openin15=\base@name-00\my@ext\relax
  \ifeof15
    \Needs{"convert \base@name\my@ext"  -crop 50\%x100\% +repage \base@name-\%02d\my@ext""}
  \else
    \includegraphics{\base@name-00\my@ext}%
    \includegraphics{\base@name-01\my@ext}%
  \fi
}{\typeout{Image not found}}
\caption*{#2}%
\end{figure}%
\b:twosidepic\par%
}

答案2

从您的MWE,希望您使用的图像是 .pdf 和 .png 格式,如果是,请尝试以下操作:

\Preamble{xhtml}
  \Configure{graphics*}  
         {pdf}  
         {\Needs{"convert '\csname Gin@base\endcsname.pdf'  
                               '\csname Gin@base\endcsname.png'"}%  
          \Picture[pict]{\csname Gin@base\endcsname.png}%  
          \special{t4ht+@File: \csname Gin@base\endcsname.png}
         }  
\begin{document}
\EndPreamble

相关内容