TemplateJournalsphysicscs
Quantum Journal (quantumarticle)
Official quantumarticle class for Quantum, the open-access journal for quantum science, quantum information and quantum computing. Two-column by default, with arXiv-compatibility checks built in.
LPPL 1.3c
Loading PDF preview…
What’s inside
- Starter files
main.tex4.2 KB
%% Quantum journal (quantumarticle). Keep \pdfoutput=1 within the first 5 lines (arXiv). \ifdefined\XeTeXversion\PassOptionsToPackage{xetex}{hyperref}\fi \ifdefined\pdfoutput\else\newcount\pdfoutput\fi \documentclass[a4paper,twocolumn,11pt,unpublished]{quantumarticle} \pdfoutput=1 %% Class options: twocolumn (default) or onecolumn, optional titlepage; `unpublished` %% for drafts not (yet) accepted, `accepted=YYYY-MM-DD` once accepted, `noarxiv` to %% silence the arXiv-compatibility checks. Line 2 pins hyperref's XeTeX driver under %% XeTeX engines; line 3 shims the \pdfoutput register on engines without the %% primitive (xelatex), which the class sets while loading. No-ops on pdflatex/arXiv. \usepackage[utf8]{inputenc} \usepackage[english]{babel} \usepackage[T1]{fontenc} \usepackage{amsmath,amssymb,amsthm} \usepackage{booktabs} \usepackage{tikz} \usetikzlibrary{quantikz} \usepackage{hyperref} \newtheorem{theorem}{Theorem} \newtheorem{lemma}[theorem]{Lemma} \newtheorem{definition}[theorem]{Definition} % quantikz already provides \ket and \bra. \DeclareMathOperator{\Tr}{Tr} \begin{document} \title{Noise Thresholds for Shallow Variational Circuits} \author{First Author} \email{first@university.edu} \orcid{0000-0000-0000-0000} \affiliation{Department of Physics, University Name, City, Country} \author{Second Author} \affiliation{Institute for Quantum Information, City, Country} \maketitle \begin{abstract} We analyse how depolarizing noise limits the expressivity of shallow variational circuits. We prove that for circuits of depth $d$ under per-gate noise $p$, the output distribution is $\varepsilon$-close to uniform once $d \gtrsim \log(1/\varepsilon)/p$, and we confirm the threshold numerically on a 12-qubit ansatz. \end{abstract} \section{Introduction} Variational algorithms are the leading candidates for near-term devices \cite{cerezo2021variational}, yet noise accumulates with depth \cite{preskill2018nisq}. We quantify the trade-off with a clean bound and a numerical check; the background is in \cite{nielsen2010quantum}. \section{Setting} \begin{definition} A depth-$d$ variational circuit on $n$ qubits is $U(\boldsymbol{\theta}) = \prod_{\ell=1}^{d} W_\ell\, R(\theta_\ell)$ with fixed entangling layers $W_\ell$ and parameterised single-qubit rotations $R(\theta_\ell)$. Under depolarizing noise each gate is followed by $\mathcal{D}_p(\rho) = (1-p)\rho + p\, I/2^n$. \end{definition} Figure~\ref{fig:circuit} shows one layer of the ansatz used throughout. \begin{figure}[t] \centering \begin{quantikz}[row sep=0.3cm, column sep=0.4cm] \lstick{$\ket{0}$} & \gate{R_y(\theta_1)} & \ctrl{1} & \qw & \gate{R_y(\theta_4)} & \qw \\ \lstick{$\ket{0}$} & \gate{R_y(\theta_2)} & \targ{} & \ctrl{1} & \gate{R_y(\theta_5)} & \qw \\ \lstick{$\ket{0}$} & \gate{R_y(\theta_3)} & \qw & \targ{} & \gate{R_y(\theta_6)} & \qw \end{quantikz} \caption{One layer of the hardware-efficient ansatz on three qubits.} \label{fig:circuit} \end{figure} \section{Main result} \begin{theorem}\label{thm:main} Let $\rho_d$ be the output of a depth-$d$ circuit under per-gate depolarizing noise $p$. Then \begin{equation}\label{eq:bound} \tfrac12 \big\| \rho_d - I/2^n \big\|_1 \;\le\; (1-p)^{d}. \end{equation} \end{theorem} \begin{proof} Each noisy layer contracts the trace distance to the maximally mixed state by a factor $1-p$, since $\mathcal{D}_p$ is affine and unitaries preserve trace distance. Iterating $d$ times gives \eqref{eq:bound}. \end{proof} \section{Numerics} Table~\ref{tab:thresholds} lists the depth at which the measured trace distance drops below $\varepsilon = 10^{-2}$ for several noise rates. \begin{table}[t] \centering \caption{Depth at which the output is $10^{-2}$-close to uniform ($n = 12$ qubits).} \label{tab:thresholds} \begin{tabular}{@{}ccc@{}} \toprule $p$ & Bound \eqref{eq:bound} & Simulated \\ \midrule $10^{-1}$ & 44 & 41 \\ $10^{-2}$ & 459 & 430 \\ $10^{-3}$ & 4603 & 4380 \\ \bottomrule \end{tabular} \end{table} \section{Conclusion} Depolarizing noise imposes a depth budget of order $1/p$ on any variational ansatz; error mitigation can shift constants but not the scaling. \acknowledgments{We thank our colleagues for discussions. This work was supported by Grant XXXX.} \bibliographystyle{quantum} \bibliography{references} \end{document}- Libraries and docs
quantum.bst44 KBVendored from mirrors.ctan.org on 2026-08-19.
% This is the BibTeX style file for the Quantum journal. % It is based on hyperabbrv.bst, and the extensions by Aram Harrow % (see https://github.com/harrow/arxiv-bibstyle) and Andrew Comech % (see https://www.math.tamu.edu/~comech/tools/bibtex-doi-eprint/). % % In addition to added arxiv and DOI hyperlinks, the file style incorporates design % choices made for Quantum journal, in particular in the light of online availability. % Furthermore, this file style introduces some custom reference classes as well as % custom entry fields. ENTRY { address archivePrefix author booktitle chapter code commit date doi edition editor eprint howpublished institution journal journaltitle key month note nolink number organization pages primaryClass publisher school series shortjournal shorturl title type url urldate version volume year } {} {} % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % Variables and state descriptors % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % INTEGERS { % These are state describing integers to control % punctuation, capitalization, and line breaks output.state before.all mid.sentence after.sentence after.block multiresult doi.linked % Counters length namesleft numnames found.slashes number.label longest.label.width % Config integers % - whether to print out DOI links explicitly or add the link to parts of the % citation itself. explicit.doi.links % - whether to raise compilation errors from (many) BibTeX warnings warnings.are.errors % - whether to append the word "Appearances" to entries, for hyperref's % pagebackref option pagebackref % pointers nameptr ptr } STRINGS { s t m longest.label label } FUNCTION {init.state.consts} { % Initialize the global state describing integeres for punctuation % Args: % Returns: #0 'before.all := #1 'mid.sentence := #2 'after.sentence := #3 'after.block := } % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % Custom warning % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % FUNCTION {my.warning} { % Print cited element in bibliography with error message in red. % If warnings.are.errors (default:True), raise a \PackageError % Args: str - Warning message % Returns: 'm := "{\color{red}{ This bibitem caused a BibTeX warning: " m * " entry.}}" * warnings.are.errors { "\PackageError{quantum.bst}{The bibitem " * cite$ * " caused a BibTeX warning}" * "{By default, quantum.bst handles BibTeX warnings like compilation " * "errors. Please refer to the bibliography style demo for details and options.}" * } 'skip$ if$ write$ m cite$ * warning$ } FUNCTION {my.warning.newline} { % Print cited element in bibliography with error message in red. % If warnings.are.errors (default:True), raise a \PackageError % This function includes a newline in the bibliography to ensure % that the error message for missing links is formatted correctly. % Args: str - Second line of warning message % str - First line of warning message % Returns: 's := 'm := "{\color{red}{ This bibitem caused a BibTeX warning: " m * "}}" * write$ newline$ "{\color{red}{" s * " entry.}}" * warnings.are.errors { "\PackageError{quantum.bst}{The bibitem " * cite$ * " caused a BibTeX warning}" * "{By default, quantum.bst handles BibTeX warnings like compilation " * "errors. Please refer to the bibliography style demo for details.}" * } 'skip$ if$ write$ m cite$ * warning$ } FUNCTION {my.crossref.warning} { % Print cited crossref element in bibliography with error message in red. % If warnings.are.errors (default:True), raise a \PackageError % Args: str - Warning message % Returns: 'm := warnings.are.errors { "{\color{red} This bibitem caused a crossref-BibTeX warning: need " m * " to crossref.}\PackageError{quantum.bst}{The crossref bibitem " * cite$ * " caused a BibTeX warning}" * "{By default, quantum.bst handles BibTeX warnings like compilation " * "errors. Please refer to the bibliography style demo for details.}" * write$ } 'skip$ if$ "need " m * " for " * cite$ * " to crossref " * crossref * warning$ } % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % Boolean functions % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % FUNCTION {not} { % Logical NOT of a "Boolean" % Args: int - Boolean to negate % Returns: int - negated Boolean { #0 } { #1 } if$ } FUNCTION {and} { % Logical AND between two "Booleans" % Args: int - First Boolean to combine % int - Second Boolean to combine % Returns: int - logical AND of input Booleans 'skip$ { pop$ #0 } if$ } FUNCTION {or} { % Logical OR between two "Booleans" % Args: int - First Boolean to combine % int - Second Boolean to combine % Returns: int - logical OR of input Booleans { pop$ #1 } 'skip$ if$ } % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % String manipulation % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % FUNCTION {string.length} { % Count the length of a string % Args: str - String to count % Returns: int - Length of input string #1 'length := % Increase the length by 1 until the substring of the current length is the full string {duplicate$ duplicate$ #1 length substring$ = not} {length #1 + 'length :=} while$ % Pop the string and return the length pop$ length } FUNCTION {contains.substring} { % Check whether a substring is contained in a string % Args: str - Substring to find in larger string % str - String to find the substring in % Returns: int("Boolean") - whether the substring is contained in the string 's := 't := % Count the length of the substring s string.length 'length := % cut away starting characters of the string until it is empty or the substring is found { t empty$ not } % Check whether the current string starts with the substring { t #1 length substring$ s = { % If yes, empty the string and return #1 "" 't := #1 } { % If not, delete the first character of the string t #2 global.max$ substring$ 't := % If the string is empty, return #0 t empty$ { #0 } 'skip$ if$ } if$ } while$ } FUNCTION {chop.word} { % Chop the beginning of a string if it matches a given second string % Args: str - String to chop % int - Length of substring to match % str - Substring to match % Returns: str - (Potentially) chopped string 's := 'length := s #1 length substring$ = { s length #1 + global.max$ substring$ } 's if$ } % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % Elementary output functions % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % FUNCTION {output.nonnull} { % Output a string that is guaranteed not to be empty % Args: str - String to process % Returns: % The written output via write$ depends on the position in a sentence or block, % as stored in outpute.state, which is updated accordingly. 's := output.state mid.sentence = 'write$ { output.state after.block = { add.period$ write$ newline$ "\newblock " write$ } { output.state before.all = 'write$ { add.period$ " " * write$ } if$ } if$ mid.sentence 'output.state := } if$ s } FUNCTION {output} { % Output a string if it is not empty % Args: str - String to check and output % Returns: duplicate$ empty$ 'pop$ 'output.nonnull if$ } FUNCTION {output.check} { % Check whether a string is empty, output it if it is not, and raise a my.warning if it is. % Args: str - Describing string of argument that is checked to provide a useful error message % str - String to check and output if it is not empty % Returns: 't := duplicate$ empty$ { pop$ "empty " t * " in " * my.warning } 'output.nonnull if$ } FUNCTION {no.output.check} { % Check whether a string is empty and raise a my.warning if it is. % Args: str - Describing string of argument that is checked to provide a useful error message % str - String to check % Returns: 't := duplicate$ empty$ { pop$ "empty " t * " in " * my.warning } 'skip$ if$ } FUNCTION {no.output.check.links} { % Check whether a string is empty and raise a my.warning.newline if it is. % Args: str - Describing string of argument that is checked to provide a useful error message % str - String to check % Returns: % The separate handling from no.output.check is the special warning message that contains % special characters, requiring us to use my.warning.newline. In addition, if the field % `nolink` is not missing (it may be empty though), the warning is not raised. 't := duplicate$ empty$ nolink missing$ and { pop$ "empty " t * ". " * "If none of these fields is applicable for the cited work you can include the field " * "\verb|`nolink = {}`| in its bib" my.warning.newline } 'skip$ if$ } FUNCTION {output.bibitem} { % Write the current buffer and the header for a new bibitem to the bbl file and % updates the output.state % Args: str - Current buffer is written to the bbl file % Returns: str - An empty string newline$ % Write the header for a new bibitem "\bibitem{" write$ cite$ write$ "}" write$ newline$ "" before.all 'output.state := } FUNCTION {fin.entry} { % Finalize an entry by appending a period if appropriate and writing to the bbl file % Args: str - Current string to write to the bbl file % Returns: add.period$ pagebackref { " Appearances:~" * } 'skip$ if$ write$ newline$ } FUNCTION {new.block} { % Start a new block in an entry, setting the output.state accordingly % Args: % Returns: output.state before.all = 'skip$ { after.block 'output.state := } if$ } FUNCTION {new.sentence} { % Start a new sentence in an entry, setting the output.state accordingly % Args: % Returns: output.state after.block = output.state before.all = or 'skip$ { after.sentence 'output.state := } if$ } FUNCTION {new.block.checka} { % Start a new block in an entry if the input string is not empty % Args: str - String to decide whether a new block is started % Returns: empty$ 'skip$ 'new.block if$ } FUNCTION {new.block.checkb} { % Start a new block in an entry if any of two input strings are not empty % Args: str - Second string to decide whether a new block is started % str - First string to decide whether a new block is started % Returns: empty$ swap$ empty$ and 'skip$ 'new.block if$ } FUNCTION {new.sentence.checka} { % Start a new sentence in an entry if the input string is not empty % Args: str - String to decide whether a new sentence is started % Returns: empty$ 'skip$ 'new.sentence if$ } FUNCTION {new.sentence.checkb} { % Start a new sentence in an entry if any of two input strings are not empty % Args: str - Second string to decide whether a new sentence is started % str - First string to decide whether a new sentence is started % Returns: empty$ swap$ empty$ and 'skip$ 'new.sentence if$ } FUNCTION {field.or.null} { % Replace an empty field or string by the empty string "" % Args: str - Field or string to check and replace % Returns: str - The input string if it was not empty, else "" % This function does nothing on strings, it just replaces empty (but defined) % fields by the empty string in order to allow for string comparisons and other operations % that are not defined on empty (non-string) fields. duplicate$ empty$ { pop$ "" } 'skip$ if$ } FUNCTION {tie.or.space.connect} { % Connect two strings with a space or a non-breaking ~ % Args: str - Second string to connect. If it is shorter than 3 characters, a ~ is used % str - First string to connect. % Returns: str - The connected strings. duplicate$ text.length$ #3 < { % Use a ~ if the second string is shorter than 3 characters "~" } { % Use a space else " " } if$ % Bring the strings in the order (first string, connector, second string) and merge them swap$ * * } FUNCTION {init.longest.label} { % Initializes globally used variables to determine the longest label in the bibliography % Args: % Returns: "" 'longest.label := #1 'number.label := #0 'longest.label.width := } FUNCTION {longest.label.pass} { % Update the longest.label.width and the longest.label, as measured by width$ % Args: % Returns: % Note that this function does not require any input from the bilbiography items, % but only depends on the number of items. number.label int.to.str$ 'label := number.label #1 + 'number.label := label width$ longest.label.width > { label 'longest.label := label width$ 'longest.label.width := } 'skip$ if$ } % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % Entry formatting % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % FUNCTION {boldfont} { % Add a bold font formatting string to a string (if it is not empty) % Args: str - The string to format in bold font % Returns: str - The input string wrapped in a formatting string for bold font % Only add the formatting string to a non-empty string duplicate$ empty$ { pop$ "" } { "{\bf " swap$ * "}" * } if$ } FUNCTION {format.names} { % Format a given string with names % Args: str - The string with names % Returns: str - The formatted names 's := % initialize pointer, counter for names and counter for names to handle left #1 'nameptr := s num.names$ 'numnames := numnames 'namesleft := % Iterate over names { namesleft #0 > } { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't := nameptr #1 > { % After the first name, include connecting characters namesleft #1 > { % If there is more than the current name left, use a comma ", " * t * } { % If there is only the current name left, use "and" or "et al." numnames #2 > { % Add a comma before "and" if there were more than two names "," * } 'skip$ if$ t "others" = { % Replace "and others" by "et~al." " et~al." * } { " and " * t * } if$ } if$ } { % Simply write the first name to buffer t } if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ } FUNCTION {format.authors} { % Apply format.names to the author field and return it % Args: % Returns: str - author field formatted via format.names % If the author field is empty, the empty string is returned instead. author empty$ { "" } { author format.names } if$ } FUNCTION {format.editors} { % Apply format.names to the editor field, add a remark "editor(s)" to it, and return it % Args: % Returns: str - editor field formatted via format.names, with ", editor(s)" appended. % If the editor field is empty, the empty string is returned instead. editor empty$ { "" } { editor format.names ", editor" * % Add plural "s" if multiple editors are given editor num.names$ #1 > { "s" * } 'skip$ if$ } if$ } FUNCTION {format.title} { % Wrap the title in quotation marks and change its capitalization. % Args: % Returns: str - title field wrapped in quotation marks with new capitalization % Note that change.case$ together with the option "t" removes all capitalization % of text that is not in curly braces, except for the very first character. title empty$ { "" } { "``" title "t" change.case$ * "''" * } if$ } FUNCTION { format.arxiv.hyperlink } { % Extract the arXiv handle from a string, removing a leading "arXiv" % Args: str - The string to extract the handle from % Returns: str - The extracted arXiv handle % If the string starts with "arxiv:" or "arxiv" (or any capitalized version of these), % the length-10 handle is extracted, otherwise the original string is returned. duplicate$ #1 #6 substring$ "l" change.case$ "arxiv:" = { #7 #10 substring$ } { duplicate$ #1 #5 substring$ "l" change.case$ "arxiv" = { #6 #10 substring$ } 'skip$ if$ } if$ } FUNCTION {format.eprint} { % Format the eprint link, including the hyperlink and the link text. % Args: % Returns: str - Hyperlink to extracted arxiv reference eprint empty$ { "" } { archivePrefix empty$ { primaryClass empty$ { "arXiv" } { primaryClass } if$ } { archivePrefix } if$ " \href{http://arxiv.org/abs/" eprint format.arxiv.hyperlink * "}{" * swap$ * ":" * eprint #1 #5 substring$ "arXiv" = { eprint #7 #15 substring$ * } { eprint * } if$ "}" * } if$ } FUNCTION {add.doi.link} { % Add a hyperlink referring to a DOI reference to a string, using the doi field. % Args: str - String to add the hyperlink to % Returns: str - Input string with hyperlink added "\href{https://dx.doi.org/" doi * "}{" * swap$ * "}" * } FUNCTION {n.dashify} { % Replace single dashes by double dashes % Args: str - Input string to be modified % Returns: str - Input string with single dashes replaced by double dashes 't := "" % Iterate over the characters in the string { t empty$ not } { t #1 #1 substring$ "-" = { t #1 #2 substring$ "--" = not { % If the current `t` starts with a "-" but not with "--", replace % the single dash with "--" and cut the leading dash from `t` "--" * t #2 global.max$ substring$ 't := } { % If the current `t` starts with a "--", add all dashes in the % current `t` to the output string without any replacement { t #1 #1 substring$ "-" = } { "-" * t #2 global.max$ substring$ 't := } while$ } if$ } { % If the current `t` does not start with a dash, simply move the first % character to the output string. t #1 #1 substring$ * t #2 global.max$ substring$ 't := } if$ } while$ } FUNCTION {format.year} { % Format the year of an entry % Args: % Returns: str - Formatted year in brackets % If the year field is empty, the year is extracted from the date field, assuming % that it starts with the year. year empty$ { date empty$ { "" } { "~(" date #1 #4 substring$ * ")" * } if$ } { "~(" year * ")" * } if$ } FUNCTION {format.urldate} { % Format the date on which a URL was accessed % Args: % Returns: str - The formatted date in brackets with a remark "accessed:" % The urldate field preceeds the date field. urldate empty$ { date empty$ { "" } { "(accessed:~" date * ")" * } if$ } { "(accessed:~" urldate * ")" * } if$ } FUNCTION {format.chapter} { % Format the chapter field for an entry % Args: int - "Boolean" indicating whether the "Chapter" should be turned to lower case % Returns: str - The formatted chapter with leading "Chapter" string. % If the field `type` is not empty, it is used instead of the generic "Chapter". type empty$ { "Chapter" } { type } if$ swap$ { "l" change.case$ } 'skip$ if$ chapter tie.or.space.connect } FUNCTION {multi.page.check} { % Check whether a string indicates multiple pages % Args: str - The string describing a page or multiple pages % Returns: int - "Boolean" indicating whether the string describes multiple pages 't := #0 'multiresult := { multiresult not t empty$ not and } { % Check whether the first character in the current `t` is one of "-", "," or "+" t #1 #1 substring$ duplicate$ "-" = swap$ duplicate$ "," = swap$ "+" = or or { #1 'multiresult := } { % Remove the first character from the current `t` t #2 global.max$ substring$ 't := } if$ } while$ multiresult } FUNCTION {format.pages} { % Format the pages field of an entry % Args: int - "Boolean" indicating whether to capitalize the word "page(s)" % Returns: str - The formatted pages field, including the word "page(s)" { "p" } { "P" } if$ pages multi.page.check { "ages" * pages n.dashify tie.or.space.connect } { "age" * pages tie.or.space.connect } if$ } FUNCTION {format.bvol.series} { % Format the book volume and the series of an entry % Args: % Returns: str - The volume and series field formatted into one string. % Raises a warning if the field `number` is present in addition to `volume`. volume empty$ { "" } { mid.sentence output.state = { "v" } { "V" } if$ "olume" * volume tie.or.space.connect series empty$ 'skip$ { " of " * series * } if$ number empty$ 'skip$ { "can't use both volume and number fields in " * my.warning } if$ } if$ } FUNCTION {format.bvol.chap.pages} { % Format the book volume, series and the chapter and pages of an entry % Args: % Returns: str - The volume and series field formatted into one string. % This function wraps the previously defined functions format.bvol.series, % format.chapter, and format.pages into one. format.bvol.series chapter empty$ 'skip$ { duplicate$ empty$ { #0 } { ", " * #1 } if$ format.chapter * } if$ pages empty$ 'skip$ { duplicate$ empty$ { #0 } { ", " * #1 } if$ format.pages * } if$ } FUNCTION {format.number.series} { % Format the number and the series of an entry % Args: % Returns: str - The number and series field formatted into one string. % The returned string is empty if the `volume` field is not empty. % Raises a warning if the field `series` is empty. volume empty$ { number empty$ { series field.or.null } { output.state mid.sentence = { "number" } { "Number" } if$ number tie.or.space.connect series empty$ { "there's a number but no series in " my.warning } { " in " * series * } if$ } if$ } { "" } if$ } FUNCTION {format.edition} { % Format the edition field of an entry % Args: % Returns: str - The edition of the entry with "edition" comment, if it % is not contained in the field itself already. edition empty$ { "" } { output.state mid.sentence = { edition "l" change.case$ } { edition "t" change.case$ } if$ edition "edition" contains.substring 'skip$ { " edition" * } if$ } if$ } FUNCTION {format.vol.pages} { % Format the volume and pages for an article entry % Args: % Returns: The volume and page numbers as a single string volume field.or.null boldfont pages empty$ 'skip$ { duplicate$ empty$ { pop$ mid.sentence output.state = format.pages } { " " swap$ * ", " * pages n.dashify * } if$ } if$ } FUNCTION {format.chapter.pages} { % Format the chapter and pages for an entry % Args: % Returns: str - chapter and pages description in one string chapter empty$ { #0 format.pages } { mid.sentence output.state = format.chapter pages empty$ 'skip$ { ", " * #1 format.pages * } if$ } if$ } FUNCTION {format.in.ed.booktitle} { % Format the booktitle together with editors of an entry % Args: % Returns: The booktitle for an entry contained in the book. booktitle empty$ { "" } { editor empty$ { "In " booktitle * } { "In " format.editors * ", " * booktitle * } if$ } if$ } FUNCTION {empty.misc.check} { % Checks whether all relevant fields for a misc entry are empty % Args: % Returns: % Raises a warning if all fields are empty author empty$ title empty$ howpublished empty$ month empty$ year empty$ note empty$ and and and and and % Only warn for entries that actually have a key key empty$ not and { "all relevant fields are empty in " my.warning } 'skip$ if$ } FUNCTION {format.thesis.type} { % Replace a string with the type field if given, and add a DOI link % Args: str - String to add the DOI link to, or to replace by the `type` field. % Returns: str - Input string or `type` string if present, with DOI link. type empty$ 'skip$ { pop$ type "t" change.case$ } if$ doi missing$ explicit.doi.links or 'skip$ { add.doi.link } if$ } FUNCTION {format.tr.number} { % Format the number of a technical report and add the remark "Technical Report" % or the `type` field if present. % Args: % Returns: str - `type` field or "Technical Report" together with the `number` field type empty$ { "Technical Report" } 'type if$ number empty$ { "t" change.case$ } { number tie.or.space.connect } if$ } FUNCTION {get.journal} { % Obtain the journal from either journal, journaltitle or shortjournal, % in that order of priority % Args: % Returns: str - The name of the journal. journal missing$ { journaltitle missing$ { shortjournal missing$ { "" } { shortjournal } if$ } { journaltitle } if$ } { journal } if$ } FUNCTION {format.article.crossref} { % Fomat a cross-reference of an article % Args: % Returns: str - Crossref entry for an article incl. citation key empty$ { get.journal empty$ { "key or journal" my.crossref.warning "" } { "In {\em " get.journal * "\/}" * } if$ } { "In " key * } if$ " \cite{" * crossref * "}" * } FUNCTION {format.crossref.editor} { % Fomat the editors for a cross-reference to a book, collection or proceedings % Args: % Returns: str - Editors names formatted for a cross-reference. editor #1 "{vv~}{ll}" format.name$ editor num.names$ duplicate$ #2 > { pop$ " et~al." * } { #2 < 'skip$ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = { " et~al." * } { " and " * editor #2 "{vv~}{ll}" format.name$ * } if$ } if$ } if$ } FUNCTION {format.book.crossref} { % Fomat a cross-reference to a book % Args: % Returns: str - Crossref entry to a book incl. citation volume empty$ { "volume" my.crossref.warning "In " } { "Volume" volume tie.or.space.connect " of " * } if$ editor empty$ editor field.or.null author field.or.null = or { key empty$ { series empty$ { "editor, key, or series" my.crossref.warning "" * } { "{\em " * series * "\/}" * } if$ } { key * } if$ } { format.crossref.editor * } if$ " \cite{" * crossref * "}" * } FUNCTION {format.incoll.inproc.crossref} { % Fomat a cross-reference for an entry from a collection or proceedings % Args: % Returns: str - Crossref entry to the collection/proceedings incl. citation. editor empty$ editor field.or.null author field.or.null = or { key empty$ { booktitle empty$ { "editor, key, or booktitle" my.crossref.warning "" } { "In {\em " booktitle * "\/}" * } if$ } { "In " key * } if$ } { "In " format.crossref.editor * } if$ " \cite{" * crossref * "}" * } FUNCTION {extract.repo} { % Obtain the repository name from the `code` field % Args: % Returns: str - The repository name to print % Look for registered formatting of github repos and remove them "github.com/" #11 "www.github.com/" #15 "https://github.com/" #19 code chop.word chop.word chop.word % Extract the part of the repository name until the second slash 't := #0 'found.slashes := #1 'ptr := { ptr t text.length$ < #2 found.slashes > and} {t ptr #1 substring$ "/" = { found.slashes #1 + 'found.slashes := } 'skip$ if$ ptr #1 + 'ptr := } while$ % Return only the part up to the second slash from above #2 found.slashes = { t #1 ptr #2 - substring$ } { t #1 ptr substring$ } if$ } FUNCTION {format.version} { % Format the `version` field of an entry with `code` field % Args: % Returns: str - The version with a "v" abbreviation version empty$ { "" } { "v" version #1 #1 substring$ = { " " version * } { " v" version * } if$ } if$ } FUNCTION {format.commit} { % Format the `commit` field of an entry with `code` field % Args: % Returns: str - The commit field with the remark "commit" commit empty$ { "" } { " commit:" commit #1 #7 substring$ * } if$ } FUNCTION {format.code} { % Format the `code` field % Args: % Returns: str - The `code` field with version and commit, % including a link to the repository code empty$ { "" } { code "l" change.case$ "github" contains.substring { " code:~\href{" code * "}{" * extract.repo * format.version * format.commit * "}" * } { " code:~\href{" code * "}{" * code * "}" * } if$ } if$ } FUNCTION {format.url} { % Format a url % Args: % Returns: str - The `shorturl` (preferred) or `url` field including a link % The "https" part is removed from the printed string of the hyperlink shorturl empty$ { url empty$ { "" } { " url:~\url{" url * "}" * } if$ } { " url:~\href{" url * "}{" * "https://" #8 shorturl chop.word * "}" * } if$ } FUNCTION {check.links} { % Check that one of the fields providing a hyperlink is present and raise a warning if not % Args: % Returns: % The fields of which one should be present are `doi`, `eprint` and % `url`. Setting the (empty) field `nolink={}` suppresses this warning. doi missing$ eprint missing$ and { format.url "doi, eprint and url" no.output.check.links pop$ } 'skip$ if$ } FUNCTION {output.links} { % Output the links of an entry % Args: % Returns: new.block explicit.doi.links { % If explicit DOI links are set via the config, output it % explicitly (if it's not missing) doi missing$ 'skip$ { " doi:~" doi add.doi.link * output new.block } if$ } 'skip$ % Without explicit DOI links, it has already been added to another string. if$ % Add eprint link format.eprint output doi missing$ eprint missing$ and { % If the DOI and the eprint link are missing, add the `url` field hyperlink new.block format.url output } 'skip$ if$ new.block % Add the code hyperlink format.code output } % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % Interpretation of bib entries % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % FUNCTION {is.arxiv.article} { % Determine whether an article class is an arxiv article only. % Args: % Returns: int - "Boolean" indicating whether the entry is an arxiv article only % The article is considered an arxiv article only if % - get.journal delivers an empty string and the `archivePrefix` field matches "arxiv" % (up to capitalization) % - "arxiv" (or a capitalized version of it) is present in the output of get.journal % If the output of get.journal is empty and the `archivePrefix` field is present but not % known, a warning is raised. get.journal empty$ { archivePrefix missing$ { #0 } { archivePrefix "l" change.case$ "arxiv" = { #1 } { "The `archivePrefix' " archivePrefix * " is not supported for entry" * my.warning #0 } if$ } if$ } { get.journal "l" change.case$ "arxiv" contains.substring { #1 } { #0 } if$ } if$ } % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % Raw citation classes that are aliased in the public citation classes % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % FUNCTION {arxiv.article} { % Format an arxiv-only article output.bibitem format.authors "author" output.check new.block format.title "title" output.check crossref missing$ { format.year "year" output.check new.block check.links output.links } { format.article.crossref output.nonnull #1 format.pages output } if$ fin.entry } FUNCTION {std.article} { % Format a standard published article output.bibitem format.authors "author" output.check new.block format.title "title" output.check crossref missing$ { new.block get.journal "journal, shortjournal and journaltitle" no.output.check format.vol.pages * doi missing$ explicit.doi.links or 'skip$ { add.doi.link } if$ output format.year "year" output.check new.block check.links output.links } { format.article.crossref output.nonnull #1 format.pages output } if$ fin.entry } FUNCTION {std.misc} { % Format a standard misc entry output.bibitem format.authors output title howpublished new.block.checkb format.title output howpublished new.block.checka howpublished output format.year output format.eprint output new.block note output fin.entry empty.misc.check } FUNCTION {thesis.start} { % Format the first part of a thesis entry output.bibitem format.authors "author" output.check new.block format.title "title" output.check new.block } FUNCTION {thesis.end} { % Format the second (and last) part of a thesis entry new.block school "school" output.check new.block address output format.year "year" output.check new.block output.links fin.entry } % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % Recognized citation classes % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % FUNCTION {article} { is.arxiv.article 'arxiv.article 'std.article if$ } FUNCTION {conditional.doi.link} { duplicate$ empty$ doi missing$ explicit.doi.links doi.linked or or or 'skip$ { add.doi.link #1 'doi.linked := } if$ } FUNCTION {book} { output.bibitem author empty$ { format.editors "author and editor" output.check } { format.authors output.nonnull } if$ new.block format.title "title" output.check new.block #0 'doi.linked := crossref missing$ { format.bvol.chap.pages conditional.doi.link output new.block format.number.series conditional.doi.link output new.sentence publisher "publisher" no.output.check conditional.doi.link output new.sentence address output } { format.chapter.pages output new.block format.book.crossref output.nonnull } if$ format.year "year" output.check new.block format.edition output check.links output.links fin.entry } FUNCTION {repository} { output.bibitem format.authors output format.year output new.block code empty$ { format.url "url" output.check } { format.code output } if$ fin.entry } FUNCTION {website} { output.bibitem author empty$ 'skip$ { format.authors output.nonnull } if$ new.block format.title "title" output.check new.block format.url "url" output.check new.block code empty$ 'skip$ { format.code output new.block } if$ format.urldate output note output fin.entry } FUNCTION {misc} { is.arxiv.article 'arxiv.article 'std.misc if$ } FUNCTION {inbook} { format.chapter.pages empty$ { "`inbook' requires chapter or pages, otherwise use `book'" my.warning } 'skip$ if$ book } FUNCTION {proceedings} { output.bibitem editor empty$ { organization output } { format.editors output.nonnull } if$ new.block format.title "title" no.output.check doi missing$ explicit.doi.links or 'skip$ { add.doi.link } if$ output new.block format.bvol.series output format.number.series output new.block address empty$ { editor empty$ { publisher new.sentence.checka } { organization publisher new.sentence.checkb organization output } if$ new.block publisher output format.year "year" output.check } { address output.nonnull format.year "year" output.check new.sentence editor empty$ 'skip$ { organization output } if$ new.block publisher output } if$ new.block check.links output.links fin.entry } FUNCTION {booklet} { output.bibitem format.authors output new.block format.title "title" output.check howpublished new.block.checka howpublished output address new.block.checka address output format.year output output.links new.block note output fin.entry } FUNCTION {unpublished} { output.bibitem format.authors "author" output.check new.block format.title "title" output.check new.block note "note" output.check format.year output format.eprint output fin.entry } FUNCTION {incollection} { output.bibitem format.authors "author" output.check new.block format.title "title" output.check new.block #0 'doi.linked := crossref missing$ { format.in.ed.booktitle "booktitle" output.check new.block format.bvol.chap.pages conditional.doi.link output new.block format.number.series conditional.doi.link output new.sentence publisher "publisher" no.output.check conditional.doi.link address missing$ 'skip$ { ", " * address * } if$ output format.year "year" output.check new.block format.edition output } { format.incoll.inproc.crossref output.nonnull format.chapter.pages output } if$ new.block output.links fin.entry } FUNCTION {inproceedings} { output.bibitem format.authors "author" output.check new.block format.title "title" output.check new.block #0 'doi.linked := crossref missing$ { format.in.ed.booktitle "booktitle" output.check new.block format.bvol.chap.pages conditional.doi.link output new.block format.number.series conditional.doi.link output address empty$ { organization publisher new.sentence.checkb organization output publisher outputquantumarticle.cls57 KBVendored from mirrors.ctan.org on 2026-08-19.
%% %% This is file `quantumarticle.cls', %% it provides the quantumarticle class for typesetting articles in %% Quantum - the open journal for quantum science %% %% Copyright 2016,2017,2018,2019,2020,2021,2022 %% Verein zur Förderung des Open Access Publizierens in den Quantenwissenschaften %% (https://quantum-journal.org/about/) %% %% It is derived from `article.cls' available from %% https://www.ctan.org/pkg/article %% %% It 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. %% \NeedsTeXFormat{LaTeX2e}[1995/12/01] \def\quantumarticleversion{6.1} \ProvidesClass{quantumarticle} [2022/11/08 v\quantumarticleversion class for Quantum - the open journal for quantum science (https://quantum-journal.org)] \RequirePackage{xkeyval} \RequirePackage{etoolbox} \newcommand*\@ptsize{} \newtoggle{@restonecol} \newtoggle{@titlepage} \togglefalse{@titlepage} \newtoggle{@papersizespecified} \togglefalse{@papersizespecified} \DeclareOptionX{a4paper} { \setlength\paperheight{297mm}% \setlength\paperwidth{210mm} \toggletrue{@papersizespecified} } \DeclareOptionX{a5paper} { \setlength\paperheight {210mm}% \setlength\paperwidth {148mm} \toggletrue{@papersizespecified} } \DeclareOptionX{b5paper} { \setlength\paperheight {250mm}% \setlength\paperwidth {176mm} \toggletrue{@papersizespecified} } \DeclareOptionX{letterpaper} { \setlength\paperheight {11in}% \setlength\paperwidth {8.5in} \toggletrue{@papersizespecified} } \DeclareOptionX{legalpaper} { \setlength\paperheight {14in}% \setlength\paperwidth {8.5in} \toggletrue{@papersizespecified} } \DeclareOptionX{executivepaper} { \setlength\paperheight {10.5in}% \setlength\paperwidth {7.25in} \toggletrue{@papersizespecified} } \DeclareOptionX{landscape} { \setlength\@tempdima {\paperheight}% \setlength\paperheight {\paperwidth}% \setlength\paperwidth {\@tempdima} } \DeclareOptionX{10pt}{\renewcommand*\@ptsize{0}} \DeclareOptionX{11pt}{\renewcommand*\@ptsize{1}} \DeclareOptionX{12pt}{\renewcommand*\@ptsize{2}} \DeclareOptionX{oneside}{\boolfalse{@twoside}\boolfalse{@mparswitch}} \DeclareOptionX{twoside}{\booltrue{@twoside}\booltrue{@mparswitch}} \DeclareOptionX{draft}{\setlength\overfullrule{5pt}} \DeclareOptionX{final}{\setlength\overfullrule{0pt}} \DeclareOptionX{titlepage}{\toggletrue{@titlepage}} \DeclareOptionX{notitlepage}{\togglefalse{@titlepage}} \DeclareOptionX{onecolumn}{\boolfalse{@twocolumn}} \DeclareOptionX{twocolumn}{\booltrue{@twocolumn}} \DeclareOptionX{leqno}{\input{leqno.clo}} \DeclareOptionX{fleqn}{\input{fleqn.clo}} \DeclareOptionX{openbib}{% \AtEndOfPackage{% \renewcommand\@openbib@code{% \advance\leftmargin\bibindent \itemindent -\bibindent \listparindent \itemindent \parsep \z@ }% \renewcommand\newblock{\par}}% } %declare some dummy options for compatibility \DeclareOptionX{checkin}{} \DeclareOptionX{preprint}{} \DeclareOptionX{reprint}{} \DeclareOptionX{manuscript}{} \DeclareOptionX{noshowpacs}{} \DeclareOptionX{showpacs}{} \DeclareOptionX{showkeys}{} \DeclareOptionX{noshowkeys}{} \DeclareOptionX{balancelastpage}{} \DeclareOptionX{nobalancelastpage}{} \DeclareOptionX{nopreprintnumbers}{} \DeclareOptionX{preprintnumbers}{} \DeclareOptionX{hyperref}{} \DeclareOptionX{bibnotes}{} \DeclareOptionX{nobibnotes}{} \DeclareOptionX{footinbib}{} \DeclareOptionX{nofootinbib}{} \DeclareOptionX{altaffilletter}{} \DeclareOptionX{altaffilsymbol}{} \DeclareOptionX{superbib}{} \DeclareOptionX{citeautoscript}{} \DeclareOptionX{longbibliography}{} \DeclareOptionX{nolongbibliography}{} \DeclareOptionX{eprint}{} \DeclareOptionX{noeprint}{} \DeclareOptionX{author-year}{} \DeclareOptionX{numerical}{} \DeclareOptionX{galley}{} \DeclareOptionX{raggedbottom}{} \DeclareOptionX{tightenlines}{} \DeclareOptionX{lengthcheck}{} \DeclareOptionX{reprint}{} \DeclareOptionX{eqsecnum}{} \DeclareOptionX{secnumarabic}{} \DeclareOptionX{floats}{} \DeclareOptionX{stfloats}{} \DeclareOptionX{endfloats}{} \DeclareOptionX{endfloats*}{} \DeclareOptionX{osa}{} \DeclareOptionX{osameet}{} \DeclareOptionX{opex}{} \DeclareOptionX{tops}{} \DeclareOptionX{josa}{} \newtoggle{@amsfonts} \togglefalse{@amsfonts} \DeclareOptionX{amsfonts}{\toggletrue{@amsfonts}} \DeclareOptionX{noamsfonts}{} \newtoggle{@amssymb} \togglefalse{@amssymb} \DeclareOptionX{amssymb}{\toggletrue{@amssymb}} \DeclareOptionX{amssymbol}{\toggletrue{@amssymb}} \DeclareOptionX{noamssymb}{} \newtoggle{@amsmath} \togglefalse{@amsmath} \DeclareOptionX{amsmath}{\toggletrue{@amsmath}} \DeclareOptionX{noamsmath}{} \DeclareOptionX{byrevtex}{} \DeclareOptionX{floatfix}{} \DeclareOptionX{nofloatfix}{} \DeclareOptionX{ltxgridinfo}{} \DeclareOptionX{outputdebug}{} \DeclareOptionX{raggedfooter}{} \DeclareOptionX{noraggedfooter}{} \DeclareOptionX{frontmatterverbose}{} \DeclareOptionX{linenumbers}{} \DeclareOptionX{nomerge}{} \DeclareOptionX{hypertext}{} \DeclareOptionX{frontmatterverbose}{} \DeclareOptionX{inactive}{} \DeclareOptionX{groupedaddress}{} \DeclareOptionX{unsortedaddress}{} \DeclareOptionX{runinaddress}{} \DeclareOptionX{superscriptaddress}{} \newtoggle{@unpublished} \togglefalse{@unpublished} \DeclareOptionX{unpublished}{\toggletrue{@unpublished}} \newtoggle{@accepted} \togglefalse{@accepted} \DeclareOptionX{accepted}[]{\ifstrempty{#1}{}{\def\@accepteddate{#1}}\toggletrue{@accepted}\togglefalse{@unpublished}} \newtoggle{@revtexcompatibility} \togglefalse{@revtexcompatibility} \DeclareOptionX{aps}{\toggletrue{@revtexcompatibility}} \DeclareOptionX{pra}{\toggletrue{@revtexcompatibility}} \DeclareOptionX{prb}{\toggletrue{@revtexcompatibility}} \DeclareOptionX{pre}{\toggletrue{@revtexcompatibility}} \DeclareOptionX{prl}{\toggletrue{@revtexcompatibility}} \DeclareOptionX{prx}{\toggletrue{@revtexcompatibility}} \DeclareOptionX{aip}{\toggletrue{@revtexcompatibility}} \newtoggle{@allowfontchangeintitle} \togglefalse{@allowfontchangeintitle} \DeclareOptionX{allowfontchangeintitle}{\toggletrue{@allowfontchangeintitle}} \newtoggle{@nopdfoutputerror} \togglefalse{@nopdfoutputerror} \DeclareOptionX{nopdfoutputerror}{\toggletrue{@nopdfoutputerror}} %remind people not to use \today on the arxiv \newtoggle{@allowtoday} \togglefalse{@allowtoday} \DeclareOptionX{allowtoday}{\toggletrue{@allowtoday}} % set date to be empty as a default, otherwise latex will fill it with \@today which triggers the allowtoday error \date{} \newtoggle{@noarxiv} \togglefalse{@noarxiv} \DeclareOptionX{noarxiv} { \ExecuteOptionsX{a4paper,allowtoday,allowfontchangeintitle,nopdfoutputerror,unpublished} \toggletrue{@noarxiv} } \ExecuteOptionsX{10pt,oneside,twocolumn,notitlepage,final} \ProcessOptionsX % Throw an error if no paper size was manually specified % Simply defaulting to a4paper gives inconsistent behaviour when submitting to the arXiv as the arXiv seems to sometimes set a4paper and sometimes letterpaper, maybe depending on the geographic region of the submitter? \iftoggle{@papersizespecified} { } { \setlength\paperheight {297mm}% \setlength\paperwidth {210mm}% \iftoggle{@noarxiv}{}{% \ClassError{quantumarticle}{Please explicitly specify a paper size. Available options: a4paper, a5paper, b5paper, letterpaper, legalpaper, executivepaper. Not specifying a paper size can lead to inconsistent behavior when the manuscript is typeset by the arXiv. This error can be turned off by giving the noarxiv class option}{} }% } \input{size1\@ptsize.clo} %we patch the \usepackage command to enable the blacklisting of packages and to throw an error if \pdfoutput=1 was not included in the document before the first usepackage \csdef{@packageblacklist}{} \newcommand*{\@blacklistpackage}[2][]{ \listxadd{\@packageblacklist}{#2}% \ifstrempty{#1}{}{\csdef{@packageblacklisterrormessage#2}{#1 \string\usepackage{#2}}} } \let\oldusepackage\usepackage \renewcommand*{\usepackage}[2][]{ \iftoggle{@nopdfoutputerror} {% } { \def\@pdfoutputerror{\ClassError{quantumarticle}{As suggested by the arXiv (https://arxiv.org/help/submit_tex), please add \string\pdfoutput=1 within the first 5 lines of the preamble of your main LaTeX file and before the first \string\usepackage command. Without this, the arXiv compiles your document with latex instead of pdflatex and hyperlinks in the bibliography broken over several lines will not work properly. See https://tex.stackexchange.com/questions/182523/publishing-to-arxiv-with-hyperlinks for more information. If you still want to use standard latex (for example because you depend on psfrag) instead of pdflatex despite this problem, you can disable this error by giving the nopdfoutputerror option to quantumarticle. In this case please check carefully that the links in the version of your document typeset on the arXiv, especially those in the bibliography, work properly}{}%see also https://tex.stackexchange.com/questions/341466/latex-macros-in-classwarning-or-classerror for why \string is necessary } \ifcsdef{pdfoutput}% {% \ifnumequal{\pdfoutput}{1} {} {\@pdfoutputerror}% } {% \@pdfoutputerror% } } \ifinlist{#2}{\@packageblacklist}{ \ifcsdef{@packageblacklisterrormessage#2}{ \ClassError{quantumarticle}{\csname @packageblacklisterrormessage#2\endcsname}{}}{} }{\oldusepackage[#1]{#2}} } \@blacklistpackage{titlesec} \ifbool{@twocolumn} {\RequirePackage[margin=2cm,bottom=3cm]{geometry}} {\RequirePackage[margin=3cm,bottom=3cm]{geometry}} \@blacklistpackage{geometry} \setlength\lineskip{1\p@} \setlength\normallineskip{1\p@} \renewcommand*\baselinestretch{} \setlength\parskip{0\p@ \@plus \p@} \@lowpenalty 51 \@medpenalty 151 \@highpenalty 301 \AfterEndPreamble{ % avoid use of today \ifcsdef{today} { \iftoggle{@allowtoday} { \let\oldtoday\today \renewcommand*{\today}{\oldtoday\ClassWarning{quantumarticle}{If you intend to upload your manuscript to the arXiv, please manually replace any use of \string\today with the upload date. The arXiv typesets manuscripts on-demand, thus the output of \string\today may change over time}{}} } % else { \renewcommand*{\today}{\ClassError{quantumarticle}{If you intend to upload your manuscript to the arXiv, please manually replace any use of \string\today with the upload date. The arXiv typesets manuscripts on-demand, thus the output of \string\today may change over time. If you do not intend to upload your manuscript to the arXiv, you may use the class option noarxiv or turn off this error by means of the allowtoday option}{}} } } {} } \AtBeginDocument{ % avoid bitmap fonts by loading lmodern or at least checking for cm-super \IfFileExists{lmodern.sty}{ \RequirePackage{lmodern} }{ \IfFileExists{type1ec.sty}{}{ \iftoggle{@noarxiv}{}{% \ClassError{quantumarticle}{Either the lmodern or the cm-super package are required by quantumarticle in order to produce high quality pdf output. Please install the lmodern package, or, if this is not possible, the cm-super package. You can turn off this error message by giving the noarxiv class option}{} } } } % Define a revtex-style openone symbol \IfFileExists{bbm.sty}{ \RequirePackage{bbm} \DeclareRobustCommand\openone{\mathbbm{1}} }{ \IfFileExists{dsfont.sty}{ \RequirePackage{dsfont} \DeclareRobustCommand\openone{\mathds{1}} }{ % This uses a similar technique to {revtex4-1}'s openone, % namely two overstruck numeral 1s, but implemented using mboxes % and math kerning as suggested by The Comprehensive LaTeX Symbol List. \DeclareRobustCommand\openone{{\mbox{\small1}\mkern-5.5mu1}} } } \RequirePackage{xcolor} \definecolor{quantumviolet}{HTML}{53257F} %Quantum violet \definecolor{quantumgray}{HTML}{555555} %Quantum gray } \RequirePackage{ltxcmds} \let\origif@twocolumn\if@twocolumn \def\class@name{ltxutil}%get rid of "You should define the class name before reading in this package. Using default" warning from ltxutils which is loaded by ltxgrid \if@twocolumn \RequirePackage{ltxgrid}%ltxgrid should be loaded before etoolbox, otherwise terrible things can happen: https://tex.stackexchange.com/questions/343856/biblatex-produces-incomplete-bcf-with-biber-backend?noredirect=1#comment843815_343856 but if this is actually done, even more terrible things happen, so we partially repair what ltxgrid messes up below... \newcommand*{\twocolumn}[1][]{#1\twocolumngrid} \newcommand*{\onecolumn}{\onecolumngrid} \fi \let\if@twocolumn\origif@twocolumn \let\col@number\@colnum \ltx@ifpackageloaded{ltxgrid}{ \@ifpackagelater{ltxgrid}{2020/10/03} {}% on 2020/10/03 ltxgrid 4.2e (or 4.2d?) was released, which not only fixes the bug we try to work around here but also the fix below causes an error from this version on. { %repair what ltxutils has destroyed (see https://tex.stackexchange.com/questions/343856/biblatex-produces-incomplete-bcf-with-biber-backend) \patchcmd\enddocument {\deadcycles} {\let\AfterEndDocument\@firstofone \@afterenddocumenthook \deadcycles} {} {\AtEndDocument{% \let\etb@@end\@@end \def\@@end{% \let\AfterEndDocument\@firstofone \@afterenddocumenthook \etb@@end}}} } }{} \setcounter{topnumber}{2} \renewcommand*\topfraction{.7} \setcounter{bottomnumber}{1} \renewcommand*\bottomfraction{.3} \setcounter{totalnumber}{3} \renewcommand*\textfraction{.2} \renewcommand*\floatpagefraction{.5} \setcounter{dbltopnumber}{2} \renewcommand*\dbltopfraction{.7} \renewcommand*\dblfloatpagefraction{.5} \ifbool{@twoside}{ \def\ps@headings{% \let\@oddfoot\@empty\let\@evenfoot\@empty \def\@evenhead{\thepage\hfil\slshape\leftmark}% \def\@oddhead{{\slshape\rightmark}\hfil\thepage}% \let\@mkboth\markboth \def\sectionmark##1{% \markboth {\MakeUppercase{% \ifnumgreater{\c@secnumdepth}{\z@}{\thesection\quad}{} ##1}}{}}% \def\subsectionmark##1{% \markright {% \ifnumgreater{\c@secnumdepth}{\@ne}{\thesubsection\quad}{} ##1}}}% }{ \def\ps@headings{% \let\@oddfoot\@empty \def\@oddhead{{\slshape\rightmark}\hfil\thepage}% \let\@mkboth\markboth \def\sectionmark##1{% \markright {\MakeUppercase{% \ifnumgreater{\c@secnumdepth}{\m@ne}{\thesection\quad}{} ##1}}}}% } \def\ps@myheadings{% \let\@oddfoot\@empty\let\@evenfoot\@empty \def\@evenhead{\thepage\hfil\slshape\leftmark}% \def\@oddhead{{\slshape\rightmark}\hfil\thepage}% \let\@mkboth\@gobbletwo \let\sectionmark\@gobble \let\subsectionmark\@gobble } \iftoggle{@titlepage} { \newcommand\maketitle{\begin{titlepage}% % \let\footnotesize\small \let\footnoterule\relax \let \footnote \thanks \null\vfil \vskip 60\p@ \begin{center}% \@maketitle \end{center}\par % \@thanks \vfil\null \end{titlepage}% \setcounter{footnote}{0}% \global\let\thanks\relax \global\let\maketitle\relax \global\let\@maketitle\relax % \global\let\@thanks\@empty % \global\let\@author\@empty % \global\let\@date\@empty % \global\let\@title\@empty \global\let\title\relax \global\let\author\relax \global\let\date\relax \global\let\and\relax } } { \newcommand\maketitle{\par \begingroup \renewcommand\thefootnote{\@fnsymbol\c@footnote}% \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}% \long\def\@makefntext##1{\parindent 1em\noindent \hb@xt@1.8em{% \hss\@textsuperscript{\normalfont\@thefnmark}}##1}% \ifbool{@twocolumn} {\ifnumequal{\col@number}{\@ne}{\@maketitle}{\twocolumn[\@maketitle]}} {\global\@topnum\z@ % Prevents figures from going at top of page. \@maketitle} \thispagestyle{fancy}%\@thanks \endgroup \setcounter{footnote}{0}% \global\let\thanks\relax \global\let\maketitle\relax \global\let\@maketitle\relax % \global\let\@thanks\@empty % \global\let\@author\@empty % \global\let\@date\@empty % \global\let\@title\@empty \global\let\title\relax \global\let\author\relax \global\let\date\relax \global\let\and\relax } } \def\@maketitle{% \sffamily \null \let \footnote \thanks \noindent% \begin{minipage}{\textwidth}% \iftoggle{@titlepage}{\centering}{}% \noindent{\huge\hyphenpenalty=50000 \@printtitle\par}% \end{minipage}% \vskip 1.5em% \iftoggle{@titlepage}{}{\begin{flushleft}}% \noindent \@printauthors \iftoggle{@titlepage}{}{\end{flushleft}}% \vskip 1em% \noindent\@printaffiliations \vskip 0em% \ifdefempty{\@date}{}{\noindent{\footnotesize\color{quantumgray}\@date}}% \par \vskip 1.5em \makeatletter% \begingroup \hypersetup{% pdftitle={\detokenize\expandafter{\@title}}, pdfauthor={\@authorsonly}, pdfkeywords={\@keywords}, pdfcreator={LaTeX with hyperref package and class quantumarticle \csname ver@quantumarticle.cls\endcsname}, }% \endgroup \makeatother% } \setcounter{secnumdepth}{3} \newcounter {part} \newcounter {section} \newcounter {subsection}[section] \newcounter {subsubsection}[subsection] \newcounter {paragraph}[subsubsection] \newcounter {subparagraph}[paragraph] \renewcommand*\thepart {\@Roman\c@part} \renewcommand*\thesection {\@arabic\c@section} \renewcommand*\thesubsection {\thesection.\@arabic\c@subsection} \renewcommand*\thesubsubsection{\thesubsection.\@arabic\c@subsubsection} \renewcommand*\theparagraph {\thesubsubsection.\@arabic\c@paragraph} \renewcommand*\thesubparagraph {\theparagraph.\@arabic\c@subparagraph} \newcommand\part{% \ifbool{@noskipsec}{\leavevmode}{} \par \addvspace{4ex}% \boolfalse{@afterindent} \secdef\@part\@spart} \def\@part[#1]#2{% \ifnumgreater{\c@secnumdepth}{\m@ne} {\refstepcounter{part}\addcontentsline{toc}{part}{\thepart\hspace{1em}#1}} {\addcontentsline{toc}{part}{#1}} {\parindent \z@ \raggedright \interlinepenalty \@M \normalfont \ifnumgreater{\c@secnumdepth}{\m@ne}{\Large\bfseries \partname\nobreakspace\thepart\par\nobreak}{} \huge \bfseries #2% \markboth{}{}\par}% \nobreak \vskip 3ex \@afterheading% } \def\@spart#1{% {\parindent \z@ \raggedright \interlinepenalty \@M \normalfont \huge \bfseries #1\par}% \nobreak \vskip 3ex \@afterheading} \newcommand*\section{\@startsection {section}{1}{\z@}% {-3.5ex \@plus -1ex \@minus -.2ex}% {2.3ex \@plus.2ex}% {\normalfont\Large\sffamily}} \newcommand*\subsection{\@startsection{subsection}{2}{\z@}% {-3.25ex\@plus -1ex \@minus -.2ex}% {1.5ex \@plus .2ex}% {\normalfont\large\sffamily}} \newcommand*\subsubsection{\@startsection{subsubsection}{3}{\z@}% {-3.25ex\@plus -1ex \@minus -.2ex}% {1.5ex \@plus .2ex}% {\normalfont\normalsize\sffamily}} \newcommand*\paragraph{\@startsection{paragraph}{4}{\z@}% {3.25ex \@plus1ex \@minus.2ex}% {-1em}% {\normalfont\normalsize\bfseries}} \newcommand*\subparagraph{\@startsection{subparagraph}{5}{\parindent}% {3.25ex \@plus1ex \@minus .2ex}% {-1em}% {\normalfont\normalsize\bfseries}} \ifbool{@twocolumn}{\setlength\leftmargini{2em}}{\setlength\leftmargini{2.5em}} \leftmargin \leftmargini \setlength\leftmarginii {2.2em} \setlength\leftmarginiii {1.87em} \setlength\leftmarginiv {1.7em} \ifbool{@twocolumn}{ \setlength\leftmarginv {.5em} \setlength\leftmarginvi {.5em} }{ \setlength\leftmarginv {1em} \setlength\leftmarginvi {1em} } \setlength \labelsep {.5em} \setlength \labelwidth{\leftmargini} \addtolength\labelwidth{-\labelsep} \@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty -\@lowpenalty \renewcommand*\theenumi{\@arabic\c@enumi} \renewcommand*\theenumii{\@alph\c@enumii} \renewcommand*\theenumiii{\@roman\c@enumiii} \renewcommand*\theenumiv{\@Alph\c@enumiv} \newcommand*\labelenumi{\theenumi.} \newcommand*\labelenumii{(\theenumii)} \newcommand*\labelenumiii{\theenumiii.} \newcommand*\labelenumiv{\theenumiv.} \renewcommand*\p@enumii{\theenumi} \renewcommand*\p@enumiii{\theenumi(\theenumii)} \renewcommand*\p@enumiv{\p@enumiii\theenumiii} \newcommand*\labelitemi{\textbullet} \newcommand*\labelitemii{\normalfont\bfseries \textendash} \newcommand*\labelitemiii{\textasteriskcentered} \newcommand*\labelitemiv{\textperiodcentered} \newenvironment{description} {\list{}{\labelwidth\z@ \itemindent-\leftmargin \let\makelabel\descriptionlabel}} {\endlist} \newcommand*\descriptionlabel[1]{\hspace\labelsep \normalfont\bfseries #1} \iftoggle{@titlepage} { \newenvironment{abstract}{% \ifdefempty{\maketitle}{\relax{}}{\maketitle} \titlepage \null\vfil \thispagestyle{empty}% \@beginparpenalty\@lowpenalty \begin{center}% \bfseries \abstractname \@endparpenalty\@M \end{center}}% {\par\vfil\null\newpage\endtitlepage} }{ \newenvironment{abstract}{% \ifdefempty{\maketitle}{\relax{}}{\maketitle} \ifbool{@twocolumn}{\bf}{\vskip 1em \quotation}% } { \ifbool{@twocolumn}{}{\endquotation\vskip 2em} } } \newenvironment{verse} {\let\\\@centercr \list{}{\itemsep \z@ \itemindent -1.5em% \listparindent\itemindent \rightmargin \leftmargin \advance\leftmargin 1.5em}% \item\relax} {\endlist} \newenvironment{quotation} {\list{}{\listparindent 1.5em% \itemindent \listparindent \rightmargin \leftmargin \parsep \z@ \@plus\p@}% \item\relax} {\endlist} \newenvironment{quote} {\list{}{\rightmargin\leftmargin}% \item\relax} {\endlist} \newenvironment{titlepage} {% \ifbool{@twocolumn} {\toggletrue{@restonecol}\onecolumn\newpage} {\togglefalse{@restonecol}\newpage} \thispagestyle{empty}% \setcounter{page}\@ne }{% \iftoggle{@restonecol} {\twocolumn} {\newpage} \ifbool{@twoside}{}{\setcounter{page}\@ne} } \newcommand*\appendix{\par \setcounter{section}{0}% \setcounter{subsection}{0}% \gdef\thesection{\@Alph\c@section}} \setlength\arraycolsep{5\p@} \setlength\tabcolsep{6\p@} \setlength\arrayrulewidth{.4\p@} \setlength\doublerulesep{2\p@} \setlength\tabbingsep{\labelsep} \skip\@mpfootins = \skip\footins \setlength\fboxsep{3\p@} \setlength\fboxrule{.4\p@} \renewcommand*\theequation {\@arabic\c@equation} \newcounter{figure} \renewcommand*\thefigure {\@arabic\c@figure} \def\fps@figure{tbp} \def\ftype@figure{1} \def\ext@figure{lof} \def\fnum@figure{\figurename\nobreakspace\thefigure} \newenvironment{figure} {\@float{figure}} {\end@float} \newenvironment{figure*} {\@dblfloat{figure}} {\end@dblfloat} \newcounter{table} \renewcommand*\thetable{\@arabic\c@table} \def\fps@table{tbp} \def\ftype@table{2} \def\ext@table{lot} \def\fnum@table{\tablename\nobreakspace\thetable} \newenvironment{table} {\@float{table}} {\end@float} \newenvironment{table*} {\@dblfloat{table}} {\end@dblfloat} \newlength\abovecaptionskip \newlength\belowcaptionskip \setlength\abovecaptionskip{10\p@} \setlength\belowcaptionskip{0\p@} \long\def\@makecaption#1#2{% \vskip\abovecaptionskip \sbox\@tempboxa{#1: #2}% \ifdimgreater{\wd\@tempboxa}{\hsize} {#1: #2\par} {\global\boolfalse{@minipage} \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}}% \vskip\belowcaptionskip} \DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} \DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} \DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} \DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} \DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} \DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl} \DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc} \DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal} \DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal} \newcommand*\@pnumwidth{1.55em} \newcommand*\@tocrmarg{2.55em} \newcommand*\@dotsep{4.5} \setcounter{tocdepth}{3} % We use a trick from Ivan Andrus (https://stackoverflow.com/a/2785740) % to hide the "\section*{Contents}" command from the table of contents % to avoid getting an ugly duplication of the Contents header inside % the table itself. % % This trick consists of temporarily redefining \addcontentsline to % do nothing during the expansion of the arguments to \tocless. \newcommand{\nocontentsline}[3]{} \newcommand{\tocless}[2]{\bgroup\let\addcontentsline=\nocontentsline#1{#2}\egroup} \newcommand\tableofcontents{% \tocless{\section*}{\contentsname \@mkboth{% \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}% \@starttoc{toc}% } \newcommand*\l@part[2]{% \ifnumgreater{\c@tocdepth}{-2}{\relax \addpenalty\@secpenalty \addvspace{2.25em \@plus\p@}% \setlength\@tempdima{3em}% \begingroup \parindent \z@ \rightskip \@pnumwidth \parfillskip -\@pnumwidth {\leavevmode \large \bfseries #1\hfil \hb@xt@\@pnumwidth{\hss #2}}\par \nobreak \endgroup }{}% } \newcommand*\l@section[2]{% \ifnumgreater{\c@tocdepth}{\z@}{ \addpenalty\@secpenalty \addvspace{1.0em \@plus\p@}% \setlength\@tempdima{1.5em}% \begingroup \parindent \z@ \rightskip \@pnumwidth \parfillskip -\@pnumwidth \leavevmode \bfseries \advance\leftskip\@tempdima \hskip -\leftskip #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par \endgroup }{}% } \newcommand*\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}} \newcommand*\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}} \newcommand*\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}} \newcommand*\l@subparagraph{\@dottedtocline{5}{10em}{5em}} \newcommand\listoffigures{% \section*{\listfigurename}% \@mkboth{\MakeUppercase\listfigurename}% {\MakeUppercase\listfigurename}% \@starttoc{lof}% } \newcommand*\l@figure{\@dottedtocline{1}{1.5em}{2.3em}} \newcommand\listoftables{% \section*{\listtablename}% \@mkboth{% \MakeUppercase\listtablename}% {\MakeUppercase\listtablename}% \@starttoc{lot}% } \let\l@table\l@figure % Declare a new \acknowledgements command for {revtex4-1} % compatability. \newcommand*{\acknowledgmentsname}{Acknowledgments} \newcommand{\acknowledgments}[1]{% \section*{\acknowledgmentsname}% #1% } \newdimen\bibindent \setlength\bibindent{1.5em} \newenvironment{thebibliography}[1] {% \makeatletter% \iftoggle{@noarxiv}{}{% \ltx@ifpackageloaded{natbib}{}{% \ltx@ifpackageloaded{biblatex}{ \ClassWarning{quantumarticle}{Unfortunately quantumarticle cannot recommend the use of BibLaTeX due to incompatibilities between locally installed versions of BibLaTeX and the version used by the arXiv.}% }{% \ClassWarning{quantumarticle}{The quantumarticle class recommends generating the bibliography from a BibTeX file containing DOIs with natbib in order to ensure the generation of DOI hyperlinks}% }% }% }% \makeatother% \section*{\refname}% \@mkboth{\MakeUppercase\refname}{\MakeUppercase\refname}% \list{\@biblabel{\@arabic\c@enumiv}}% {\settowidth\labelwidth{\@biblabel{#1}}% \leftmargin\labelwidth \advance\leftmargin\labelsep \@openbib@code \usecounter{enumiv}% \let\p@enumiv\@empty \renewcommand*\theenumiv{\@arabic\c@enumiv}}% \sloppy \clubpenalty4000 \@clubpenalty \clubpenalty \widowpenalty4000% \sfcode`\.\@m \setlength{\itemsep}{0pt plus 0.3ex} } {\def\@noitemerr {\@latex@warning{Empty `thebibliography' environment}}% \endlist} \newcommand\newblock{\hskip .11em\@plus.33em\@minus.07em} \let\@openbib@code\@empty \newenvironment{theindex}{% \ifbool{@twocolumn}{\togglefalse{@restonecol}}{\toggletrue{@restonecol}} \twocolumn[\section*{\indexname}]% \@mkboth{\MakeUppercase\indexname}% {\MakeUppercase\indexname}% \thispagestyle{fancy}\parindent\z@ \parskip\z@ \@plus .3\p@\relax \columnseprule \z@ \columnsep 35\p@ \let\item\@idxitem% } { \iftoggle{@restonecol} {\onecolumn} {\clearpage} } \newcommand\@idxitem{\par\hangindent 40\p@} \newcommand\subitem{\@idxitem \hspace*{20\p@}} \newcommand\subsubitem{\@idxitem \hspace*{30\p@}} \newcommand\indexspace{\par \vskip 10\p@ \@plus5\p@ \@minus3\p@\relax} \renewcommand*\footnoterule{% \kern-3\p@ \hrule\@width.4\columnwidth \kern2.6\p@} \newcommand*\@makefntext[1]{% \parindent 1em% \noindent \hb@xt@1.8em{\hss\@makefnmark}#1} \newcommand*\contentsname{Contents} \newcommand*\listfigurename{List of Figures} \newcommand*\listtablename{List of Tables} \newcommand*\refname{References} \newcommand*\indexname{Index} \newcommand*\figurename{Figure} \newcommand*\tablename{Table} \newcommand*\partname{Part} \newcommand*\appendixname{Appendix} \newcommand*\abstractname{Abstract} \def\today{\ifcase\month\or January\or February\or March\or April\or May\or June\or July\or August\or September\or October\or November\or December\fi \space\number\day, \number\year} \setlength\columnsep{20\p@} \setlength\columnseprule{0\p@} \setlength{\footnotesep}{\baselineskip} \RequirePackage{fancyhdr} \@blacklistpackage{fancyhdr} \pagestyle{fancy} \renewcommand{\headrule}{} \renewcommand{\footrule}{\vbox to 0pt{\hbox to\headwidth{\color{quantumgray}\leaders\hrule\hfil}\vss}} \fancyhf{} \iftoggle{@accepted} {\fancyfoot[R]{\sffamily\iftoggle{@unpublished}{\thepage}{\textcolor{quantumviolet}{\thepage}}}} {\fancyfoot[C]{\sffamily\iftoggle{@unpublished}{\thepage}{\textcolor{quantumviolet}{\thepage}}}} % validate the date format to be YYYY-MM-DD \AtBeginDocument{ \ifcsdef{@accepteddate} {% \iftoggle{@xstring} {% \RequirePackage{xstring} \def\@dateerror{\ClassError{quantumarticle}{The date in the accepted option must be given in the format YYYY-MM-DD}{}} % test that we have two -s \IfSubStr[2]{\@accepteddate}{-}{}{\@dateerror} \IfSubStr[3]{\@accepteddate}{-}{\@dateerror}{} \StrBefore[1]{\@accepteddate}{-}[\@accepteddateyear] \StrBetween[1,2]{\@accepteddate}{-}{-}[\@accepteddatemonth] \StrBehind[2]{\@accepteddate}{-}[\@accepteddateday] \IfDecimal{\@accepteddateyear}{}{\@dateerror} \IfDecimal{\@accepteddatemonth}{}{\@dateerror} \IfDecimal{\@accepteddateday}{}{\@dateerror} \StrLen{\@accepteddateyear}[\@accepteddateyearlength] \StrLen{\@accepteddatemonth}[\@accepteddatemonthlength] \StrLen{\@accepteddateday}[\@accepteddatedaylength] \ifnumcomp{\@accepteddateyearlength}{>}{3}{}{\@dateerror} \ifnumcomp{\@accepteddatemonthlength}{=}{2}{}{\@dateerror} \ifnumcomp{\@accepteddatedaylength}{=}{2}{}{\@dateerror}% } {} } {} } \iftoggle{@accepted} {\fancyfoot[L]{\usebox{\@quantumacceptedbox}}} {\fancyfoot[L]{}} \pagenumbering{arabic} \ifbool{@twoside}{}{\raggedbottom} \ifbool{@twocolumn}{ \twocolumn \sloppy \flushbottom }{ \onecolumn } %the following is mostly taken from revtex4-1 (see https://www.ctan.org/pkg/revtex4-1) \ifbool{@twocolumn}{ \newbox\widetext@top \newbox\widetext@bot \newenvironment{widetext}{% \par\ignorespaces \setbox\widetext@top\vbox{% \hb@xt@\hsize{% {\color{quantumgray}% \leaders\hrule\hfil \vrule\@height6\p@} }% }% \setbox\widetext@bot\hb@xt@\hsize{% {\color{quantumgray}% \vrule\@depth6\p@ \leaders\hrule\hfil} }% \onecolumngrid \vskip10\p@ \dimen@\ht\widetext@top\advance\dimen@\dp\widetext@top \cleaders\box\widetext@top\vskip\dimen@ \vskip6\p@ \prep@math@patch }{% \par \vskip6\p@ \setbox\widetext@bot\vbox{% \hb@xt@\hsize{\hfil\box\widetext@bot}% }% \dimen@\ht\widetext@bot\advance\dimen@\dp\widetext@bot \cleaders\box\widetext@bot\vskip\dimen@ \vskip8.5\p@ \twocolumngrid\global\booltrue{@ignore} \booltrue{@endpe} }% }{ \newenvironment{widetext}{}{} } %title \def\@printtitle{% {% \iftoggle{@unpublished}% {% \@printtitletextwithappropriatefontsize% }% {% \edef\@titleexpanded{\detokenize\expandafter{\@title}}% \iftoggle{@xstring}% {\saveexploremode\exploregroups\StrSubstitute{\@titleexpanded}{ }{\%20}[\@titleforurl]\restoreexploremode}% {\gdef\@titleforurl{\@titleexpanded}}% \href{https://quantum-journal.org/?s=\@titleforurl\&reason=title-click}{% \color{quantumviolet}{% \@printtitletextwithappropriatefontsize\unskip% }% }% }% }% } % In the macro below we compute the appropriate font size of the title. % We use \Huge if the title fits on one line and \huge if it extends over more % than one line in font size \Huge \def\@titleatfontsize#1{% #1% \begingroup% \raggedright% \iftoggle{@allowfontchangeintitle} {} {% \def\selectfont{\ClassError{quantumarticle}{When submitting to Quantum, you are not supposed to use \string\textbf{}, \string\bf, \string\textit{} or other font formating commands inside \string\title{}. Please remove all such commands from your \string\title{}. If you really have to change the font for some part of the title you can turn off this error by giving the option allowfontchangeintitle}{}}%solution from https://tex.stackexchange.com/questions/347596/disallowing-textbf-it-sffamily-in-argument-of-macro-or-environment }% \@title% \endgroup% }% \def\@printtitletextwithappropriatefontsize{% \newsavebox{\@titelsaveboxHuge}% \savebox{\@titelsaveboxHuge}{% \parbox[b]{\linewidth}{% \@titleatfontsize{\Huge}% }% }% \newsavebox{\@titelsaveboxHugeoneline}% \savebox{\@titelsaveboxHugeoneline}{% \@titleatfontsize{\Huge}% }% \newsavebox{\@titelsaveboxhhuge}% \savebox{\@titelsaveboxhhuge}{% \parbox[b]{\linewidth}{% \@titleatfontsize{\huge}% }% }% \ifdimgreater{\ht\@titelsaveboxHuge}{\ht\@titelsaveboxHugeoneline} {\@titleatfontsize{\huge}%\usebox{\@titelsaveboxhhuge}% using huge because \the\ht\@titelsaveboxHuge{} is larger than \the\ht\@titelsaveboxHugeoneline{} } {\@titleatfontsize{\Huge}% using Huge because \the\ht\@titelsaveboxHuge{} is not larger than \the\ht\@titelsaveboxHugeoneline{} } } %renew \title to allow for and ignore an optional argument \renewcommand{\title}[2][]{\gdef\@title{#2}} % author handling \newcounter{@authorcounter} \csdef{@authors}{} \renewcommand{\author}[2][]{% \ifstrempty{#1}{% \internal@author{#2}% }{% \internal@elseauthor{#1}{#2} }% \csdef{@authorname\the@authorcounter}{#2}% \def\@currentauthornumber{\the@authorcounter}% }% \def\addauthortolabel#1#2{% \ifcsdef{authorswithlabel#2}{}{\csdef{authorswithlabel#2}{}}% \listcsxadd{authorswithlabel#2}{#1}}% \def\internal@elseauthor#1#2{% \stepcounter{@authorcounter} \ifcsdef{@authors}{}{\csdef{@authors}{}}% \listadd{\@authors}{#2}% \forcsvlist{\addauthortolabel{\the@authorcounter}}{#1}% \ifbool{@startnewauthorgroup}{\csundef{@authorgroup}}{}% \ifcsdef{@authorgroup}{}{\csdef{@authorgroup}{}}% \listxadd{\@authorgroup}{\the@authorcounter}% \boolfalse{@startnewauthorgroup}% }% \def\internal@author#1{% \stepcounter{@authorcounter} \ifcsdef{@authors}{}{\csdef{@authors}{}}% \listadd{\@authors}{#1}% \ifbool{@startnewauthorgroup}{\csundef{@authorgroup}}{} \ifcsdef{@authorgroup}{}{\csdef{@authorgroup}{}}% \listxadd{\@authorgroup}{\the@authorcounter} \boolfalse{@startnewauthorgroup} } \def\@@spaceafter#1{#1 } \def\@@@comma{\def\@@@comma{,}} \def\@@commaspacebefore#1{\@@@comma{}#1} \def\@printauthor#1#2{\def\footnote{\ClassError{quantumarticle}{You must not put a \string\footnote{} command inside the argument of \string\author}{}}\mbox{\ifcsdef{author#1orcid}{\href{https://orcid.org/\csname author#1orcid\endcsname}{\color{black}#2}}{#2}}\ifnumcomp{\the@affiliationcounter}{>}{1}{\textsuperscript{\forlistcsloop{\@@commaspacebefore}{author#1affiliations}\unskip}}{}\ifnumcomp{#1}{<}{\the@authorcounter-1}{, }{\ifnumcomp{#1}{=}{\the@authorcounter-1}{\ifnumcomp{#1}{=}{1}{ and }{, and }}{}}} \def\@printauthors{% \newcounter{@authornum}% \large\forlistloop{\stepcounter{@authornum}% \ifcsdef{author\the@authornum hasextras}{% \insert\footins{\footnotesize% % \interlinepenalty\interfootnotelinepenalty % \splittopskip\footnotesep % \splitmaxdepth \dp\strutbox \floatingpenalty \@MM \iftoggle{@titlepage} {\hsize\dimexpr \linewidth\relax \@parboxrestore}% {\ifbool{@twocolumn} {\hsize\dimexpr 0.5\linewidth-0.5\columnsep\relax \@parboxrestore} {\hsize\dimexpr \linewidth\relax \@parboxrestore}% } % \flushleft% % \baselineskip=0pt% \@printauthorextrainfo{\the@authornum}\vspace{0.5\baselineskip}% }}{}% \@printauthor\the@authornum}{\@authors}% } \def\@@addcommabetween#1{#1, }%this adds an ugly extra comma at the end but the variant below is not expandable and therefore leads to ugly warnings: https://tex.stackexchange.com/questions/50978/macro-to-extract-typeset-plain-text-from-a-command %\def\@@addcommabetween#1{\ifdef{\firstauthoronly}{, }{\def\firstauthoronly{\empty}}#1} \def\@authorsonly{\forlistloop{\@@addcommabetween}{\@authors}} % affiliation handling \newbool{@startnewauthorgroup} \newcounter{@affiliationcounter} \def\@addaffiliation#1#2{ \ifcsdef{author#2affiliations}{}{\csdef{author#2affiliations}{}}% \listcsgadd{author#2affiliations}{#1} } \newcommand{\address}[2][]{\affiliation[#1]{#2}} %for compatibility with authblk \@blacklistpackage{authblk} \newcommand{\affil}[2][]{ \affiliation[#1]{#2}} \newcommand{\affiliation}[2][]{% \ifstrempty{#1}{% \internal@affiliation{#2}% }{% \elseinternal@affiliation{#1}{#2} }}% \def\elseinternal@affiliation#1#2{% \booltrue{@startnewauthorgroup} \ifcsdef{affiliations}{}{\csdef{affiliations}{}}% \expandafter\def\csname\detokenize{#2}\endcsname{#2}% \stepcounter{@affiliationcounter}% \listxadd{\affiliations}{\detokenize{#2}}% \csxdef{affiliation\detokenize{#2}number}{\the@affiliationcounter{}}% \ifcsdef{authorswithlabel#1}{% \forlistcsloop{\@addaffiliation{\csname affiliation\detokenize{#2}number\endcsname}}{authorswithlabel#1}% }{}% } \def\internal@affiliation#1{% \booltrue{@startnewauthorgroup} \ifcsdef{affiliations}{}{\csdef{affiliations}{}}% \expandafter\def\csname\detokenize{#1}\endcsname{#1} %to handle special characters such as \'a and \l we create a macro whose name is the detokenized version of #1 and that expands to #1 and later call it in \@printaffiliation \xifinlist{\detokenize{#1}}{\affiliations}{}{\stepcounter{@affiliationcounter}\listxadd{\affiliations}{\detokenize{#1}}\csxdef{affiliation\detokenize{#1}number}{\the@affiliationcounter{}}}% \forlistloop{\@addaffiliation{\csname affiliation\detokenize{#1}number\endcsname}}{\@authorgroup}% } \def\@printaffiliation#1#2{\ifnumcomp{\the@affiliationcounter}{>}{1}{\llap{\textsuperscript{#1}}}{}\csname #2\endcsname\ifnumcomp{#1}{<}{\the@affiliationcounter}{\newline}{}} \def\@printaffiliations{% \ifcsdef{affiliations}{}{\csdef{affiliations}{}}% \newcounter{@affiliationnum}% \ifnumcomp{\the@affiliationcounter}{>}{1}{% \settowidth{\leftskip}{\footnotesize\textsuperscript{\the@affiliationcounter}}% }{}% {\footnotesize\color{quantumgray}% \forlistloop{\stepcounter{@affiliationnum}\@printaffiliation\the@affiliationnum}{\affiliations}}% } %collaboration and altaffiliation \newcommand{\collaboration}[1]{\author{#1}} \newcommand{\altaffiliation}[2][]{\affiliation{#1#2}} % email, homepage, and thanks handling % be careful - this section is highly sensitive to the positioning of the % marks \def\@printauthorextrainfo#1{ \csname @authorname#1\endcsname: \ifcsdef{author#1emails} {% \forlistcsloop{\@@spaceafter}{author#1emails}% } {}% \ifcsdef{author#1homepages} {% \ifcsdef{author#1emails} {\unskip, } {}% \forlistcsloop{\@@spaceafter}{author#1homepages}% } {}% \ifcsdef{author#1thanks} {% \ifcsdef{author#1emails} {% \ifcsdef{author#1homepages} {\unskip, } {\unskip, }% } {% \ifcsdef{author#1homepages} {\unskip, } {}% }% \forlistcsloop{\@@spaceafter}{author#1thanks}% } {}% } \newcommand{\email}[2][]{% \ifcsdef{@currentauthornumber}{}{\ClassError{quantumarticle}{\string\email{} may only appear after the first \string\author{} command}{}} \@email{#1}{\href{mailto:#2}{#2}}} \newcommand{\homepage}[2][]{% \ifcsdef{@currentauthornumber}{}{\ClassError{quantumarticle}{\string\homepage{} may only appear after the first \string\author{} command}{}} \@homepage{#1}{\href{#2}{#2}}} \renewcommand{\thanks}[2][]{% \ifcsdef{@currentauthornumber}references.bib972 B
@book{nielsen2010quantum, author = {Nielsen, Michael A. and Chuang, Isaac L.}, title = {Quantum Computation and Quantum Information}, edition = {10th Anniversary}, publisher = {Cambridge University Press}, year = {2010}, doi = {10.1017/CBO9780511976667} } @article{preskill2018nisq, author = {Preskill, John}, title = {Quantum Computing in the {NISQ} era and beyond}, journal = {Quantum}, volume = {2}, pages = {79}, year = {2018}, doi = {10.22331/q-2018-08-06-79} } @article{cerezo2021variational, author = {Cerezo, M. and Arrasmith, Andrew and Babbush, Ryan and Benjamin, Simon C. and Endo, Suguru and Fujii, Keisuke and McClean, Jarrod R. and Mitarai, Kosuke and Yuan, Xiao and Cincio, Lukasz and Coles, Patrick J.}, title = {Variational quantum algorithms}, journal = {Nature Reviews Physics}, volume = {3}, pages = {625--644}, year = {2021}, doi = {10.1038/s42254-021-00348-9} }main.pdfprebuilt · 276 KBReplaced by the first recompile.
Binary file, seeded as-is.
main.synctex.gzprebuilt · 18 KBReplaced by the first recompile.
Binary file, seeded as-is.