summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/intopdf
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/intopdf
Initial commit
Diffstat (limited to 'macros/latex/contrib/intopdf')
-rw-r--r--macros/latex/contrib/intopdf/README.md8
-rw-r--r--macros/latex/contrib/intopdf/intopdf.dtx216
-rw-r--r--macros/latex/contrib/intopdf/intopdf.pdfbin0 -> 398683 bytes
3 files changed, 224 insertions, 0 deletions
diff --git a/macros/latex/contrib/intopdf/README.md b/macros/latex/contrib/intopdf/README.md
new file mode 100644
index 0000000000..904939abe3
--- /dev/null
+++ b/macros/latex/contrib/intopdf/README.md
@@ -0,0 +1,8 @@
+# intopdf [![CTAN](https://img.shields.io/badge/CTAN-intopdf-blue.svg?style=flat-square)](https://ctan.org/pkg/intopdf)
+
+> This package allows to embed non-PDF files (e.g., BibTex) into PDF with hyperlink.
+
+To install, you can run `tex intopdf.dtx` and copy the generated file `intopdf.sty` to a directory in the search path of your TeX installation.
+For quick evaluation, you can also rename `intopdf.dtx` to `intopdf.sty` and use that file directly.
+
+This package is released under the LaTeX Project Public License v1.3c or any later version, see http://www.latex-project.org/lppl.txt for the full text of the license.
diff --git a/macros/latex/contrib/intopdf/intopdf.dtx b/macros/latex/contrib/intopdf/intopdf.dtx
new file mode 100644
index 0000000000..903e295b80
--- /dev/null
+++ b/macros/latex/contrib/intopdf/intopdf.dtx
@@ -0,0 +1,216 @@
+% \iffalse meta-comment
+%
+%% Copyright (C) 2018 by Marcel Krueger
+%%
+%% 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.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%
+%<*batch>
+%<*gobble>
+\ifx\jobname\relax\let\documentclass\undefined\fi
+\ifx\documentclass\undefined
+\csname fi\endcsname
+%</gobble>
+\input l3docstrip.tex
+\keepsilent
+\preamble
+\endpreamble
+\generate{\file{intopdf.sty}{\from{intopdf.dtx}{package}}}
+\endbatchfile
+%</batch>
+%<*gobble>
+\fi
+\expandafter\ifx\csname @currname\endcsname\empty
+\csname fi\endcsname
+%</gobble>
+%<*driver>
+\documentclass[full]{l3doc}
+\usepackage{intopdf,metalogo}
+\begin{document}
+\DocInput{intopdf.dtx}
+\PrintIndex
+\PrintChanges
+\end{document}
+%</driver>
+%<*gobble>
+\fi
+%</gobble>
+% \fi
+%
+% \GetFileInfo{intopdf.dtx}
+% \title{The \pkg{intopdf} package\thanks{This document
+% corresponds to \pkg{intopdf}~0.2.1, dated~2019/05/28.}}
+% \author{Marcel Kr\"uger \\ \href{mailto:tex@2krueger.de}{tex@2krueger.de}}
+%
+% \maketitle
+%
+% \begin{documentation}
+% This package defines a command \cmd\attachandlink{} which allows to attach an arbitrary file to your PDF document and linking to it from the main text.
+% It is inspired by the \TeX Stack Exchange question \href{https://tex.stackexchange.com/questions/418606/embed-non-pdf-files-e-g-bibtex-into-pdf-with-hyperlink-in-the-pdf/418827#418827}{Embed non-PDF files (e.g., BibTex) into PDF with hyperlink in the PDF}. The engines pdf\LaTeX\ and \LuaLaTeX\ are supported.
+%
+% \section{Usage}
+% \begin{function}{\attachandlink}
+% \begin{syntax}
+% |\attachandlink| [\meta{filespec}]\Arg{filename}[\meta{mime-type}]\Arg{Description}\Arg{link text}
+% \end{syntax}
+% The text \meta{link text} is inserted, linking to the file \meta{filename} which is attached to the document.
+%
+% \meta{Description} should be a description of the file and will be shown by the PDF viewer in the atttached files section and sometimes in a mouseover tooltip.\\
+% \meta{mime-type} should be the MIME-Type of \meta{filename}. Currently \meta{mime-type} is mandatory but I hope to make it optional in a later release.
+% Additionally \meta{filespec} can be used to specify the filename which will be shown in the PDF viewer.
+% If this is not given, it will default to \meta{filename}.
+% \end{function}
+% \section{Example}
+% The source of the document is attached
+% \attachandlink{intopdf.dtx}[application/x-tex]
+% {The source of this document}{here}.
+% \begin{verbatim}
+% The source of the document is attached
+% \attachandlink{intopdf.dtx}[application/x-tex]
+% {The source of this document}{here}.
+% \end{verbatim}
+% \end{documentation}
+% \begin{implementation}
+% \section{The implementation}
+% \changes{v0.0.1}{2018/03/13}{Initial version}
+% \begin{macrocode}
+%<@@=intopdf>
+% \end{macrocode}
+% \iffalse
+%<*package>
+\NeedsTeXFormat{LaTeX2e}
+\RequirePackage{expl3,xparse}
+\ProvidesExplPackage
+ {intopdf}
+ {2019/05/28}
+ {0.2.1}
+ {Embed non-PDF files into PDF with hyperlink}
+
+\RequirePackage{hyperref}
+%</package>
+% \fi
+% \changes{v0.1.0}{2018/03/15}{Added \LuaLaTeX\ support}
+% Only \pdfTeX{} and \LuaLaTeX{} are supported.
+% For other engines we show an error.
+% \begin{macrocode}
+\msg_new:nnnn{intopdf}{engine-unsupported}
+ {Your~TeX~engine~is~not~supported~by~intopdf.}
+ {To~use~intopdf,~you~have~to~use~pdfLaTeX~or~LuaLaTeX.}
+% \end{macrocode}
+% Then we define some wrappers for the primitives.
+% \begin{macrocode}
+\cs_generate_variant:Nn\str_case:nnF{VnF}
+\str_case:VnF\c_sys_engine_str{
+ {pdftex}{
+ \cs_new:Nn\__intopdf_escape_name:n{\pdfescapename{#1}}
+ \cs_new:Nn\__intopdf_escape_string:n{(\pdfescapestring{#1})}
+ \cs_new:Nn\__intopdf_pdfobj:n{
+ \tex_immediate:D\pdftex_pdfobj:D{<<#1>>}
+ }
+ \cs_new:Nn\__intopdf_pdfstream_file:nn{
+ \tex_immediate:D\pdftex_pdfobj:D stream attr {#1} file {#2}
+ }
+ \cs_new:Nn\__intopdf_lastobj_ref:{
+ \c_space_tl
+ \int_use:N\pdftex_pdflastobj:D
+ \c_space_tl
+ 0
+ \c_space_tl
+ R
+ }
+ \cs_new:Npn\__intopdf_annot:nnw#1#2{
+ \leavevmode
+ \pdftex_pdfstartlink:D attr{#1} user {#2}
+ }
+ \cs_new:Nn\__intopdf_annot_end:{
+ \pdftex_pdfendlink:D
+ }
+ }
+ {luatex}{
+ \RequirePackage{pdftexcmds}
+ \cs_new:Nn\__intopdf_escape_name:n{\pdf@escapename{#1}}
+ \cs_new:Nn\__intopdf_escape_string:n{(\pdf@escapestring{#1})}
+ \cs_new:Nn\__intopdf_pdfobj:n{
+ \tex_immediate:D\luatex_pdfextension:D obj{<<#1>>}
+ }
+ \cs_new:Nn\__intopdf_pdfstream_file:nn{
+ \tex_immediate:D\luatex_pdfextension:D obj stream attr {#1} file {#2}
+ }
+ \cs_new:Nn\__intopdf_lastobj_ref:{
+ \c_space_tl
+ \luatex_pdffeedback:D lastobj
+ \c_space_tl
+ 0
+ \c_space_tl
+ R
+ }
+ \cs_new:Npn\__intopdf_annot:nnw#1#2{
+ \leavevmode
+ \luatex_pdfextension:D startlink attr{#1} user {#2}
+ }
+ \cs_new:Nn\__intopdf_annot_end:{
+ \luatex_pdfextension:D endlink
+ \scan_stop:
+ }
+ }
+}{
+ \msg_critical:nn{intopdf}{engine-unsupported}
+}
+\cs_new:Nn\__intopdf_annot:nnn{
+ \__intopdf_annot:nnw{#1}{#2}
+ #3
+ \__intopdf_annot_end:
+}
+% \end{macrocode}
+% \begin{macro}{\attachandlink,\intopdf_attach_link:nnnnn,\intopdf_attach_link:nnnn}
+% \changes{v0.2.0}{2019/05/21}{Added filespec support. (The first optional argument) Added \cs{intopdf_attach_link:nnnnn}.}
+% The main functionality.
+% \begin{macrocode}
+\cs_new_protected:Nn\intopdf_attach_link:nnnnn{
+ \__intopdf_pdfstream_file:nn{
+ /Subtype /\__intopdf_escape_name:n{#3}
+ }{#2}
+ \__intopdf_pdfobj:n{
+ /Type /Filespec
+ /F \__intopdf_escape_string:n{#1}
+ /EF << /F \__intopdf_lastobj_ref: >>
+ /Desc \__intopdf_escape_string:n{#4}
+ }%
+ \__intopdf_annot:nnn{
+ \Hy@setpdfborder
+ \tl_if_empty:NF\@pdfhighlight{
+ /H\@pdfhighlight
+ }
+ \cs_if_free:NF\@urlbordercolor{
+ /C[\@urlbordercolor]
+ }
+ }{
+ /Subtype /Link
+ }{
+ \__intopdf_annot:nnn{}{
+ /Subtype /FileAttachment
+ /FS \__intopdf_lastobj_ref:
+ /F\c_space_tl 416
+ /CA\c_space_tl 0
+ /Contents \__intopdf_escape_string:n{#4}
+ }{
+ #5
+ }
+ }
+}
+\cs_new_protected:Npn \intopdf_attach_link:nnnn #1{
+ \intopdf_attach_link:nnnnn{#1}{#1}
+}
+\NewDocumentCommand\attachandlink{O{#2}mr[]mm}{
+ \intopdf_attach_link:nnnnn{#1}{#2}{#3}{#4}{#5}
+}
+% \end{macrocode}
+% \end{macro}
+% \end{implementation}
diff --git a/macros/latex/contrib/intopdf/intopdf.pdf b/macros/latex/contrib/intopdf/intopdf.pdf
new file mode 100644
index 0000000000..32099b778d
--- /dev/null
+++ b/macros/latex/contrib/intopdf/intopdf.pdf
Binary files differ