From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/intopdf/README.md | 8 ++ macros/latex/contrib/intopdf/intopdf.dtx | 216 +++++++++++++++++++++++++++++++ macros/latex/contrib/intopdf/intopdf.pdf | Bin 0 -> 398683 bytes 3 files changed, 224 insertions(+) create mode 100644 macros/latex/contrib/intopdf/README.md create mode 100644 macros/latex/contrib/intopdf/intopdf.dtx create mode 100644 macros/latex/contrib/intopdf/intopdf.pdf (limited to 'macros/latex/contrib/intopdf') 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 +% +\input l3docstrip.tex +\keepsilent +\preamble +\endpreamble +\generate{\file{intopdf.sty}{\from{intopdf.dtx}{package}}} +\endbatchfile +% +%<*gobble> +\fi +\expandafter\ifx\csname @currname\endcsname\empty +\csname fi\endcsname +% +%<*driver> +\documentclass[full]{l3doc} +\usepackage{intopdf,metalogo} +\begin{document} +\DocInput{intopdf.dtx} +\PrintIndex +\PrintChanges +\end{document} +% +%<*gobble> +\fi +% +% \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} +% +% \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 Binary files /dev/null and b/macros/latex/contrib/intopdf/intopdf.pdf differ -- cgit v1.2.3