summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/lualatex/novel/novel-Images.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/lualatex/novel/novel-Images.sty')
-rw-r--r--Master/texmf-dist/tex/lualatex/novel/novel-Images.sty268
1 files changed, 268 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/lualatex/novel/novel-Images.sty b/Master/texmf-dist/tex/lualatex/novel/novel-Images.sty
new file mode 100644
index 00000000000..9a823653d37
--- /dev/null
+++ b/Master/texmf-dist/tex/lualatex/novel/novel-Images.sty
@@ -0,0 +1,268 @@
+%%
+%% This is file `novel-Images.sty', part of class `novel'.
+%% Copyright 2017 Robert Allgeyer.
+%%
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%%
+\ProvidesFile{novel-Images.sty}%
+[2017/03/01 v1.0.6 LaTeX file (image placement)]
+%%
+
+
+%%
+%% Be sure to read the separate documentation about how to prepare images.
+%% In general: (1) png or jpg only. (2) Flattened, no transparency.
+%% (3) 300dpi (grayscale) or 600dpi (black/white) are industry norms.
+%% (4) Image file must contain its resolution. (5) Exact size, without scaling.
+%% (6) No private metadata. (7) Be sure grayscale is 1-channel, not rgb gray.
+%%
+
+
+
+% \InlineImage[hoffset,voffset]{imagefile.png or jpg} and starred version.
+%
+% Use hoffset to displace the image horizontally. Positive is to the right.
+% Use voffset to displace the image vertically. Positive is upward.
+% Can use hoffset by itself, then voffset defaults to 0pt.
+%
+% The TOP of the image is placed at the baseline of text (unless offset).
+% To place image so that its BOTTOM (rather than top) is at the text baseline,
+% use voffset b. Can also use b+2em or b-3.4pt etc. without spaces.
+% To place image so that its top is as text X height, voffset \heightof{X}.
+%
+% You can combine lengths, such as:
+% voffset 0.2em+\heightof{X} or b-\heightof{Aring}+0.5em
+% However, do not begin the string with + or - followed directly by \heightof.
+%
+% Unstarred command: Image occupies its natural width, so that following text
+% (if on same line) is after the image.
+% Starred command: Image occupies zero width, so that following text (if on
+% the same line) overlays the image.
+% In all cases, the image occupies zero height, so that following text lines
+% will overlay the image, unless you insert some \null lines.
+% In some case, having following text overlay the image is desirable. But talk
+% with your print service about that. Not all like it.
+% If the image rises above its line of text, it may overlay text on the
+% preceding line, which obscures that text. Don't do it.
+%
+% Clever use of hoffset, with narrowed textblock, can place text beside image.
+%
+% \imagewidth and \imageheight may be used for offsets, or for any other
+% purpose once the image is placed. These lengths retain their values
+% until a subsequent image is placed, not including anything in header/footer.
+%
+\def\Aring{Å} % has typical maximum accented character height in Latin-1.
+%
+\newlength\imagewidth
+\newlength\imageheight
+\newlength\imagehoffset
+\newlength\imagevoffset
+\newlength\@imagewidth
+\newlength\@imageheight
+\newlength\@imagehoffset
+\newlength\@imagevoffset
+\gdef\imagestarred{false}
+\gdef\imagefilename{unknown}
+% Neutralize \includegraphics, so it is no longer a user command:
+\let\@includegraphics\includegraphics\relax
+\let\includegraphics\relax
+\newcommand\includegraphics[2][]{
+ \ClassError{novel}{Cannot use \string\includegraphics\space on page \thepage}
+ {The `novel' class has its own commands for placing images. See docs.^^J%
+ You cannot use the \string\includegraphics\space command.}%
+}
+%
+% \InlineImage can be used in body, header, footer.
+% However, macros such as \imagefilename, \imagewidth, etc.
+% are only set or re-set when the image in in the body.
+% That prevents an intervening header/footer image from over-writing
+% values set by the most recent body image.
+% The unstarred command occupies the width of the image.
+% The starred command occupies zero width.
+%
+\ExplSyntaxOn
+\DeclareDocumentCommand \InlineImage { s O{0pt} m }{%
+ \newif\if@imgExtOK%
+ \IfEndWith{#3}{png}{\@imgExtOKtrue}{}%
+ \IfEndWith{#3}{PNG}{\@imgExtOKtrue}{}%
+ \IfEndWith{#3}{jpg}{\@imgExtOKtrue}{}%
+ \IfEndWith{#3}{JPG}{\@imgExtOKtrue}{}%
+ \IfEndWith{#3}{jpeg}{\@imgExtOKtrue}{}%
+ \IfEndWith{#3}{JPEG}{\@imgExtOKtrue}{}%
+ \if@imgExtOK\else%
+ \ClassError{novel}{^^JImage~`#3'~format~not~allowed}%
+ {^^JImage~`#3'~has~file~type~not~allowed~in~`novel'~class.^^J%
+ Must~have~file~extension~png,~jpg,~jpeg~(or~capitalized).^^J%
+ Others~such~as~pdf~bmp,~tiff,~eps,~pdf,~svg~are~not~allowed.^^J}%
+ \fi%
+ \StrDel{#2}{\space}[\@myila]%
+ \StrCut{\@myila}{,}{\@myilxa}{\@myilya}%
+ \ifthenelse{\equal{\@myilxa}{} \OR \equal{\@myilxa}{0}}{%
+ \def\@myilx{0pt}}{\def\@myilx{\@myilxa}%
+ }%
+ \ifthenelse{\equal{\@myilya}{} \OR \equal{\@myilya}{0}}{%
+ \def\@myily{0pt}}{\def\@myily{\@myilya}%
+ }%
+ \iftoggle{@inheadfoot}{}{\gdef\imagefilename{#3}}% for possible later use
+ \gdef\my@graphic{\@includegraphics[draft=false]{#3}}%
+ \setlength\@imagewidth{\widthof{\my@graphic}}%
+ \global\@imagewidth=\@imagewidth%
+ \iftoggle{@inheadfoot}{}{\setlength\imagewidth{\@imagewidth}}%
+ \setlength\@imageheight{\heightof{\my@graphic}}%
+ \global\@imageheight=\@imageheight%
+ \iftoggle{@inheadfoot}{}{%
+ \setlength\imageheight{\@imageheight}%
+ \global\imageheight=\imageheight%
+ \typeout{^^JClass~`novel'~Info:~An~image~was~placed~on~page~\thepage.^^J%
+ Review~layout~to~ensure~that~it~does~not~overflow~into~margins.^^J}%
+ }%
+ \gdef\@imageheightnum{\strip@pt\@imageheight}%
+ \FPdiv{\@imagelines}{\@imageheightnum}{\nbsnum}%
+ \FPadd{\@imagelines}{\@imagelines}{0.5}% round up to integer, not down
+ \FPround{\@imagelines}{\@imagelines}{0}%
+ \FPclip{\@imagelines}{\@imagelines}%
+ \iftoggle{@inheadfoot}{}{\gdef\imagelineskip{\@imagelines}}%
+ %
+ \setlength\@imagehoffset{\@myilx}%
+ \IfBeginWith{\@myily}{b}{%
+ \StrDel[1]{\@myily}{b}[\temp@adjVoffseta]%
+ \ifthenelse{\equal{\temp@adjVoffseta}{} \OR \equal{\temp@adjVoffseta}{0}}{%
+ \def\temp@adjVoffset{0pt}}{\def\temp@adjVoffset{\temp@adjVoffseta}%
+ }%
+ \setlength\@imagevoffset{\temp@adjVoffset}%
+ }{%
+ \setlength\@imagevoffset{-\@imageheight}%
+ \addtolength\@imagevoffset{\@myily}%
+ }%
+ %
+ \IfBooleanTF{#1}%
+ % starred:
+ {%
+ \iftoggle{@inheadfoot}{}{\gdef\imagestarred{true}}%
+ \makebox[0pt][l]{%
+ \hspace{\@imagehoffset}%
+ \stake\smash{\raisebox{\@imagevoffset}{\my@graphic}}%
+ }%
+ }%
+ % unstarred:
+ {%
+ \iftoggle{@inheadfoot}{}{\gdef\imagestarred{false}}%
+ \hspace{\@imagehoffset}%
+ \stake\smash{\raisebox{\@imagevoffset}{\my@graphic}}%
+ }% end IfBooleanTF{#1}
+ \iftoggle{@inheadfoot}{}{\setlength\imagehoffset{\@imagehoffset}}%
+ \iftoggle{@inheadfoot}{}{\setlength\imagevoffset{\@imagevoffset}}%
+} % end DeclareDocumentCommand \InlineImage
+\ExplSyntaxOff
+%
+%%
+
+
+
+%% \BlockImage[alignment]{image}[text]
+% Alignment may have up to 3 comma-separated values. Default is [c]
+% First alignment: l, c, r (left, center, right).
+% Second alignment: x-offset of image (not text). Default 0pt. May use 0.
+% Third alignment: y-offset of image (not text). Default 0pt. May use 0.
+% Offsets are positive right and up.
+% The optional text, if used, must have its opening bracket immediately
+% follow the image closing brace, without intervening space.
+% Text may have line break or more than one paragraph, and may be styled.
+% But any font family change must go outside this command, not within the text.
+% The text will begin in the same block of vertical space as the image.
+% If image is centered, the text will automatically be centered, so that
+% it necessarily overlies the image.
+% \forceindent or \backindent may be needed. Text may have several paragraphs.
+% Subsequent text (after all that) will clear the image bottom, and also
+% be at the baseline grid. Beware of using this command near bottom of page.
+\ExplSyntaxOn
+\DeclareDocumentCommand \BlockImage { O{c} m +O{} }{
+ % Allows empty or blank to be used, and still provide default values:
+ \ifthenelse{\equal{#1}{}\OR\equal{#1}{\space}}{%
+ \def\@myargs{c}}{\def\@myargs{#1}%
+ }
+ \StrDel{\@myargs}{\space}[\@myargsns] % needs {\space} not { }
+ \StrCut{\@myargsns}{,}{\@myalign}{\@mycoord}
+ \StrCut{\@mycoord}{,}{\@myxt}{\@myyt}
+ \ifthenelse{\equal{\@myxt}{}\OR\equal{\@myxt}{0}}{%
+ \def\@myx{0pt}}{\def\@myx{\@myxt}%
+ }
+ \ifthenelse{\equal{\@myyt}{}\OR\equal{\@myyt}{0}}{%
+ \def\@myy{0pt}}{\def\@myy{\@myyt}%
+ }
+ \newdimen\@sbsheight
+ \ifthenelse{\equal{\@myalign}{c}\OR\equal{\@myalign}{}}{%
+ {\centering\InlineImage*[{\@myx-0.5\imagewidth},{\@myy}]{#2}\par}
+ \vspace{-\nbs}
+ {\centering #3\par}
+ \setbox0=\vbox{{\centering #3\par}}
+ }{}
+ \ifthenelse{\equal{\@myalign}{r}}{%
+ \noindent\InlineImage*[{\textwidth-\imagewidth+\@myx},{\@myy}]{#2}\par%
+ \vspace{-\nbs}
+ \begin{adjustwidth}{0pt}{\imagewidth+\parindent}%
+ #3\par%
+ \end{adjustwidth}%
+ \setbox0=\vbox{%
+ \begin{adjustwidth}{0pt}{\imagewidth+\parindent}%
+ #3\par%
+ \end{adjustwidth}%
+ }%
+ }{}
+ \ifthenelse{\equal{\@myalign}{l}}{%
+ \noindent\InlineImage*[{\@myx},{\@myy}]{#2}\par%
+ \vspace{-\nbs}
+ \begin{adjustwidth}{\imagewidth+\parindent}{0pt}%
+ #3\par%
+ \end{adjustwidth}%
+ \setbox0=\vbox{%
+ \begin{adjustwidth}{\imagewidth+\parindent}{0pt}%
+ #3\par%
+ \end{adjustwidth}%
+ }%
+ }{}
+ % portion here, inspired by post from user Killian Foth,
+ % at stackoverflow.com, license CC-by-sa-3.0.
+ \@sbsheight=\ht0 \advance\@sbsheight by \dp0
+ \def\@sbsheightnum{\strip@pt\@sbsheight}
+ \FPdiv{\@roughlines}{\@sbsheightnum}{\nbsnum}
+ \FPadd{\@roughlines}{\@roughlines}{0.5} % round up, not down
+ \FPround{\@roughlines}{\@roughlines}{0}
+ \FPclip{\@roughlines}{\@roughlines}
+ \FPadd{\@adjimagelines}{\imagelineskip}{1} % \imagelineskip from \InlineImage*
+ \FPsub{\@skipme}{\@adjimagelines}{\@roughlines}
+ \FPmax{\@skipme}{\@skipme}{0}
+ \vspace{\@skipme\nbs}
+}
+\ExplSyntaxOff
+%%
+
+
+
+
+% Returns 1 for monochrome, 8 for grayscale (or rgb). EXPERIMENTAL.
+% Not documented. Not used as part of any other commands.
+\gdef\imagecolordepth{%
+ \ifthenelse{\equal{\imagefilename}{unknown}}{unknown}{%
+ \directlua{%
+ img1=img.scan{filename="\imagefilename"}%
+ tex.print(tostring(img1.colordepth))%
+ }%
+ }%
+}
+%
+
+
+
+%%
+%% End of file `novel-Images.sty'.
+
+