summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2017-03-15 21:16:12 +0000
committerKarl Berry <karl@freefriends.org>2017-03-15 21:16:12 +0000
commit4338470395169d0b4ebc86b864961cfd61f80d69 (patch)
tree305b67ec8c622a68d60c7f7176934469ba393de4
parent80b2dce1110ea0c9bc2dfeaa992f050dfb65cda5 (diff)
revquantum (15mar17)
git-svn-id: svn://tug.org/texlive/trunk@43505 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Master/texmf-dist/doc/latex/revquantum/Install.ps122
-rw-r--r--Master/texmf-dist/doc/latex/revquantum/README.md15
-rw-r--r--Master/texmf-dist/doc/latex/revquantum/build.py295
-rw-r--r--Master/texmf-dist/doc/latex/revquantum/example.pdfbin0 -> 83056 bytes
-rw-r--r--Master/texmf-dist/doc/latex/revquantum/example.tex52
-rw-r--r--Master/texmf-dist/doc/latex/revquantum/revquantum.pdfbin180157 -> 167886 bytes
-rw-r--r--Master/texmf-dist/source/latex/revquantum/revquantum.dtx38
-rw-r--r--Master/texmf-dist/tex/latex/revquantum/revquantum.sty28
8 files changed, 138 insertions, 312 deletions
diff --git a/Master/texmf-dist/doc/latex/revquantum/Install.ps1 b/Master/texmf-dist/doc/latex/revquantum/Install.ps1
new file mode 100644
index 00000000000..eac3910e6fc
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/revquantum/Install.ps1
@@ -0,0 +1,22 @@
+param(
+ [switch] $CTAN
+)
+
+#region Bootstrap PoShTeX
+if (!(Get-Module -ListAvailable -Name posh-tex -ErrorAction SilentlyContinue)) {
+ Install-Module posh-tex -Scope CurrentUser
+}
+Import-Module posh-tex
+#endregion
+
+Out-TeXStyle revquantum
+Out-TeXStyleDocumentation revquantum
+
+Install-TeXUserResource tex/latex/revquantum revquantum.sty, revquantum.pdf
+
+Install-PandocUserResource templates pandoc/templates/revquantum.latex -ErrorAction Continue
+
+if ($CTAN) {
+ Invoke-TeXBuildEngine example.tex
+ Export-CTANArchive -ArchiveLayout Simple revquantum.ins, revquantum.pdf, README.md, example.tex, example.pdf, Install.ps1
+} \ No newline at end of file
diff --git a/Master/texmf-dist/doc/latex/revquantum/README.md b/Master/texmf-dist/doc/latex/revquantum/README.md
index c29c76a4f70..8cce7cfa938 100644
--- a/Master/texmf-dist/doc/latex/revquantum/README.md
+++ b/Master/texmf-dist/doc/latex/revquantum/README.md
@@ -40,7 +40,20 @@ A major goal of this package is to reduce the amount of useless crap that needs
## Installing ##
-Installing LaTeX packages outside of CTAN is a pain, and this is no exception. I'll submit there at some point to remove that difficulty. In the meantime, I think the following works on Unix-like systems. If not, let me know or pull request with better instructions.
+### Install With PowerShell ###
+
+In an attempt to cut down on the pain of LaTeX package installation, ``{revquantum}`` uses [PoShTeX](https://github.com/cgranade/posh-tex/) to automate installation. If you're running PowerShell already, just run ``Install.ps1``:
+
+```powershell
+PS> Unblock-File Install.ps1 # Mark the installer as safe to run.
+PS> ./Install.ps1
+```
+
+PowerShell itself is easy to install on many macOS and Linux systems using the [provided packages](https://github.com/PowerShell/PowerShell#get-powershell).
+
+### Manual Installation ###
+
+I think the following works on Unix-like systems. If not, let me know or pull request with better instructions.
```bash
$ latex revquantum.ins # Makes the actual .sty from the .dtx file.
diff --git a/Master/texmf-dist/doc/latex/revquantum/build.py b/Master/texmf-dist/doc/latex/revquantum/build.py
deleted file mode 100644
index 6217d29d198..00000000000
--- a/Master/texmf-dist/doc/latex/revquantum/build.py
+++ /dev/null
@@ -1,295 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-from __future__ import print_function, unicode_literals
-
-PACKAGE_NAME = 'revquantum'
-TEX_DIR = None
-
-import errno
-import sys
-import os
-import tempfile
-import shutil
-import zipfile
-from subprocess import Popen, PIPE
-
-from io import StringIO
-
-def print_usage():
- print("""
-Usage:
-------
-
-python build.py tds
- Builds a *.tds.zip file for this package.
-
-python build.py install
- Installs this package into the main TeX directory.
- May require administrator privileges.
-""")
- sys.exit(1)
-
-def is_writable(dir_name):
- # Technique adapted from:
- # http://stackoverflow.com/a/25868839/267841
- # We modify by not raising on other OSErrors, as
- # we don't care *why* a directory isn't writable,
- # so much as that we need to know that it isn't.
- # We also note that tempfile raises an IOError
- # on Windows if it can't write, so we catch that,
- # too.
- try:
- with tempfile.TemporaryFile(dir=dir_name):
- pass
- except (OSError, IOError) as ex:
- return False
-
- return True
-
-def mkdir_p(path):
- # Copied from http://stackoverflow.com/a/600612/267841,
- # in keeping with the CC-BY-SA 3.0 license on StackOverflow
- # user contributions.
- if os.path.isdir(path):
- return
- try:
- os.makedirs(path)
- except OSError as exc: # Python > 2.5
- if exc.errno == errno.EEXIST and os.path.isdir(path):
- pass
- else:
- raise
- except WindowsError as exc:
- if exc.errno == 183 and os.path.isdir(path):
- pass
- else:
- raise
-
-def try_until(condition, *fns):
- for fn in fns:
- retval = fn()
- if condition(retval):
- return retval
-
- # This is likely a terrible error for any poor user,
- # so we should probably catch it. Probably.
- raise RuntimeError("No candidates found matching the given condition.")
-
-def is_miktek():
- # Assume MikTeX if and only if Windows.
- # This is a bad assumption, but we can encapsulate
- # it here and generalize later.
- return os.name == 'nt'
-
-def find_tex_root():
- proc = Popen(['kpsewhich', 'article.cls'], stdout=PIPE)
- stdout, stderr = proc.communicate()
-
- head, tail = os.path.split(stdout.strip())
-
- # Note that kpsewhich returns with / characters, even
- # under Windows, so we must use str.split to override
- # os.path's behavior.
- head_parts = head.split('/')
-
- # If we're on Windows, then that destroyed the drive
- # part of the pathspec.
- if os.name == 'nt':
- head_parts = [head_parts[0] + '\\'] + head_parts[1:]
-
- # Remove "tex/latex/base" from head_parts, since that's where
- # article.cls should live.
- tex_root = os.path.join(*head_parts[:-3])
-
- return tex_root
-
-def find_tex_user():
- if is_miktek():
- # Use MikTeX's initexmf utility to find the user install
- # dir.
- # http://tex.stackexchange.com/a/69484/615
- initexmf = Popen(['initexmf', '--report'], stdout=PIPE)
- stdout, stderr = initexmf.communicate()
-
- for line in stdout.split('\n'):
- try:
- key, value = line.split(':', 1)
- if key.strip().lower() == 'userinstall':
- return value.strip()
- except:
- continue
-
- raise RuntimeError("MikTeX did not report a UserInstall directory.")
-
- else:
- return os.path.expanduser('~/texmf')
-
-def find_tex():
- global TEX_DIR
-
- if TEX_DIR is None:
- TEX_DIR = try_until(is_writable,
- find_tex_root,
- find_tex_user
- )
-
- return TEX_DIR
-
-def copy_to_tex(what, tex_path=['tex', 'latex']):
- tex_root = find_tex()
- where = os.path.join(tex_root, *tex_path)
- full_path = os.path.join(where, what)
-
- # Check if the directory exists, make it if it doesn't.
- mkdir_p(where)
-
- print("Installing: {} ---> {}".format(what, full_path))
- shutil.copyfile(what, full_path)
-
-def write_to_zip(zip_file, filename, arcname=None, normalize_crlf=None):
- """
- normalize_crlf = None: automatically detect from filename.
- """
-
- if normalize_crlf is None:
- root, ext = os.path.splitext(filename)
- if ext in ('.dtx', '.ins', '.txt', '.md', '.py', '.tex'):
- normalize_crlf = True
- else:
- normalize_crlf = False
-
- if arcname is None:
- arcname = filename
-
- if not normalize_crlf:
- print("\tPacking: {} ---> {}".format(filename, arcname))
- zip_file.write(filename, arcname=arcname)
- else:
- print("\tPacking: {} ---> {} (normalized line endings)".format(filename, arcname))
- contents = StringIO(newline='\n')
- with open(filename, 'r') as f:
- for line in f:
- contents.write(line.decode('utf-8'))
- zip_file.writestr(
- arcname,
- contents.getvalue()
- )
-
-def yes_proc(args, yes="yes"):
- proc = Popen(args, stdin=PIPE)
- while proc.returncode is None:
- proc.communicate(yes)
- proc.poll()
-
- return proc.returncode == 0
-
-class LaTeXStyleBuilder(object):
- """
- Builds a DocStrip-formatted LaTeX style by running
- the LaTeX processor on the appropriate *.dtx file.
- """
- style_name = None
- manifest = {}
- ctan_manifest = {}
-
- def __init__(self, style_name):
- self.style_name = style_name
-
- self.manifest = {
- '{}.{}'.format(style_name, ext):
- path + [style_name]
- for ext, path in
- {
- 'sty': ['tex', 'latex'],
- 'pdf': ['doc', 'latex']
- }.items()
- }
-
- self.ctan_manifest = [
- '{}.dtx'.format(style_name),
- '{}.ins'.format(style_name),
- '{}.pdf'.format(style_name),
- 'build.py',
- 'README.md'
- ]
-
- def build_sty(self):
- print("Building: {}.sty".format(self.style_name))
- if not yes_proc(['latex', '{}.ins'.format(self.style_name)]):
- raise RuntimeError
- print("\n\n\n")
- return self
-
- def build_doc_pdf(self):
- print("Building: {}.pdf".format(self.style_name))
- if not yes_proc(['pdflatex', '{}.dtx'.format(self.style_name)]):
- raise RuntimeError
- print("\n\n\n")
- return self
-
- def build_tds_zip(self):
- print("Building: {}.tds.zip".format(self.style_name))
- tds_zip = zipfile.ZipFile('{}.tds.zip'.format(self.style_name), 'w')
-
- for what, where in self.manifest.items():
- assert os.path.isfile(what)
- write_to_zip(tds_zip, what, arcname=os.path.join(*where + [what]))
-
- print("\n\n\n")
- return self
-
- def build_ctan_zip(self):
- print("Building: {}.zip".format(self.style_name))
- ctan_zip = zipfile.ZipFile('{}.zip'.format(self.style_name), 'w')
-
- for what in self.ctan_manifest:
- assert os.path.isfile(what)
- write_to_zip(ctan_zip, what, arcname=os.path.join(self.style_name, what))
-
- print("\n\n\n")
- return self
-
- def install(self):
- for what, where in self.manifest.items():
- assert os.path.isfile(what)
- copy_to_tex(what, where)
-
- # Make sure to run texhash if we're not using MikTeX.
- if not is_miktek():
- print("Rehashing...")
- texhash = Popen(['texhash'])
- texhash.wait()
-
- return self
-
-if __name__ == "__main__":
- print("""
-WARNING: This installer is still in alpha, and is provided
- as a convenience only. That said, this installer
- may cause you to say unkind words in frustration
- instead of providing the intended convenience.
-""")
-
- if len(sys.argv) < 2:
- print_usage()
-
- else:
- subcommand = sys.argv[1]
- if subcommand not in ('tds', 'install', 'ctan'):
- print("No such command {}, try either 'tds', 'install' or 'ctan'.")
- print_usage()
-
- builder = LaTeXStyleBuilder(PACKAGE_NAME)
- builder.build_sty().build_doc_pdf()
-
- if subcommand == 'tds':
- builder.build_tds_zip()
-
- elif subcommand == 'install':
- builder.install()
-
- elif subcommand == 'ctan':
- builder.build_ctan_zip()
-
- else:
- assert False
diff --git a/Master/texmf-dist/doc/latex/revquantum/example.pdf b/Master/texmf-dist/doc/latex/revquantum/example.pdf
new file mode 100644
index 00000000000..269e1b7110e
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/revquantum/example.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/revquantum/example.tex b/Master/texmf-dist/doc/latex/revquantum/example.tex
new file mode 100644
index 00000000000..d94c1e4a43f
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/revquantum/example.tex
@@ -0,0 +1,52 @@
+\documentclass[pra,aps,twocolumn,superscriptaddress,10pt]{revtex4-1}
+\usepackage[pretty,uselistings]{revquantum}
+
+%=============================================================================
+% FRONT MATTER
+%=============================================================================
+
+\begin{document}
+
+\title{Example \textsf{revquantum} Document}
+
+\author{Christopher Granade}
+\email{cgranade@cgranade.com}
+\affilUSydPhys
+\affilEQuSUSyd
+
+\date{\today}
+
+\begin{abstract}
+ \TODO
+\end{abstract}
+
+\maketitle
+
+%=============================================================================
+% MAIN DOCUMENT
+%=============================================================================
+
+Lorum ipsum is kind of dated by now, but whatever. At least we can $\Tr$ its
+history.
+
+\todo{an example of a TODO, which will cause errors if present in the
+\texttt{final} version.}
+
+\bibliography{example}
+
+%=============================================================================
+% APPENDICES
+%=============================================================================
+
+\appendix
+
+%=============================================================================
+\section{Source Code}
+\label{apx:code}
+%=============================================================================
+
+\begin{lstlisting}[style=python,gobble=4,caption={Quick example of importing \cite{johansson_qutip_2013}.}]
+ >>> import qutip as qt
+\end{lstlisting}
+
+\end{document} \ No newline at end of file
diff --git a/Master/texmf-dist/doc/latex/revquantum/revquantum.pdf b/Master/texmf-dist/doc/latex/revquantum/revquantum.pdf
index 50bdd6038b5..07dfd1a3245 100644
--- a/Master/texmf-dist/doc/latex/revquantum/revquantum.pdf
+++ b/Master/texmf-dist/doc/latex/revquantum/revquantum.pdf
Binary files differ
diff --git a/Master/texmf-dist/source/latex/revquantum/revquantum.dtx b/Master/texmf-dist/source/latex/revquantum/revquantum.dtx
index 32a7e089a36..103ea3b0bf1 100644
--- a/Master/texmf-dist/source/latex/revquantum/revquantum.dtx
+++ b/Master/texmf-dist/source/latex/revquantum/revquantum.dtx
@@ -26,7 +26,7 @@
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{revquantum}
%<*package>
- [2016/09/21 v0.10 Build script fixes for CTAN submission.]
+ [2017/03/15 v0.11 Misc. fixes and improved installer.]
%</package>
%
%<*driver>
@@ -550,6 +550,7 @@
}{}
\ifthenelse{\boolean{@bibtexhacks}}{
\RequirePackage{letltxmacro}
+ \RequirePackage{etoolbox}
}{}
% \end{macrocode}
@@ -664,17 +665,21 @@
% suggested by egreg} for a rather annoying |{revtex4-1}| bug. In particular,
% we will set up |language={en}| as an alias for |language={english}|, so that
% |{revtex4-1}| will no longer raise |{babel}| errors for the undefined language.
+% As with our unforgivable hacks, we will guard the forgivable hacks with
+% the |[nobibtexhacks]| option.
% \begin{macro}{\ORIGselectlanguage}
% \begin{macrocode}
-\LetLtxMacro{\ORIGselectlanguage}{\selectlanguage}
-\DeclareRobustCommand{\selectlanguage}[1]{%
- \@ifundefined{alias@\string#1}
- {\ORIGselectlanguage{#1}}
- {\begingroup\edef\x{\endgroup
- \noexpand\ORIGselectlanguage{\@nameuse{alias@#1}}}\x}%
-}
+\ifthenelse{\boolean{@bibtexhacks}}{
+ \LetLtxMacro{\ORIGselectlanguage}{\selectlanguage}
+ \DeclareRobustCommand{\selectlanguage}[1]{%
+ \@ifundefined{alias@\string#1}
+ {\ORIGselectlanguage{#1}}
+ {\begingroup\edef\x{\endgroup
+ \noexpand\ORIGselectlanguage{\@nameuse{alias@#1}}}\x}%
+ }
+}{}
% \end{macrocode}
% \end{macro}
@@ -697,6 +702,23 @@
% \end{macrocode}
+% We will also redefine |\doibase| to eat any newlines following it, and to
+% prefer HTTPS to HTTP. This will fix a rather annoying bug where line breaks
+% in the *.bbl source can introduce extraneous spaces into the target of
+% each citation's |\href|.
+
+% \begin{macro}{\doibase}
+% \begin{macrocode}
+
+\ifthenelse{\boolean{@bibtexhacks}}{
+ % Ensure that the \doibase command is defined, just in case.
+ \providecommand{\doibase}{}
+ \renewcommand{\doibase}[1]{https://dx.doi.org/\ifdefempty{#1}{}{#1}}
+}{}
+
+% \end{macrocode}
+% \end{macro}
+
% \subsection{TODO Support} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/Master/texmf-dist/tex/latex/revquantum/revquantum.sty b/Master/texmf-dist/tex/latex/revquantum/revquantum.sty
index 8f26497e1dd..dbbf316fbcd 100644
--- a/Master/texmf-dist/tex/latex/revquantum/revquantum.sty
+++ b/Master/texmf-dist/tex/latex/revquantum/revquantum.sty
@@ -22,7 +22,7 @@
%%
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
\ProvidesPackage{revquantum}
- [2016/09/21 v0.10 Build script fixes for CTAN submission.]
+ [2017/03/15 v0.11 Misc. fixes and improved installer.]
\usepackage{ifthen}
@@ -177,6 +177,7 @@
}{}
\ifthenelse{\boolean{@bibtexhacks}}{
\RequirePackage{letltxmacro}
+ \RequirePackage{etoolbox}
}{}
@@ -260,13 +261,15 @@
-\LetLtxMacro{\ORIGselectlanguage}{\selectlanguage}
-\DeclareRobustCommand{\selectlanguage}[1]{%
- \@ifundefined{alias@\string#1}
- {\ORIGselectlanguage{#1}}
- {\begingroup\edef\x{\endgroup
- \noexpand\ORIGselectlanguage{\@nameuse{alias@#1}}}\x}%
-}
+\ifthenelse{\boolean{@bibtexhacks}}{
+ \LetLtxMacro{\ORIGselectlanguage}{\selectlanguage}
+ \DeclareRobustCommand{\selectlanguage}[1]{%
+ \@ifundefined{alias@\string#1}
+ {\ORIGselectlanguage{#1}}
+ {\begingroup\edef\x{\endgroup
+ \noexpand\ORIGselectlanguage{\@nameuse{alias@#1}}}\x}%
+ }
+}{}
@@ -283,6 +286,15 @@
+\ifthenelse{\boolean{@bibtexhacks}}{
+ % Ensure that the \doibase command is defined, just in case.
+ \providecommand{\doibase}{}
+ \renewcommand{\doibase}[1]{https://dx.doi.org/\ifdefempty{#1}{}{#1}}
+}{}
+
+
+
+
\ifthenelse{\boolean{@final}}{
\newcommand{\todo}[1]{%