Commit 0660017b authored by Victor-M-Gomes's avatar Victor-M-Gomes

Change exo1 module 2

parent 579d405a
# -*- mode: org -*-
# -*- coding: utf-8 -*-
#+STARTUP: overview indent inlineimages logdrawer
#+TITLE: Journal
#+AUTHOR: Victor Martins Gomes
#+LANGUAGE: en
#+TAGS: LIG(L) HOME(H) Europe(E) Blog(B) noexport(n) Stats(S)
#+TAGS: Epistemology(E) Vulgarization(V) Teaching(T) R(R) OrgMode(O) Python(P)
#+EXPORT_SELECT_TAGS: Blog
#+OPTIONS: H:3 num:t toc:t \n:nil @:t ::t |:t ^:t -:t f:t *:t <:t
#+OPTIONS: TeX:t LaTeX:nil skip:nil d:nil todo:t pri:nil tags:not-in-toc
#+EXPORT_SELECT_TAGS: export
#+EXPORT_EXCLUDE_TAGS: noexport
#+COLUMNS: %25ITEM %TODO %3PRIORITY %TAGS
#+SEQ_TODO: TODO(t!) STARTED(s!) WAITING(w@) APPT(a!) | DONE(d!) CANCELLED(c!) DEFERRED(f!)
* 2018
** 2018-02 March
*** 2018-02-12 Monday
**** Demonstrating Emacs/Orgmode shortcuts
These informations were gathered and first demonstrated in my [[https://github.com/alegrand/RR_webinars/blob/master/1_replicable_article_laboratory_notebook/index.org][First
webinar on reproducible research: litterate programming]].
***** Emacs shortcuts
Here are a few convenient emacs shortcuts for those that have never
used emacs. In all of the emacs shortcuts, =C=Ctrl=, =M=Alt/Esc or Cmd with MacOs= and
=S=Shift=. Note that you may want to use two hours to follow the emacs
tutorial (=C-h t=). In the configuration file CUA keys have been
activated and allow you to use classical copy/paste (=C-c/C-v=)
shortcuts. This can be changed from the Options menu.
- =C-x C-c= exit
- =C-x C-s= save buffer
- =C-g= panic mode ;) type this whenever you want to exit an awful
series of shortcuts
- =C-Space= start selection marker although selection with shift and
arrows should work as well
- =C-l= reposition the screen
- =C-_= (or =C-z= if CUA keys have been activated)
- =C-s= search
- =M-%= replace
- =C-x C-h= get the list of emacs shortcuts
- =C-c C-h= get the list of emacs shortcuts considering the mode you are
currently using (e.g., C, Lisp, org, ...)
- With the "/reproducible research/" emacs configuration, ~C-x g~ allows
you to invoke [[https://magit.vc/][Magit]] (provided you installed it beforehand!) which
is a nice git interface for Emacs.
There are a bunch of cheatsheets also available out there (e.g.,
[[http://www.shortcutworld.com/en/linux/Emacs_23.2.1.html][this one for emacs]] and [[http://orgmode.org/orgcard.txt][this one for org-mode]] or this [[http://sachachua.com/blog/wp-content/uploads/2013/05/How-to-Learn-Emacs-v2-Large.png][graphical one]]).
***** Org-mode
Many emacs shortcuts start by =C-x=. Org-mode's shortcuts generaly
start with =C-c=.
- =Tab= fold/unfold
- =C-c c= capture (finish capturing with =C-c C-c=, this is explained on
the top of the buffer that just opened)
- =C-c C-c= do something useful here (tag, execute, ...)
- =C-c C-o= open link
- =C-c C-t= switch todo
- =C-c C-e= export
- =M-Enter= new item/section
- =C-c a= agenda (try the =L= option)
- =C-c C-a= attach files
- =C-c C-d= set a deadl1ine (use =S-arrows= to navigate in the dates)
- =A-arrows= move subtree (add shift for the whole subtree)
***** Org-mode Babel (for literate programming)
- =<s + tab= template for source bloc. You can easily adapt it to get
this:
#+BEGIN_EXAMPLE
#+begin_src shell
ls
#+end_src
#+END_EXAMPLE
Now if you =C-c C-c=, it will execute the block.
#+BEGIN_EXAMPLE
#+RESULTS:
| #journal.org# |
| journal.html |
| journal.org |
| journal.org~ |
#+END_EXAMPLE
- Source blocks have many options (formatting, arguments, names,
sessions,...), which is why I have my own shortcuts =<b + tab= bash
block (or =B= for sessions).
#+BEGIN_EXAMPLE
#+begin_src shell :results output :exports both
ls /tmp/*201*.pdf
#+end_src
#+RESULTS:
: /tmp/2015_02_bordeaux_otl_tutorial.pdf
: /tmp/2015-ASPLOS.pdf
: /tmp/2015-Europar-Threadmap.pdf
: /tmp/europar2016-1.pdf
: /tmp/europar2016.pdf
: /tmp/M2-PDES-planning-examens-janvier2016.pdf
#+END_EXAMPLE
- I have defined many such templates in my configuration. You can
give a try to =<r=, =<R=, =<RR=, =<g=, =<p=, =<P=, =<m= ...
- Some of these templates are not specific to babel: e.g., =<h=, =<l=,
=<L=, =<c=, =<e=, ...
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2020-04-13 lun. 22:23 -->
<!-- 2020-04-27 lun. 20:01 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Your title</title>
<title>On the computation of pi</title>
<meta name="generator" content="Org mode" />
<meta name="author" content="Victor Martins Gomes" />
<style type="text/css">
......@@ -195,12 +194,6 @@
.org-svg { width: 90%; }
/*]]>*/-->
</style>
<link rel="stylesheet" type="text/css" href="http://www.pirilampo.org/styles/readtheorg/css/htmlize.css"/>
<link rel="stylesheet" type="text/css" href="http://www.pirilampo.org/styles/readtheorg/css/readtheorg.css"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<script type="text/javascript" src="http://www.pirilampo.org/styles/lib/js/jquery.stickytableheaders.js"></script>
<script type="text/javascript" src="http://www.pirilampo.org/styles/readtheorg/js/readtheorg.js"></script>
<script type="text/javascript">
// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&amp;dn=gpl-3.0.txt GPL-v3-or-Later
<!--/*--><![CDATA[/*><!--*/
......@@ -225,123 +218,93 @@
/*]]>*///-->
// @license-end
</script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
displayAlign: "center",
displayIndent: "0em",
"HTML-CSS": { scale: 100,
linebreaks: { automatic: "false" },
webFont: "TeX"
},
SVG: {scale: 100,
linebreaks: { automatic: "false" },
font: "TeX"},
NativeMML: {scale: 100},
TeX: { equationNumbers: {autoNumber: "AMS"},
MultLineWidth: "85%",
TagSide: "right",
TagIndent: ".8em"
}
});
</script>
<script type="text/javascript"
src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS_HTML"></script>
</head>
<body>
<div id="content">
<h1 class="title">Your title</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#orgf71d7d2">1. Some explanations</a></li>
</ul>
</div>
</div>
<div id="outline-container-orgf71d7d2" class="outline-2">
<h2 id="orgf71d7d2"><span class="section-number-2">1</span> Some explanations</h2>
<div class="outline-text-2" id="text-1">
<p>
This is an org-mode document with code examples in Python. Once opened in
Emacs, this document can easily be exported to HTML, PDF, and Office
formats. For more information on org-mode, see
<a href="https://orgmode.org/guide/">https://orgmode.org/guide/</a>.
</p>
<p>
When you type the shortcut <code>C-c C-e h o</code>, this document will be
exported as HTML. All the code in it will be re-executed, and the
results will be retrieved and included into the exported document. If
you do not want to re-execute all code each time, you can delete the #
and the space before <code>#+PROPERTY:</code> in the header of this document.
</p>
<p>
Like we showed in the video, Python code is included as follows (and
is exxecuted by typing <code>C-c C-c</code>):
</p>
<div class="org-src-container">
<pre class="src src-python"><span style="color: #51afef;">print</span>(<span style="color: #98be65;">"Hello world!"</span>)
</pre>
</div>
<pre class="example">
Hello world!
</pre>
<h1 class="title">On the computation of pi</h1>
<ol class="org-ol">
<li>Asking the math library
My computer tells me that &pi; is approximatively
#begin<sub>src</sub> python :results output :exports both
from math import *
pi
#end<sub>src</sub></li>
<p>
And now the same but in an Python session. With a session, Python&rsquo;s
state, i.e. the values of all the variables, remains persistent from
one code block to the next. The code is still executed using <code>C-c
C-c</code>.
<li>* Buffon&rsquo;s needle
Applying the method of <a href="https://en.wikipedia.org/wiki/Buffon%27s_needle_problem">Buffon&rsquo;s needle</a>, we get the <b>approximation</b>
#begin<sub>src</sub> python :results output :exports both
import numpy as np
np.random.seed(seed=42)
N = 10000
x = np.random.uniform(size=N, low=0, high=1)
theta = np.random.uniform(size=N, low)0, high=pi/2)
2/(sum((x+np.sin(theta))&gt;1)/N)
#end<sub>src</sub></li>
<li><p>
Using a surface fraction argument
A method that is easier to understand and does not make use of the <code>sin</code> function is based on the fact that if \(X \approx U(0,1)\) and \(Y \approx U(0,1)\), then \(P[X^2 + Y^2 \leq 1] = \pi/4\) (see <a href="https://en.wikipedia.org/wiki/Monte_Carlo_method">&ldquo;Monte Carlo method on Wikipedia&rdquo;</a>). The following code uses this approach:
#begin<sub>src</sub> python :results output :exports both
import matplotlib.pyplot as plt
</p>
<div class="org-src-container">
<pre class="src src-python"><span style="color: #51afef;">import</span> numpy
<span style="color: #dcaeea;">x</span>=numpy.linspace(-<span style="color: #da8548; font-weight: bold;">15</span>,<span style="color: #da8548; font-weight: bold;">15</span>)
<span style="color: #51afef;">print</span>(x)
</pre>
</div>
<pre class="example">
[-15. -14.3877551 -13.7755102 -13.16326531 -12.55102041
-11.93877551 -11.32653061 -10.71428571 -10.10204082 -9.48979592
-8.87755102 -8.26530612 -7.65306122 -7.04081633 -6.42857143
-5.81632653 -5.20408163 -4.59183673 -3.97959184 -3.36734694
-2.75510204 -2.14285714 -1.53061224 -0.91836735 -0.30612245
0.30612245 0.91836735 1.53061224 2.14285714 2.75510204
3.36734694 3.97959184 4.59183673 5.20408163 5.81632653
6.42857143 7.04081633 7.65306122 8.26530612 8.87755102
9.48979592 10.10204082 10.71428571 11.32653061 11.93877551
12.55102041 13.16326531 13.7755102 14.3877551 15. ]
</pre>
<p>
Finally, an example for graphical output:
</p>
<p>
<img src="./cosxsx.png" alt="cosxsx.png" />
File &ldquo;&lt;stdin&gt;&rdquo;, line 1, in &lt;module&gt;
File &ldquo;/tmp/babel-vQxa6K/python-Wy3IOy&rdquo;, line 2, in &lt;module&gt;
import matplotlib.pyplot as plt
ModuleNotFoundError: No module named &rsquo;matplotlib&rsquo;]]
np.random.seed(seed=42)
N = 1000
x = np.random.uniform(size=N, low=0, high=1)
y = np.random.uniform(size=N, low=0, high=1)
</p>
<p>
Note the parameter <code>:exports results</code>, which indicates that the code
will not appear in the exported document. We recommend that in the
context of this MOOC, you always leave this parameter setting as
<code>:exports both</code>, because we want your analyses to be perfectly
transparent and reproducible.
accept = (x*x+y*y) &lt;= 1
reject = np.logical<sub>not</sub>(accept)
</p>
<p>
Watch out: the figure generated by the code block is <i>not</i> stored in
the org document. It&rsquo;s a plain file, here named <code>cosxsx.png</code>. You have
to commit it explicitly if you want your analysis to be legible and
understandable on GitLab.
fig, ax = plt.subplots(1)
ax.scatter(x[accept], y[accept], c=&rsquo;b&rsquo;, alpha=0.2, edgecolor=None)
ax.scatter(x[reject], y[reject], c=&rsquo;r&rsquo;, alpha=0.2, edgecolor=None)
ax.set<sub>aspect</sub>(&rsquo;equal&rsquo;)
</p>
<p>
Finally, don&rsquo;t forget that we provide in the resource section of this
MOOC a configuration with a few keyboard shortcuts that allow you to
quickly create code blocks in Python by typing <code>&lt;p</code>, <code>&lt;P</code> or <code>&lt;PP</code>
followed by <code>Tab</code>.
plt.savefig(matplot<sub>lib</sub><sub>filename</sub>)
print(matplot<sub>lib</sub><sub>filename</sub>)
#end<sub>src</sub>
</p>
<p>
Now it&rsquo;s your turn! You can delete all this information and replace it
by your computational document.
</p>
</div>
</div>
It is then straightforward to obtain a (not really good) approximation to &pi; by counting how many times, on average, \(X^2 + Y^2\) is smaller than 1:
#begin<sub>src</sub> python :results output :exports both
4*np.mean(accept)
#end<sub>src</sub>
</p></li>
</ol>
</div>
<div id="postamble" class="status">
<p class="date">Date: 2020-04-13 lun. 00:00</p>
<p class="author">Author: Victor Martins Gomes</p>
<p class="date">Created: 2020-04-13 lun. 22:23</p>
<p class="date">Created: 2020-04-27 lun. 20:01</p>
</div>
</body>
</html>
#+TITLE: Your title
#+AUTHOR: Victor Martins Gomes
#+DATE: <2020-04-13 lun.>
#+TITLE: On the computation of pi
#+LANGUAGE: en
# #+PROPERTY: header-args :eval never-export
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="http://www.pirilampo.org/styles/readtheorg/css/htmlize.css"/>
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="http://www.pirilampo.org/styles/readtheorg/css/readtheorg.css"/>
#+HTML_HEAD: <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
#+HTML_HEAD: <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="http://www.pirilampo.org/styles/lib/js/jquery.stickytableheaders.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="http://www.pirilampo.org/styles/readtheorg/js/readtheorg.js"></script>
* Some explanations
This is an org-mode document with code examples in Python. Once opened in
Emacs, this document can easily be exported to HTML, PDF, and Office
formats. For more information on org-mode, see
https://orgmode.org/guide/.
When you type the shortcut =C-c C-e h o=, this document will be
exported as HTML. All the code in it will be re-executed, and the
results will be retrieved and included into the exported document. If
you do not want to re-execute all code each time, you can delete the #
and the space before ~#+PROPERTY:~ in the header of this document.
Like we showed in the video, Python code is included as follows (and
is exxecuted by typing ~C-c C-c~):
#+begin_src python :results output :exports both
print("Hello world!")
#+end_src
#+RESULTS:
: Hello world!
And now the same but in an Python session. With a session, Python's
state, i.e. the values of all the variables, remains persistent from
one code block to the next. The code is still executed using ~C-c
C-c~.
#+begin_src python :results output :session :exports both
import numpy
x=numpy.linspace(-15,15)
print(x)
#+end_src
#+RESULTS:
#+begin_example
[-15. -14.3877551 -13.7755102 -13.16326531 -12.55102041
-11.93877551 -11.32653061 -10.71428571 -10.10204082 -9.48979592
-8.87755102 -8.26530612 -7.65306122 -7.04081633 -6.42857143
-5.81632653 -5.20408163 -4.59183673 -3.97959184 -3.36734694
-2.75510204 -2.14285714 -1.53061224 -0.91836735 -0.30612245
0.30612245 0.91836735 1.53061224 2.14285714 2.75510204
3.36734694 3.97959184 4.59183673 5.20408163 5.81632653
6.42857143 7.04081633 7.65306122 8.26530612 8.87755102
9.48979592 10.10204082 10.71428571 11.32653061 11.93877551
12.55102041 13.16326531 13.7755102 14.3877551 15. ]
#+end_example
Finally, an example for graphical output:
#+begin_src python :results output file :session :var matplot_lib_filename="./cosxsx.png" :exports results
import matplotlib.pyplot as plt
plt.figure(figsize=(10,5))
plt.plot(x,numpy.cos(x)/x)
plt.tight_layout()
plt.savefig(matplot_lib_filename)
print(matplot_lib_filename)
#+end_src
#+RESULTS:
[[file:./cosxsx.png]]
Note the parameter ~:exports results~, which indicates that the code
will not appear in the exported document. We recommend that in the
context of this MOOC, you always leave this parameter setting as
~:exports both~, because we want your analyses to be perfectly
transparent and reproducible.
Watch out: the figure generated by the code block is /not/ stored in
the org document. It's a plain file, here named ~cosxsx.png~. You have
to commit it explicitly if you want your analysis to be legible and
understandable on GitLab.
Finally, don't forget that we provide in the resource section of this
MOOC a configuration with a few keyboard shortcuts that allow you to
quickly create code blocks in Python by typing ~<p~, ~<P~ or ~<PP~
followed by ~Tab~.
Now it's your turn! You can delete all this information and replace it
by your computational document.
1. Asking the math library
My computer tells me that \pi is approximatively
#begin_src python :results output :exports both
from math import *
pi
#end_src
2. * Buffon's needle
Applying the method of [[https://en.wikipedia.org/wiki/Buffon%27s_needle_problem][Buffon's needle]], we get the *approximation*
#begin_src python :results output :exports both
import numpy as np
np.random.seed(seed=42)
N = 10000
x = np.random.uniform(size=N, low=0, high=1)
theta = np.random.uniform(size=N, low)0, high=pi/2)
2/(sum((x+np.sin(theta))>1)/N)
#end_src
3. Using a surface fraction argument
A method that is easier to understand and does not make use of the =sin= function is based on the fact that if $X \approx U(0,1)$ and $Y \approx U(0,1)$, then $P[X^2 + Y^2 \leq 1] = \pi/4$ (see [[https://en.wikipedia.org/wiki/Monte_Carlo_method]["Monte Carlo method on Wikipedia"]]). The following code uses this approach:
#begin_src python :results output :exports both
import matplotlib.pyplot as plt
np.random.seed(seed=42)
N = 1000
x = np.random.uniform(size=N, low=0, high=1)
y = np.random.uniform(size=N, low=0, high=1)
accept = (x*x+y*y) <= 1
reject = np.logical_not(accept)
fig, ax = plt.subplots(1)
ax.scatter(x[accept], y[accept], c='b', alpha=0.2, edgecolor=None)
ax.scatter(x[reject], y[reject], c='r', alpha=0.2, edgecolor=None)
ax.set_aspect('equal')
plt.savefig(matplot_lib_filename)
print(matplot_lib_filename)
#end_src
It is then straightforward to obtain a (not really good) approximation to \pi by counting how many times, on average, $X^2 + Y^2$ is smaller than 1:
#begin_src python :results output :exports both
4*np.mean(accept)
#end_src
%%
%% IEEEtran.bst
%% BibTeX Bibliography Style file for IEEE Journals and Conferences (unsorted)
%% Version 1.14 (2015/08/26)
%%
%% Copyright (c) 2003-2015 Michael Shell
%%
%% Original starting code base and algorithms obtained from the output of
%% Patrick W. Daly's makebst package as well as from prior versions of
%% IEEE BibTeX styles:
%%
%% 1. Howard Trickey and Oren Patashnik's ieeetr.bst (1985/1988)
%% 2. Silvano Balemi and Richard H. Roy's IEEEbib.bst (1993)
%%
%% Support sites:
%% http://www.michaelshell.org/tex/ieeetran/
%% http://www.ctan.org/pkg/ieeetran
%% and/or
%% http://www.ieee.org/
%%
%% For use with BibTeX version 0.99a or later
%%
%% This is a numerical citation style.
%%
%%*************************************************************************
%% Legal Notice:
%% This code is offered as-is without any warranty either expressed or
%% implied; without even the implied warranty of MERCHANTABILITY or
%% FITNESS FOR A PARTICULAR PURPOSE!
%% User assumes all risk.
%% In no event shall the IEEE or any contributor to this code be liable for
%% any damages or losses, including, but not limited to, incidental,
%% consequential, or any other damages, resulting from the use or misuse
%% of any information contained here.
%%
%% All comments are the opinions of their respective authors and are not
%% necessarily endorsed by the IEEE.
%%
%% This work is distributed under the LaTeX Project Public License (LPPL)
%% ( http://www.latex-project.org/ ) version 1.3, and may be freely used,
%% distributed and modified. A copy of the LPPL, version 1.3, is included
%% in the base LaTeX documentation of all distributions of LaTeX released
%% 2003/12/01 or later.
%% Retain all contribution notices and credits.
%% ** Modified files should be clearly indicated as such, including **
%% ** renaming them and changing author support contact information. **
%%*************************************************************************
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% DEFAULTS FOR THE CONTROLS OF THE BST STYLE %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% These are the defaults for the user adjustable controls. The values used
% here can be overridden by the user via IEEEtranBSTCTL entry type.
% NOTE: The recommended LaTeX command to invoke a control entry type is:
%
%\makeatletter
%\def\bstctlcite{\@ifnextchar[{\@bstctlcite}{\@bstctlcite[@auxout]}}
%\def\@bstctlcite[#1]#2{\@bsphack
% \@for\@citeb:=#2\do{%
% \edef\@citeb{\expandafter\@firstofone\@citeb}%
% \if@filesw\immediate\write\csname #1\endcsname{\string\citation{\@citeb}}\fi}%
% \@esphack}
%\makeatother
%
% It is called at the start of the document, before the first \cite, like:
% \bstctlcite{IEEEexample:BSTcontrol}
%
% IEEEtran.cls V1.6 and later does provide this command.
% #0 turns off the display of the number for articles.
% #1 enables
FUNCTION {default.is.use.number.for.article} { #1 }
% #0 turns off the display of the paper and type fields in @inproceedings.
% #1 enables
FUNCTION {default.is.use.paper} { #1 }
% #0 turns off the display of urls
% #1 enables
FUNCTION {default.is.use.url} { #1 }
% #0 turns off the forced use of "et al."
% #1 enables
FUNCTION {default.is.forced.et.al} { #0 }
% The maximum number of names that can be present beyond which an "et al."
% usage is forced. Be sure that num.names.shown.with.forced.et.al (below)
% is not greater than this value!
% Note: There are many instances of references in IEEE journals which have
% a very large number of authors as well as instances in which "et al." is
% used profusely.
FUNCTION {default.max.num.names.before.forced.et.al} { #10 }
% The number of names that will be shown with a forced "et al.".
% Must be less than or equal to max.num.names.before.forced.et.al
FUNCTION {default.num.names.shown.with.forced.et.al} { #1 }
% #0 turns off the alternate interword spacing for entries with URLs.
% #1 enables
FUNCTION {default.is.use.alt.interword.spacing} { #1 }
% If alternate interword spacing for entries with URLs is enabled, this is
% the interword spacing stretch factor that will be used. For example, the
% default "4" here means that the interword spacing in entries with URLs can
% stretch to four times normal. Does not have to be an integer. Note that
% the value specified here can be overridden by the user in their LaTeX
% code via a command such as:
% "\providecommand\BIBentryALTinterwordstretchfactor{1.5}" in addition to
% that via the IEEEtranBSTCTL entry type.
FUNCTION {default.ALTinterwordstretchfactor} { "4" }
% #0 turns off the "dashification" of repeated (i.e., identical to those
% of the previous entry) names. The IEEE normally does this.
% #1 enables
FUNCTION {default.is.dash.repeated.names} { #1 }
% The default name format control string.
FUNCTION {default.name.format.string}{ "{f.~}{vv~}{ll}{, jj}" }
% The default LaTeX font command for the names.
FUNCTION {default.name.latex.cmd}{ "" }
% The default URL prefix.
FUNCTION {default.name.url.prefix}{ "[Online]. Available:" }
% Other controls that cannot be accessed via IEEEtranBSTCTL entry type.
% #0 turns off the terminal startup banner/completed message so as to
% operate more quietly.
% #1 enables
FUNCTION {is.print.banners.to.terminal} { #1 }
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% FILE VERSION AND BANNER %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
FUNCTION{bst.file.version} { "1.14" }
FUNCTION{bst.file.date} { "2015/08/26" }
FUNCTION{bst.file.website} { "http://www.michaelshell.org/tex/ieeetran/bibtex/" }
FUNCTION {banner.message}
{ is.print.banners.to.terminal
{ "-- IEEEtran.bst version" " " * bst.file.version *
" (" * bst.file.date * ") " * "by Michael Shell." *
top$
"-- " bst.file.website *
top$
"-- See the " quote$ * "IEEEtran_bst_HOWTO.pdf" * quote$ * " manual for usage information." *
top$
}
{ skip$ }
if$
}
FUNCTION {completed.message}
{ is.print.banners.to.terminal
{ ""
top$
"Done."
top$
}
{ skip$ }
if$
}
%%%%%%%%%%%%%%%%%%%%%%
%% STRING CONSTANTS %%
%%%%%%%%%%%%%%%%%%%%%%
FUNCTION {bbl.and}{ "and" }
FUNCTION {bbl.etal}{ "et~al." }
FUNCTION {bbl.editors}{ "eds." }
FUNCTION {bbl.editor}{ "ed." }
FUNCTION {bbl.edition}{ "ed." }
FUNCTION {bbl.volume}{ "vol." }
FUNCTION {bbl.of}{ "of" }
FUNCTION {bbl.number}{ "no." }
FUNCTION {bbl.in}{ "in" }
FUNCTION {bbl.pages}{ "pp." }
FUNCTION {bbl.page}{ "p." }
FUNCTION {bbl.chapter}{ "ch." }
FUNCTION {bbl.paper}{ "paper" }
FUNCTION {bbl.part}{ "pt." }
FUNCTION {bbl.patent}{ "Patent" }
FUNCTION {bbl.patentUS}{ "U.S." }
FUNCTION {bbl.revision}{ "Rev." }
FUNCTION {bbl.series}{ "ser." }
FUNCTION {bbl.standard}{ "Std." }
FUNCTION {bbl.techrep}{ "Tech. Rep." }
FUNCTION {bbl.mthesis}{ "Master's thesis" }
FUNCTION {bbl.phdthesis}{ "Ph.D. dissertation" }
FUNCTION {bbl.st}{ "st" }
FUNCTION {bbl.nd}{ "nd" }
FUNCTION {bbl.rd}{ "rd" }
FUNCTION {bbl.th}{ "th" }
% This is the LaTeX spacer that is used when a larger than normal space
% is called for (such as just before the address:publisher).
FUNCTION {large.space} { "\hskip 1em plus 0.5em minus 0.4em\relax " }
% The LaTeX code for dashes that are used to represent repeated names.
% Note: Some older IEEE journals used something like
% "\rule{0.275in}{0.5pt}\," which is fairly thick and runs right along
% the baseline. However, the IEEE now uses a thinner, above baseline,
% six dash long sequence.
FUNCTION {repeated.name.dashes} { "------" }
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% PREDEFINED STRING MACROS %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
MACRO {jan} {"Jan."}
MACRO {feb} {"Feb."}
MACRO {mar} {"Mar."}
MACRO {apr} {"Apr."}
MACRO {may} {"May"}
MACRO {jun} {"Jun."}
MACRO {jul} {"Jul."}
MACRO {aug} {"Aug."}
MACRO {sep} {"Sep."}
MACRO {oct} {"Oct."}
MACRO {nov} {"Nov."}
MACRO {dec} {"Dec."}
%%%%%%%%%%%%%%%%%%
%% ENTRY FIELDS %%
%%%%%%%%%%%%%%%%%%
ENTRY
{ address
assignee
author
booktitle
chapter
day
dayfiled
edition
editor
howpublished
institution
intype
journal
key
language
month
monthfiled
nationality
note
number
organization
pages
paper
publisher
school
series
revision
title
type
url
volume
year
yearfiled
CTLuse_article_number
CTLuse_paper
CTLuse_url
CTLuse_forced_etal
CTLmax_names_forced_etal
CTLnames_show_etal
CTLuse_alt_spacing
CTLalt_stretch_factor
CTLdash_repeated_names
CTLname_format_string
CTLname_latex_cmd
CTLname_url_prefix
}
{}
{ label }
%%%%%%%%%%%%%%%%%%%%%%%
%% INTEGER VARIABLES %%
%%%%%%%%%%%%%%%%%%%%%%%
INTEGERS { prev.status.punct this.status.punct punct.std
punct.no punct.comma punct.period
prev.status.space this.status.space space.std
space.no space.normal space.large
prev.status.quote this.status.quote quote.std
quote.no quote.close
prev.status.nline this.status.nline nline.std
nline.no nline.newblock
status.cap cap.std
cap.no cap.yes}
INTEGERS { longest.label.width multiresult nameptr namesleft number.label numnames }
INTEGERS { is.use.number.for.article
is.use.paper
is.use.url
is.forced.et.al
max.num.names.before.forced.et.al
num.names.shown.with.forced.et.al
is.use.alt.interword.spacing
is.dash.repeated.names}
%%%%%%%%%%%%%%%%%%%%%%
%% STRING VARIABLES %%
%%%%%%%%%%%%%%%%%%%%%%
STRINGS { bibinfo
longest.label
oldname
s
t
ALTinterwordstretchfactor
name.format.string
name.latex.cmd
name.url.prefix}
%%%%%%%%%%%%%%%%%%%%%%%%%
%% LOW LEVEL FUNCTIONS %%
%%%%%%%%%%%%%%%%%%%%%%%%%
FUNCTION {initialize.controls}
{ default.is.use.number.for.article 'is.use.number.for.article :=
default.is.use.paper 'is.use.paper :=
default.is.use.url 'is.use.url :=
default.is.forced.et.al 'is.forced.et.al :=
default.max.num.names.before.forced.et.al 'max.num.names.before.forced.et.al :=
default.num.names.shown.with.forced.et.al 'num.names.shown.with.forced.et.al :=
default.is.use.alt.interword.spacing 'is.use.alt.interword.spacing :=
default.is.dash.repeated.names 'is.dash.repeated.names :=
default.ALTinterwordstretchfactor 'ALTinterwordstretchfactor :=
default.name.format.string 'name.format.string :=
default.name.latex.cmd 'name.latex.cmd :=
default.name.url.prefix 'name.url.prefix :=
}
% This IEEEtran.bst features a very powerful and flexible mechanism for
% controlling the capitalization, punctuation, spacing, quotation, and
% newlines of the formatted entry fields. (Note: IEEEtran.bst does not need
% or use the newline/newblock feature, but it has been implemented for
% possible future use.) The output states of IEEEtran.bst consist of
% multiple independent attributes and, as such, can be thought of as being
% vectors, rather than the simple scalar values ("before.all",
% "mid.sentence", etc.) used in most other .bst files.
%
% The more flexible and complex design used here was motivated in part by
% the IEEE's rather unusual bibliography style. For example, the IEEE ends the
% previous field item with a period and large space prior to the publisher
% address; the @electronic entry types use periods as inter-item punctuation
% rather than the commas used by the other entry types; and URLs are never
% followed by periods even though they are the last item in the entry.
% Although it is possible to accommodate these features with the conventional
% output state system, the seemingly endless exceptions make for convoluted,
% unreliable and difficult to maintain code.
%
% IEEEtran.bst's output state system can be easily understood via a simple
% illustration of two most recently formatted entry fields (on the stack):
%
% CURRENT_ITEM
% "PREVIOUS_ITEM
%
% which, in this example, is to eventually appear in the bibliography as:
%
% "PREVIOUS_ITEM," CURRENT_ITEM
%
% It is the job of the output routine to take the previous item off of the
% stack (while leaving the current item at the top of the stack), apply its
% trailing punctuation (including closing quote marks) and spacing, and then
% to write the result to BibTeX's output buffer:
%
% "PREVIOUS_ITEM,"
%
% Punctuation (and spacing) between items is often determined by both of the
% items rather than just the first one. The presence of quotation marks
% further complicates the situation because, in standard English, trailing
% punctuation marks are supposed to be contained within the quotes.
%
% IEEEtran.bst maintains two output state (aka "status") vectors which
% correspond to the previous and current (aka "this") items. Each vector
% consists of several independent attributes which track punctuation,
% spacing, quotation, and newlines. Capitalization status is handled by a
% separate scalar because the format routines, not the output routine,
% handle capitalization and, therefore, there is no need to maintain the
% capitalization attribute for both the "previous" and "this" items.
%
% When a format routine adds a new item, it copies the current output status
% vector to the previous output status vector and (usually) resets the
% current (this) output status vector to a "standard status" vector. Using a
% "standard status" vector in this way allows us to redefine what we mean by
% "standard status" at the start of each entry handler and reuse the same
% format routines under the various inter-item separation schemes. For
% example, the standard status vector for the @book entry type may use
% commas for item separators, while the @electronic type may use periods,
% yet both entry handlers exploit many of the exact same format routines.
%
% Because format routines have write access to the output status vector of
% the previous item, they can override the punctuation choices of the
% previous format routine! Therefore, it becomes trivial to implement rules
% such as "Always use a period and a large space before the publisher." By
% pushing the generation of the closing quote mark to the output routine, we
% avoid all the problems caused by having to close a quote before having all
% the information required to determine what the punctuation should be.
%
% The IEEEtran.bst output state system can easily be expanded if needed.
% For instance, it is easy to add a "space.tie" attribute value if the
% bibliography rules mandate that two items have to be joined with an
% unbreakable space.
FUNCTION {initialize.status.constants}
{ #0 'punct.no :=
#1 'punct.comma :=
#2 'punct.period :=
#0 'space.no :=
#1 'space.normal :=
#2 'space.large :=
#0 'quote.no :=
#1 'quote.close :=
#0 'cap.no :=
#1 'cap.yes :=
#0 'nline.no :=
#1 'nline.newblock :=
}
FUNCTION {std.status.using.comma}
{ punct.comma 'punct.std :=
space.normal 'space.std :=
quote.no 'quote.std :=
nline.no 'nline.std :=
cap.no 'cap.std :=
}
FUNCTION {std.status.using.period}
{ punct.period 'punct.std :=
space.normal 'space.std :=
quote.no 'quote.std :=
nline.no 'nline.std :=
cap.yes 'cap.std :=
}
FUNCTION {initialize.prev.this.status}
{ punct.no 'prev.status.punct :=
space.no 'prev.status.space :=
quote.no 'prev.status.quote :=
nline.no 'prev.status.nline :=
punct.no 'this.status.punct :=
space.no 'this.status.space :=
quote.no 'this.status.quote :=
nline.no 'this.status.nline :=
cap.yes 'status.cap :=
}
FUNCTION {this.status.std}
{ punct.std 'this.status.punct :=
space.std 'this.status.space :=
quote.std 'this.status.quote :=
nline.std 'this.status.nline :=
}
FUNCTION {cap.status.std}{ cap.std 'status.cap := }
FUNCTION {this.to.prev.status}
{ this.status.punct 'prev.status.punct :=
this.status.space 'prev.status.space :=
this.status.quote 'prev.status.quote :=
this.status.nline 'prev.status.nline :=
}
FUNCTION {not}
{ { #0 }
{ #1 }
if$
}
FUNCTION {and}
{ { skip$ }
{ pop$ #0 }
if$
}
FUNCTION {or}
{ { pop$ #1 }
{ skip$ }
if$
}
% convert the strings "yes" or "no" to #1 or #0 respectively
FUNCTION {yes.no.to.int}
{ "l" change.case$ duplicate$
"yes" =
{ pop$ #1 }
{ duplicate$ "no" =
{ pop$ #0 }
{ "unknown boolean " quote$ * swap$ * quote$ *
" in " * cite$ * warning$
#0
}
if$
}
if$
}
% pushes true if the single char string on the stack is in the
% range of "0" to "9"
FUNCTION {is.num}
{ chr.to.int$
duplicate$ "0" chr.to.int$ < not
swap$ "9" chr.to.int$ > not and
}
% multiplies the integer on the stack by a factor of 10
FUNCTION {bump.int.mag}
{ #0 'multiresult :=
{ duplicate$ #0 > }
{ #1 -
multiresult #10 +
'multiresult :=
}
while$
pop$
multiresult
}
% converts a single character string on the stack to an integer
FUNCTION {char.to.integer}
{ duplicate$
is.num
{ chr.to.int$ "0" chr.to.int$ - }
{"noninteger character " quote$ * swap$ * quote$ *
" in integer field of " * cite$ * warning$
#0
}
if$
}
% converts a string on the stack to an integer
FUNCTION {string.to.integer}
{ duplicate$ text.length$ 'namesleft :=
#1 'nameptr :=
#0 'numnames :=
{ nameptr namesleft > not }
{ duplicate$ nameptr #1 substring$
char.to.integer numnames bump.int.mag +
'numnames :=
nameptr #1 +
'nameptr :=
}
while$
pop$
numnames
}
% The output routines write out the *next* to the top (previous) item on the
% stack, adding punctuation and such as needed. Since IEEEtran.bst maintains
% the output status for the top two items on the stack, these output
% routines have to consider the previous output status (which corresponds to
% the item that is being output). Full independent control of punctuation,
% closing quote marks, spacing, and newblock is provided.
%
% "output.nonnull" does not check for the presence of a previous empty
% item.
%
% "output" does check for the presence of a previous empty item and will
% remove an empty item rather than outputing it.
%
% "output.warn" is like "output", but will issue a warning if it detects
% an empty item.
FUNCTION {output.nonnull}
{ swap$
prev.status.punct punct.comma =
{ "," * }
{ skip$ }
if$
prev.status.punct punct.period =
{ add.period$ }
{ skip$ }
if$
prev.status.quote quote.close =
{ "''" * }
{ skip$ }
if$
prev.status.space space.normal =
{ " " * }
{ skip$ }
if$
prev.status.space space.large =
{ large.space * }
{ skip$ }
if$
write$
prev.status.nline nline.newblock =
{ newline$ "\newblock " write$ }
{ skip$ }
if$
}
FUNCTION {output}
{ duplicate$ empty$
'pop$
'output.nonnull
if$
}
FUNCTION {output.warn}
{ 't :=
duplicate$ empty$
{ pop$ "empty " t * " in " * cite$ * warning$ }
'output.nonnull
if$
}
% "fin.entry" is the output routine that handles the last item of the entry
% (which will be on the top of the stack when "fin.entry" is called).
FUNCTION {fin.entry}
{ this.status.punct punct.no =
{ skip$ }
{ add.period$ }
if$
this.status.quote quote.close =
{ "''" * }
{ skip$ }
if$
write$
newline$
}
FUNCTION {is.last.char.not.punct}
{ duplicate$
"}" * add.period$
#-1 #1 substring$ "." =
}
FUNCTION {is.multiple.pages}
{ 't :=
#0 'multiresult :=
{ multiresult not
t empty$ not
and
}
{ t #1 #1 substring$
duplicate$ "-" =
swap$ duplicate$ "," =
swap$ "+" =
or or
{ #1 'multiresult := }
{ t #2 global.max$ substring$ 't := }
if$
}
while$
multiresult
}
FUNCTION {capitalize}{ "u" change.case$ "t" change.case$ }
FUNCTION {emphasize}
{ duplicate$ empty$
{ pop$ "" }
{ "\emph{" swap$ * "}" * }
if$
}
FUNCTION {do.name.latex.cmd}
{ name.latex.cmd
empty$
{ skip$ }
{ name.latex.cmd "{" * swap$ * "}" * }
if$
}
% IEEEtran.bst uses its own \BIBforeignlanguage command which directly
% invokes the TeX hyphenation patterns without the need of the Babel
% package. Babel does a lot more than switch hyphenation patterns and
% its loading can cause unintended effects in many class files (such as
% IEEEtran.cls).
FUNCTION {select.language}
{ duplicate$ empty$ 'pop$
{ language empty$ 'skip$
{ "\BIBforeignlanguage{" language * "}{" * swap$ * "}" * }
if$
}
if$
}
FUNCTION {tie.or.space.prefix}
{ duplicate$ text.length$ #3 <
{ "~" }
{ " " }
if$
swap$
}
FUNCTION {get.bbl.editor}
{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }
FUNCTION {space.word}{ " " swap$ * " " * }
% Field Conditioners, Converters, Checkers and External Interfaces
FUNCTION {empty.field.to.null.string}
{ duplicate$ empty$
{ pop$ "" }
{ skip$ }
if$
}
FUNCTION {either.or.check}
{ empty$
{ pop$ }
{ "can't use both " swap$ * " fields in " * cite$ * warning$ }
if$
}
FUNCTION {empty.entry.warn}
{ author empty$ title empty$ howpublished empty$
month empty$ year empty$ note empty$ url empty$
and and and and and and
{ "all relevant fields are empty in " cite$ * warning$ }
'skip$
if$
}
% The bibinfo system provides a way for the electronic parsing/acquisition
% of a bibliography's contents as is done by ReVTeX. For example, a field
% could be entered into the bibliography as:
% \bibinfo{volume}{2}
% Only the "2" would show up in the document, but the LaTeX \bibinfo command
% could do additional things with the information. IEEEtran.bst does provide
% a \bibinfo command via "\providecommand{\bibinfo}[2]{#2}". However, it is
% currently not used as the bogus bibinfo functions defined here output the
% entry values directly without the \bibinfo wrapper. The bibinfo functions
% themselves (and the calls to them) are retained for possible future use.
%
% bibinfo.check avoids acting on missing fields while bibinfo.warn will
% issue a warning message if a missing field is detected. Prior to calling
% the bibinfo functions, the user should push the field value and then its
% name string, in that order.
FUNCTION {bibinfo.check}
{ swap$ duplicate$ missing$
{ pop$ pop$ "" }
{ duplicate$ empty$
{ swap$ pop$ }
{ swap$ pop$ }
if$
}
if$
}
FUNCTION {bibinfo.warn}
{ swap$ duplicate$ missing$
{ swap$ "missing " swap$ * " in " * cite$ * warning$ pop$ "" }
{ duplicate$ empty$
{ swap$ "empty " swap$ * " in " * cite$ * warning$ }
{ swap$ pop$ }
if$
}
if$
}
% The IEEE separates large numbers with more than 4 digits into groups of
% three. The IEEE uses a small space to separate these number groups.
% Typical applications include patent and page numbers.
% number of consecutive digits required to trigger the group separation.
FUNCTION {large.number.trigger}{ #5 }
% For numbers longer than the trigger, this is the blocksize of the groups.
% The blocksize must be less than the trigger threshold, and 2 * blocksize
% must be greater than the trigger threshold (can't do more than one
% separation on the initial trigger).
FUNCTION {large.number.blocksize}{ #3 }
% What is actually inserted between the number groups.
FUNCTION {large.number.separator}{ "\," }
% So as to save on integer variables by reusing existing ones, numnames
% holds the current number of consecutive digits read and nameptr holds
% the number that will trigger an inserted space.
FUNCTION {large.number.separate}
{ 't :=
""
#0 'numnames :=
large.number.trigger 'nameptr :=
{ t empty$ not }
{ t #-1 #1 substring$ is.num
{ numnames #1 + 'numnames := }
{ #0 'numnames :=
large.number.trigger 'nameptr :=
}
if$
t #-1 #1 substring$ swap$ *
t #-2 global.max$ substring$ 't :=
numnames nameptr =
{ duplicate$ #1 nameptr large.number.blocksize - substring$ swap$
nameptr large.number.blocksize - #1 + global.max$ substring$
large.number.separator swap$ * *
nameptr large.number.blocksize - 'numnames :=
large.number.blocksize #1 + 'nameptr :=
}
{ skip$ }
if$
}
while$
}
% Converts all single dashes "-" to double dashes "--".
FUNCTION {n.dashify}
{ large.number.separate
't :=
""
{ t empty$ not }
{ t #1 #1 substring$ "-" =
{ t #1 #2 substring$ "--" = not
{ "--" *
t #2 global.max$ substring$ 't :=
}
{ { t #1 #1 substring$ "-" = }
{ "-" *
t #2 global.max$ substring$ 't :=
}
while$
}
if$
}
{ t #1 #1 substring$ *
t #2 global.max$ substring$ 't :=
}
if$
}
while$
}
% This function detects entries with names that are identical to that of
% the previous entry and replaces the repeated names with dashes (if the
% "is.dash.repeated.names" user control is nonzero).
FUNCTION {name.or.dash}
{ 's :=
oldname empty$
{ s 'oldname := s }
{ s oldname =
{ is.dash.repeated.names
{ repeated.name.dashes }
{ s 'oldname := s }
if$
}
{ s 'oldname := s }
if$
}
if$
}
% Converts the number string on the top of the stack to
% "numerical ordinal form" (e.g., "7" to "7th"). There is
% no artificial limit to the upper bound of the numbers as the
% two least significant digits determine the ordinal form.
FUNCTION {num.to.ordinal}
{ duplicate$ #-2 #1 substring$ "1" =
{ bbl.th * }
{ duplicate$ #-1 #1 substring$ "1" =
{ bbl.st * }
{ duplicate$ #-1 #1 substring$ "2" =
{ bbl.nd * }
{ duplicate$ #-1 #1 substring$ "3" =
{ bbl.rd * }
{ bbl.th * }
if$
}
if$
}
if$
}
if$
}
% If the string on the top of the stack begins with a number,
% (e.g., 11th) then replace the string with the leading number
% it contains. Otherwise retain the string as-is. s holds the
% extracted number, t holds the part of the string that remains
% to be scanned.
FUNCTION {extract.num}
{ duplicate$ 't :=
"" 's :=
{ t empty$ not }
{ t #1 #1 substring$
t #2 global.max$ substring$ 't :=
duplicate$ is.num
{ s swap$ * 's := }
{ pop$ "" 't := }
if$
}
while$
s empty$
'skip$
{ pop$ s }
if$
}
% Converts the word number string on the top of the stack to
% Arabic string form. Will be successful up to "tenth".
FUNCTION {word.to.num}
{ duplicate$ "l" change.case$ 's :=
s "first" =
{ pop$ "1" }
{ skip$ }
if$
s "second" =
{ pop$ "2" }
{ skip$ }
if$
s "third" =
{ pop$ "3" }
{ skip$ }
if$
s "fourth" =
{ pop$ "4" }
{ skip$ }
if$
s "fifth" =
{ pop$ "5" }
{ skip$ }
if$
s "sixth" =
{ pop$ "6" }
{ skip$ }
if$
s "seventh" =
{ pop$ "7" }
{ skip$ }
if$
s "eighth" =
{ pop$ "8" }
{ skip$ }
if$
s "ninth" =
{ pop$ "9" }
{ skip$ }
if$
s "tenth" =
{ pop$ "10" }
{ skip$ }
if$
}
% Converts the string on the top of the stack to numerical
% ordinal (e.g., "11th") form.
FUNCTION {convert.edition}
{ duplicate$ empty$ 'skip$
{ duplicate$ #1 #1 substring$ is.num
{ extract.num
num.to.ordinal
}
{ word.to.num
duplicate$ #1 #1 substring$ is.num
{ num.to.ordinal }
{ "edition ordinal word " quote$ * edition * quote$ *
" may be too high (or improper) for conversion" * " in " * cite$ * warning$
}
if$
}
if$
}
if$
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% LATEX BIBLIOGRAPHY CODE %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
FUNCTION {start.entry}
{ newline$
"\bibitem{" write$
cite$ write$
"}" write$
newline$
""
initialize.prev.this.status
}
% Here we write out all the LaTeX code that we will need. The most involved
% code sequences are those that control the alternate interword spacing and
% foreign language hyphenation patterns. The heavy use of \providecommand
% gives users a way to override the defaults. Special thanks to Javier Bezos,
% Johannes Braams, Robin Fairbairns, Heiko Oberdiek, Donald Arseneau and all
% the other gurus on comp.text.tex for their help and advice on the topic of
% \selectlanguage, Babel and BibTeX.
FUNCTION {begin.bib}
{ "% Generated by IEEEtran.bst, version: " bst.file.version * " (" * bst.file.date * ")" *
write$ newline$
preamble$ empty$ 'skip$
{ preamble$ write$ newline$ }
if$
"\begin{thebibliography}{" longest.label * "}" *
write$ newline$
"\providecommand{\url}[1]{#1}"
write$ newline$
"\csname url@samestyle\endcsname"
write$ newline$
"\providecommand{\newblock}{\relax}"
write$ newline$
"\providecommand{\bibinfo}[2]{#2}"
write$ newline$
"\providecommand{\BIBentrySTDinterwordspacing}{\spaceskip=0pt\relax}"
write$ newline$
"\providecommand{\BIBentryALTinterwordstretchfactor}{"
ALTinterwordstretchfactor * "}" *
write$ newline$
"\providecommand{\BIBentryALTinterwordspacing}{\spaceskip=\fontdimen2\font plus "
write$ newline$
"\BIBentryALTinterwordstretchfactor\fontdimen3\font minus \fontdimen4\font\relax}"
write$ newline$
"\providecommand{\BIBforeignlanguage}[2]{{%"
write$ newline$
"\expandafter\ifx\csname l@#1\endcsname\relax"
write$ newline$
"\typeout{** WARNING: IEEEtran.bst: No hyphenation pattern has been}%"
write$ newline$
"\typeout{** loaded for the language `#1'. Using the pattern for}%"
write$ newline$
"\typeout{** the default language instead.}%"
write$ newline$
"\else"
write$ newline$
"\language=\csname l@#1\endcsname"
write$ newline$
"\fi"
write$ newline$
"#2}}"
write$ newline$
"\providecommand{\BIBdecl}{\relax}"
write$ newline$
"\BIBdecl"
write$ newline$
}
FUNCTION {end.bib}
{ newline$ "\end{thebibliography}" write$ newline$ }
FUNCTION {if.url.alt.interword.spacing}
{ is.use.alt.interword.spacing
{ is.use.url
{ url empty$ 'skip$ {"\BIBentryALTinterwordspacing" write$ newline$} if$ }
{ skip$ }
if$
}
{ skip$ }
if$
}
FUNCTION {if.url.std.interword.spacing}
{ is.use.alt.interword.spacing
{ is.use.url
{ url empty$ 'skip$ {"\BIBentrySTDinterwordspacing" write$ newline$} if$ }
{ skip$ }
if$
}
{ skip$ }
if$
}
%%%%%%%%%%%%%%%%%%%%%%%%
%% LONGEST LABEL PASS %%
%%%%%%%%%%%%%%%%%%%%%%%%
FUNCTION {initialize.longest.label}
{ "" 'longest.label :=
#1 'number.label :=
#0 'longest.label.width :=
}
FUNCTION {longest.label.pass}
{ type$ "ieeetranbstctl" =
{ skip$ }
{ 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$
}
if$
}
%%%%%%%%%%%%%%%%%%%%%
%% FORMAT HANDLERS %%
%%%%%%%%%%%%%%%%%%%%%
%% Lower Level Formats (used by higher level formats)
FUNCTION {format.address.org.or.pub.date}
{ 't :=
""
year empty$
{ "empty year in " cite$ * warning$ }
{ skip$ }
if$
address empty$ t empty$ and
year empty$ and month empty$ and
{ skip$ }
{ this.to.prev.status
this.status.std
cap.status.std
address "address" bibinfo.check *
t empty$
{ skip$ }
{ punct.period 'prev.status.punct :=
space.large 'prev.status.space :=
address empty$
{ skip$ }
{ ": " * }
if$
t *
}
if$
year empty$ month empty$ and
{ skip$ }
{ t empty$ address empty$ and
{ skip$ }
{ ", " * }
if$
month empty$
{ year empty$
{ skip$ }
{ year "year" bibinfo.check * }
if$
}
{ month "month" bibinfo.check *
year empty$
{ skip$ }
{ " " * year "year" bibinfo.check * }
if$
}
if$
}
if$
}
if$
}
FUNCTION {format.names}
{ 'bibinfo :=
duplicate$ empty$ 'skip$ {
this.to.prev.status
this.status.std
's :=
"" 't :=
#1 'nameptr :=
s num.names$ 'numnames :=
numnames 'namesleft :=
{ namesleft #0 > }
{ s nameptr
name.format.string
format.name$
bibinfo bibinfo.check
't :=
nameptr #1 >
{ nameptr num.names.shown.with.forced.et.al #1 + =
numnames max.num.names.before.forced.et.al >
is.forced.et.al and and
{ "others" 't :=
#1 'namesleft :=
}
{ skip$ }
if$
namesleft #1 >
{ ", " * t do.name.latex.cmd * }
{ s nameptr "{ll}" format.name$ duplicate$ "others" =
{ 't := }
{ pop$ }
if$
t "others" =
{ " " * bbl.etal emphasize * }
{ numnames #2 >
{ "," * }
{ skip$ }
if$
bbl.and
space.word * t do.name.latex.cmd *
}
if$
}
if$
}
{ t do.name.latex.cmd }
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$
cap.status.std
} if$
}
%% Higher Level Formats
%% addresses/locations
FUNCTION {format.address}
{ address duplicate$ empty$ 'skip$
{ this.to.prev.status
this.status.std
cap.status.std
}
if$
}
%% author/editor names
FUNCTION {format.authors}{ author "author" format.names }
FUNCTION {format.editors}
{ editor "editor" format.names duplicate$ empty$ 'skip$
{ ", " *
get.bbl.editor
capitalize
*
}
if$
}
%% date
FUNCTION {format.date}
{
month "month" bibinfo.check duplicate$ empty$
year "year" bibinfo.check duplicate$ empty$
{ swap$ 'skip$
{ this.to.prev.status
this.status.std
cap.status.std
"there's a month but no year in " cite$ * warning$ }
if$
*
}
{ this.to.prev.status
this.status.std
cap.status.std
swap$ 'skip$
{
swap$
" " * swap$
}
if$
*
}
if$
}
FUNCTION {format.date.electronic}
{ month "month" bibinfo.check duplicate$ empty$
year "year" bibinfo.check duplicate$ empty$
{ swap$
{ pop$ }
{ "there's a month but no year in " cite$ * warning$
pop$ ")" * "(" swap$ *
this.to.prev.status
punct.no 'this.status.punct :=
space.normal 'this.status.space :=
quote.no 'this.status.quote :=
cap.yes 'status.cap :=
}
if$
}
{ swap$
{ swap$ pop$ ")" * "(" swap$ * }
{ "(" swap$ * ", " * swap$ * ")" * }
if$
this.to.prev.status
punct.no 'this.status.punct :=
space.normal 'this.status.space :=
quote.no 'this.status.quote :=
cap.yes 'status.cap :=
}
if$
}
%% edition/title
% Note: The IEEE considers the edition to be closely associated with
% the title of a book. So, in IEEEtran.bst the edition is normally handled
% within the formatting of the title. The format.edition function is
% retained here for possible future use.
FUNCTION {format.edition}
{ edition duplicate$ empty$ 'skip$
{ this.to.prev.status
this.status.std
convert.edition
status.cap
{ "t" }
{ "l" }
if$ change.case$
"edition" bibinfo.check
"~" * bbl.edition *
cap.status.std
}
if$
}
% This is used to format the booktitle of a conference proceedings.
% Here we use the "intype" field to provide the user a way to
% override the word "in" (e.g., with things like "presented at")
% Use of intype stops the emphasis of the booktitle to indicate that
% we no longer mean the written conference proceedings, but the
% conference itself.
FUNCTION {format.in.booktitle}
{ booktitle "booktitle" bibinfo.check duplicate$ empty$ 'skip$
{ this.to.prev.status
this.status.std
select.language
intype missing$
{ emphasize
bbl.in " " *
}
{ intype " " * }
if$
swap$ *
cap.status.std
}
if$
}
% This is used to format the booktitle of collection.
% Here the "intype" field is not supported, but "edition" is.
FUNCTION {format.in.booktitle.edition}
{ booktitle "booktitle" bibinfo.check duplicate$ empty$ 'skip$
{ this.to.prev.status
this.status.std
select.language
emphasize
edition empty$ 'skip$
{ ", " *
edition
convert.edition
"l" change.case$
* "~" * bbl.edition *
}
if$
bbl.in " " * swap$ *
cap.status.std
}
if$
}
FUNCTION {format.article.title}
{ title duplicate$ empty$ 'skip$
{ this.to.prev.status
this.status.std
"t" change.case$
}
if$
"title" bibinfo.check
duplicate$ empty$ 'skip$
{ quote.close 'this.status.quote :=
is.last.char.not.punct
{ punct.std 'this.status.punct := }
{ punct.no 'this.status.punct := }
if$
select.language
"``" swap$ *
cap.status.std
}
if$
}
FUNCTION {format.article.title.electronic}
{ title duplicate$ empty$ 'skip$
{ this.to.prev.status
this.status.std
cap.status.std
"t" change.case$
}
if$
"title" bibinfo.check
duplicate$ empty$
{ skip$ }
{ select.language }
if$
}
FUNCTION {format.book.title.edition}
{ title "title" bibinfo.check
duplicate$ empty$
{ "empty title in " cite$ * warning$ }
{ this.to.prev.status
this.status.std
select.language
emphasize
edition empty$ 'skip$
{ ", " *
edition
convert.edition
status.cap
{ "t" }
{ "l" }
if$
change.case$
* "~" * bbl.edition *
}
if$
cap.status.std
}
if$
}
FUNCTION {format.book.title}
{ title "title" bibinfo.check
duplicate$ empty$ 'skip$
{ this.to.prev.status
this.status.std
cap.status.std
select.language
emphasize
}
if$
}
%% journal
FUNCTION {format.journal}
{ journal duplicate$ empty$ 'skip$
{ this.to.prev.status
this.status.std
cap.status.std
select.language
emphasize
}
if$
}
%% how published
FUNCTION {format.howpublished}
{ howpublished duplicate$ empty$ 'skip$
{ this.to.prev.status
this.status.std
cap.status.std
}
if$
}
%% institutions/organization/publishers/school
FUNCTION {format.institution}
{ institution duplicate$ empty$ 'skip$
{ this.to.prev.status
this.status.std
cap.status.std
}
if$
}
FUNCTION {format.organization}
{ organization duplicate$ empty$ 'skip$
{ this.to.prev.status
this.status.std
cap.status.std
}
if$
}
FUNCTION {format.address.publisher.date}
{ publisher "publisher" bibinfo.warn format.address.org.or.pub.date }
FUNCTION {format.address.publisher.date.nowarn}
{ publisher "publisher" bibinfo.check format.address.org.or.pub.date }
FUNCTION {format.address.organization.date}
{ organization "organization" bibinfo.check format.address.org.or.pub.date }
FUNCTION {format.school}
{ school duplicate$ empty$ 'skip$
{ this.to.prev.status
this.status.std
cap.status.std
}
if$
}
%% volume/number/series/chapter/pages
FUNCTION {format.volume}
{ volume empty.field.to.null.string
duplicate$ empty$ 'skip$
{ this.to.prev.status
this.status.std
bbl.volume
status.cap
{ capitalize }
{ skip$ }
if$
swap$ tie.or.space.prefix
"volume" bibinfo.check
* *
cap.status.std
}
if$
}
FUNCTION {format.number}
{ number empty.field.to.null.string
duplicate$ empty$ 'skip$
{ this.to.prev.status
this.status.std
status.cap
{ bbl.number capitalize }
{ bbl.number }
if$
swap$ tie.or.space.prefix
"number" bibinfo.check
* *
cap.status.std
}
if$
}
FUNCTION {format.number.if.use.for.article}
{ is.use.number.for.article
{ format.number }
{ "" }
if$
}
% The IEEE does not seem to tie the series so closely with the volume
% and number as is done in other bibliography styles. Instead the
% series is treated somewhat like an extension of the title.
FUNCTION {format.series}
{ series empty$
{ "" }
{ this.to.prev.status
this.status.std
bbl.series " " *
series "series" bibinfo.check *
cap.status.std
}
if$
}
FUNCTION {format.chapter}
{ chapter empty$
{ "" }
{ this.to.prev.status
this.status.std
type empty$
{ bbl.chapter }
{ type "l" change.case$
"type" bibinfo.check
}
if$
chapter tie.or.space.prefix
"chapter" bibinfo.check
* *
cap.status.std
}
if$
}
% The intended use of format.paper is for paper numbers of inproceedings.
% The paper type can be overridden via the type field.
% We allow the type to be displayed even if the paper number is absent
% for things like "postdeadline paper"
FUNCTION {format.paper}
{ is.use.paper
{ paper empty$
{ type empty$
{ "" }
{ this.to.prev.status
this.status.std
type "type" bibinfo.check
cap.status.std
}
if$
}
{ this.to.prev.status
this.status.std
type empty$
{ bbl.paper }
{ type "type" bibinfo.check }
if$
" " * paper
"paper" bibinfo.check
*
cap.status.std
}
if$
}
{ "" }
if$
}
FUNCTION {format.pages}
{ pages duplicate$ empty$ 'skip$
{ this.to.prev.status
this.status.std
duplicate$ is.multiple.pages
{
bbl.pages swap$
n.dashify
}
{
bbl.page swap$
}
if$
tie.or.space.prefix
"pages" bibinfo.check
* *
cap.status.std
}
if$
}
%% technical report number
FUNCTION {format.tech.report.number}
{ number "number" bibinfo.check
this.to.prev.status
this.status.std
cap.status.std
type duplicate$ empty$
{ pop$
bbl.techrep
}
{ skip$ }
if$
"type" bibinfo.check
swap$ duplicate$ empty$
{ pop$ }
{ tie.or.space.prefix * * }
if$
}
%% note
FUNCTION {format.note}
{ note empty$
{ "" }
{ this.to.prev.status
this.status.std
punct.period 'this.status.punct :=
note #1 #1 substring$
duplicate$ "{" =
{ skip$ }
{ status.cap
{ "u" }
{ "l" }
if$
change.case$
}
if$
note #2 global.max$ substring$ * "note" bibinfo.check
cap.yes 'status.cap :=
}
if$
}
%% patent
FUNCTION {format.patent.date}
{ this.to.prev.status
this.status.std
year empty$
{ monthfiled duplicate$ empty$
{ "monthfiled" bibinfo.check pop$ "" }
{ "monthfiled" bibinfo.check }
if$
dayfiled duplicate$ empty$
{ "dayfiled" bibinfo.check pop$ "" * }
{ "dayfiled" bibinfo.check
monthfiled empty$
{ "dayfiled without a monthfiled in " cite$ * warning$
*
}
{ " " swap$ * * }
if$
}
if$
yearfiled empty$
{ "no year or yearfiled in " cite$ * warning$ }
{ yearfiled "yearfiled" bibinfo.check
swap$
duplicate$ empty$
{ pop$ }
{ ", " * swap$ * }
if$
}
if$
}
{ month duplicate$ empty$
{ "month" bibinfo.check pop$ "" }
{ "month" bibinfo.check }
if$
day duplicate$ empty$
{ "day" bibinfo.check pop$ "" * }
{ "day" bibinfo.check
month empty$
{ "day without a month in " cite$ * warning$
*
}
{ " " swap$ * * }
if$
}
if$
year "year" bibinfo.check
swap$
duplicate$ empty$
{ pop$ }
{ ", " * swap$ * }
if$
}
if$
cap.status.std
}
FUNCTION {format.patent.nationality.type.number}
{ this.to.prev.status
this.status.std
nationality duplicate$ empty$
{ "nationality" bibinfo.warn pop$ "" }
{ "nationality" bibinfo.check
duplicate$ "l" change.case$ "united states" =
{ pop$ bbl.patentUS }
{ skip$ }
if$
" " *
}
if$
type empty$
{ bbl.patent "type" bibinfo.check }
{ type "type" bibinfo.check }
if$
*
number duplicate$ empty$
{ "number" bibinfo.warn pop$ }
{ "number" bibinfo.check
large.number.separate
swap$ " " * swap$ *
}
if$
cap.status.std
}
%% standard
FUNCTION {format.organization.institution.standard.type.number}
{ this.to.prev.status
this.status.std
organization duplicate$ empty$
{ pop$
institution duplicate$ empty$
{ "institution" bibinfo.warn }
{ "institution" bibinfo.warn " " * }
if$
}
{ "organization" bibinfo.warn " " * }
if$
type empty$
{ bbl.standard "type" bibinfo.check }
{ type "type" bibinfo.check }
if$
*
number duplicate$ empty$
{ "number" bibinfo.check pop$ }
{ "number" bibinfo.check
large.number.separate
swap$ " " * swap$ *
}
if$
cap.status.std
}
FUNCTION {format.revision}
{ revision empty$
{ "" }
{ this.to.prev.status
this.status.std
bbl.revision
revision tie.or.space.prefix
"revision" bibinfo.check
* *
cap.status.std
}
if$
}
%% thesis
FUNCTION {format.master.thesis.type}
{ this.to.prev.status
this.status.std
type empty$
{
bbl.mthesis
}
{
type "type" bibinfo.check
}
if$
cap.status.std
}
FUNCTION {format.phd.thesis.type}
{ this.to.prev.status
this.status.std
type empty$
{
bbl.phdthesis
}
{
type "type" bibinfo.check
}
if$
cap.status.std
}
%% URL
FUNCTION {format.url}
{ is.use.url
{ url empty$
{ "" }
{ this.to.prev.status
this.status.std
cap.yes 'status.cap :=
name.url.prefix " " *
"\url{" * url * "}" *
punct.no 'this.status.punct :=
punct.period 'prev.status.punct :=
space.normal 'this.status.space :=
space.normal 'prev.status.space :=
quote.no 'this.status.quote :=
}
if$
}
{ "" }
if$
}
%%%%%%%%%%%%%%%%%%%%
%% ENTRY HANDLERS %%
%%%%%%%%%%%%%%%%%%%%
% Note: In many journals, the IEEE (or the authors) tend not to show the number
% for articles, so the display of the number is controlled here by the
% switch "is.use.number.for.article"
FUNCTION {article}
{ std.status.using.comma
start.entry
if.url.alt.interword.spacing
format.authors "author" output.warn
name.or.dash
format.article.title "title" output.warn
format.journal "journal" bibinfo.check "journal" output.warn
format.volume output
format.number.if.use.for.article output
format.pages output
format.date "year" output.warn
format.note output
format.url output
fin.entry
if.url.std.interword.spacing
}
FUNCTION {book}
{ std.status.using.comma
start.entry
if.url.alt.interword.spacing
author empty$
{ format.editors "author and editor" output.warn }
{ format.authors output.nonnull }
if$
name.or.dash
format.book.title.edition output
format.series output
author empty$
{ skip$ }
{ format.editors output }
if$
format.address.publisher.date output
format.volume output
format.number output
format.note output
format.url output
fin.entry
if.url.std.interword.spacing
}
FUNCTION {booklet}
{ std.status.using.comma
start.entry
if.url.alt.interword.spacing
format.authors output
name.or.dash
format.article.title "title" output.warn
format.howpublished "howpublished" bibinfo.check output
format.organization "organization" bibinfo.check output
format.address "address" bibinfo.check output
format.date output
format.note output
format.url output
fin.entry
if.url.std.interword.spacing
}
FUNCTION {electronic}
{ std.status.using.period
start.entry
if.url.alt.interword.spacing
format.authors output
name.or.dash
format.date.electronic output
format.article.title.electronic output
format.howpublished "howpublished" bibinfo.check output
format.organization "organization" bibinfo.check output
format.address "address" bibinfo.check output
format.note output
format.url output
fin.entry
empty.entry.warn
if.url.std.interword.spacing
}
FUNCTION {inbook}
{ std.status.using.comma
start.entry
if.url.alt.interword.spacing
author empty$
{ format.editors "author and editor" output.warn }
{ format.authors output.nonnull }
if$
name.or.dash
format.book.title.edition output
format.series output
format.address.publisher.date output
format.volume output
format.number output
format.chapter output
format.pages output
format.note output
format.url output
fin.entry
if.url.std.interword.spacing
}
FUNCTION {incollection}
{ std.status.using.comma
start.entry
if.url.alt.interword.spacing
format.authors "author" output.warn
name.or.dash
format.article.title "title" output.warn
format.in.booktitle.edition "booktitle" output.warn
format.series output
format.editors output
format.address.publisher.date.nowarn output
format.volume output
format.number output
format.chapter output
format.pages output
format.note output
format.url output
fin.entry
if.url.std.interword.spacing
}
FUNCTION {inproceedings}
{ std.status.using.comma
start.entry
if.url.alt.interword.spacing
format.authors "author" output.warn
name.or.dash
format.article.title "title" output.warn
format.in.booktitle "booktitle" output.warn
format.series output
format.editors output
format.volume output
format.number output
publisher empty$
{ format.address.organization.date output }
{ format.organization "organization" bibinfo.check output
format.address.publisher.date output
}
if$
format.paper output
format.pages output
format.note output
format.url output
fin.entry
if.url.std.interword.spacing
}
FUNCTION {manual}
{ std.status.using.comma
start.entry
if.url.alt.interword.spacing
format.authors output
name.or.dash
format.book.title.edition "title" output.warn
format.howpublished "howpublished" bibinfo.check output
format.organization "organization" bibinfo.check output
format.address "address" bibinfo.check output
format.date output
format.note output
format.url output
fin.entry
if.url.std.interword.spacing
}
FUNCTION {mastersthesis}
{ std.status.using.comma
start.entry
if.url.alt.interword.spacing
format.authors "author" output.warn
name.or.dash
format.article.title "title" output.warn
format.master.thesis.type output.nonnull
format.school "school" bibinfo.warn output
format.address "address" bibinfo.check output
format.date "year" output.warn
format.note output
format.url output
fin.entry
if.url.std.interword.spacing
}
FUNCTION {misc}
{ std.status.using.comma
start.entry
if.url.alt.interword.spacing
format.authors output
name.or.dash
format.article.title output
format.howpublished "howpublished" bibinfo.check output
format.organization "organization" bibinfo.check output
format.address "address" bibinfo.check output
format.pages output
format.date output
format.note output
format.url output
fin.entry
empty.entry.warn
if.url.std.interword.spacing
}
FUNCTION {patent}
{ std.status.using.comma
start.entry
if.url.alt.interword.spacing
format.authors output
name.or.dash
format.article.title output
format.patent.nationality.type.number output
format.patent.date output
format.note output
format.url output
fin.entry
empty.entry.warn
if.url.std.interword.spacing
}
FUNCTION {periodical}
{ std.status.using.comma
start.entry
if.url.alt.interword.spacing
format.editors output
name.or.dash
format.book.title "title" output.warn
format.series output
format.volume output
format.number output
format.organization "organization" bibinfo.check output
format.date "year" output.warn
format.note output
format.url output
fin.entry
if.url.std.interword.spacing
}
FUNCTION {phdthesis}
{ std.status.using.comma
start.entry
if.url.alt.interword.spacing
format.authors "author" output.warn
name.or.dash
format.article.title "title" output.warn
format.phd.thesis.type output.nonnull
format.school "school" bibinfo.warn output
format.address "address" bibinfo.check output
format.date "year" output.warn
format.note output
format.url output
fin.entry
if.url.std.interword.spacing
}
FUNCTION {proceedings}
{ std.status.using.comma
start.entry
if.url.alt.interword.spacing
format.editors output
name.or.dash
format.book.title "title" output.warn
format.series output
format.volume output
format.number output
publisher empty$
{ format.address.organization.date output }
{ format.organization "organization" bibinfo.check output
format.address.publisher.date output
}
if$
format.note output
format.url output
fin.entry
if.url.std.interword.spacing
}
FUNCTION {standard}
{ std.status.using.comma
start.entry
if.url.alt.interword.spacing
format.authors output
name.or.dash
format.book.title "title" output.warn
format.howpublished "howpublished" bibinfo.check output
format.organization.institution.standard.type.number output
format.revision output
format.date output
format.note output
format.url output
fin.entry
if.url.std.interword.spacing
}
FUNCTION {techreport}
{ std.status.using.comma
start.entry
if.url.alt.interword.spacing
format.authors "author" output.warn
name.or.dash
format.article.title "title" output.warn
format.howpublished "howpublished" bibinfo.check output
format.institution "institution" bibinfo.warn output
format.address "address" bibinfo.check output
format.tech.report.number output.nonnull
format.date "year" output.warn
format.note output
format.url output
fin.entry
if.url.std.interword.spacing
}
FUNCTION {unpublished}
{ std.status.using.comma
start.entry
if.url.alt.interword.spacing
format.authors "author" output.warn
name.or.dash
format.article.title "title" output.warn
format.date output
format.note "note" output.warn
format.url output
fin.entry
if.url.std.interword.spacing
}
% The special entry type which provides the user interface to the
% BST controls
FUNCTION {IEEEtranBSTCTL}
{ is.print.banners.to.terminal
{ "** IEEEtran BST control entry " quote$ * cite$ * quote$ * " detected." *
top$
}
{ skip$ }
if$
CTLuse_article_number
empty$
{ skip$ }
{ CTLuse_article_number
yes.no.to.int
'is.use.number.for.article :=
}
if$
CTLuse_paper
empty$
{ skip$ }
{ CTLuse_paper
yes.no.to.int
'is.use.paper :=
}
if$
CTLuse_url
empty$
{ skip$ }
{ CTLuse_url
yes.no.to.int
'is.use.url :=
}
if$
CTLuse_forced_etal
empty$
{ skip$ }
{ CTLuse_forced_etal
yes.no.to.int
'is.forced.et.al :=
}
if$
CTLmax_names_forced_etal
empty$
{ skip$ }
{ CTLmax_names_forced_etal
string.to.integer
'max.num.names.before.forced.et.al :=
}
if$
CTLnames_show_etal
empty$
{ skip$ }
{ CTLnames_show_etal
string.to.integer
'num.names.shown.with.forced.et.al :=
}
if$
CTLuse_alt_spacing
empty$
{ skip$ }
{ CTLuse_alt_spacing
yes.no.to.int
'is.use.alt.interword.spacing :=
}
if$
CTLalt_stretch_factor
empty$
{ skip$ }
{ CTLalt_stretch_factor
'ALTinterwordstretchfactor :=
"\renewcommand{\BIBentryALTinterwordstretchfactor}{"
ALTinterwordstretchfactor * "}" *
write$ newline$
}
if$
CTLdash_repeated_names
empty$
{ skip$ }
{ CTLdash_repeated_names
yes.no.to.int
'is.dash.repeated.names :=
}
if$
CTLname_format_string
empty$
{ skip$ }
{ CTLname_format_string
'name.format.string :=
}
if$
CTLname_latex_cmd
empty$
{ skip$ }
{ CTLname_latex_cmd
'name.latex.cmd :=
}
if$
CTLname_url_prefix
missing$
{ skip$ }
{ CTLname_url_prefix
'name.url.prefix :=
}
if$
num.names.shown.with.forced.et.al max.num.names.before.forced.et.al >
{ "CTLnames_show_etal cannot be greater than CTLmax_names_forced_etal in " cite$ * warning$
max.num.names.before.forced.et.al 'num.names.shown.with.forced.et.al :=
}
{ skip$ }
if$
}
%%%%%%%%%%%%%%%%%%%
%% ENTRY ALIASES %%
%%%%%%%%%%%%%%%%%%%
FUNCTION {conference}{inproceedings}
FUNCTION {online}{electronic}
FUNCTION {internet}{electronic}
FUNCTION {webpage}{electronic}
FUNCTION {www}{electronic}
FUNCTION {default.type}{misc}
%%%%%%%%%%%%%%%%%%
%% MAIN PROGRAM %%
%%%%%%%%%%%%%%%%%%
READ
EXECUTE {initialize.controls}
EXECUTE {initialize.status.constants}
EXECUTE {banner.message}
EXECUTE {initialize.longest.label}
ITERATE {longest.label.pass}
EXECUTE {begin.bib}
ITERATE {call.type$}
EXECUTE {end.bib}
EXECUTE{completed.message}
%% That's all folks, mds.
This source diff could not be displayed because it is too large. You can view the blob instead.
ARCHIVE=replicable_article
# ARCHIVE_FILES=$(shell git ls-tree -r master --name-only | grep -v -e 'article.pdf')
ARCHIVE_FILES=article.org biblio.bib Makefile
all: article.pdf
# 1st step - convert org to latex
%.tex: %.org
emacs -batch --eval="(package-initialize)" --eval="(setq enable-local-eval t)" --eval="(setq enable-local-variables t)" $^ --funcall=org-latex-export-to-latex
# 2nd step compile latex
%.pdf: %.tex
pdflatex $^
bibtex `basename $^ .tex`
pdflatex $^
pdflatex $^
# Export to html
%.html: %.org
emacs -batch --eval="(package-initialize)" --eval="(setq enable-local-eval t)" --eval="(setq enable-local-variables t)" $^ --funcall=org-html-export-to-html
../$(ARCHIVE).tgz: $(ARCHIVE_FILES)
tar --xform "s|^|$(ARCHIVE)/|" -zcf $@ $^
clean:
rm -f article.aux article.bbl article.blg article.log article.toc article.out *~
distclean: clean
rm -f article.html article.tex article.pdf figure.pdf data.csv measurements.txt IEEEtran.bst IEEEtran.cls \#article.org\#
\relax
\providecommand\hyper@newdestlabel[2]{}
\@nameuse{bbl@beforestart}
\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument}
\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined
\global\let\oldcontentsline\contentsline
\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}}
\global\let\oldnewlabel\newlabel
\gdef\newlabel#1#2{\newlabelxx{#1}#2}
\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}}
\AtEndDocument{\ifx\hyper@anchor\@undefined
\let\contentsline\oldcontentsline
\let\newlabel\oldnewlabel
\fi}
\fi}
\global\let\hyper@last\relax
\gdef\HyperFirstAtBeginDocument#1{#1}
\providecommand\HyField@AuxAddToFields[1]{}
\providecommand\HyField@AuxAddToCoFields[2]{}
\citation{qsort}
\citation{qsort}
\citation{schulte11:_activ_docum_org_mode}
\citation{PER-GRA:2007}
\citation{*}
\bibstyle{IEEEtran}
\bibdata{biblio}
\bibcite{qsort}{1}
\bibcite{schulte11:_activ_docum_org_mode}{2}
\bibcite{PER-GRA:2007}{3}
\babel@aux{english}{}
\newlabel{sec:orgc40ffaf}{{}{1}{Introduction}{section*.2}{}}
\newlabel{sec:org241bcea}{{}{1}{Context}{section*.3}{}}
\newlabel{sec:org4e480d3}{{}{1}{Related Work}{section*.4}{}}
\newlabel{sec:org728aeeb}{{}{1}{Methodology}{section*.5}{}}
\newlabel{sec:orgd6f32a7}{{}{1}{Experimental results}{section*.6}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Comparing performances of several implementation of the quicksort algorithm}}{1}{figure.1}\protected@file@percent }
\newlabel{fig.comparison}{{1}{1}{Comparing performances of several implementation of the quicksort algorithm}{figure.1}{}}
\newlabel{sec:org4a36a2b}{{}{1}{Conclusion}{section*.7}{}}
\@writefile{toc}{\contentsline {section}{References}{1}{section*.9}\protected@file@percent }
% Generated by IEEEtran.bst, version: 1.14 (2015/08/26)
\begin{thebibliography}{1}
\providecommand{\url}[1]{#1}
\csname url@samestyle\endcsname
\providecommand{\newblock}{\relax}
\providecommand{\bibinfo}[2]{#2}
\providecommand{\BIBentrySTDinterwordspacing}{\spaceskip=0pt\relax}
\providecommand{\BIBentryALTinterwordstretchfactor}{4}
\providecommand{\BIBentryALTinterwordspacing}{\spaceskip=\fontdimen2\font plus
\BIBentryALTinterwordstretchfactor\fontdimen3\font minus
\fontdimen4\font\relax}
\providecommand{\BIBforeignlanguage}[2]{{%
\expandafter\ifx\csname l@#1\endcsname\relax
\typeout{** WARNING: IEEEtran.bst: No hyphenation pattern has been}%
\typeout{** loaded for the language `#1'. Using the pattern for}%
\typeout{** the default language instead.}%
\else
\language=\csname l@#1\endcsname
\fi
#2}}
\providecommand{\BIBdecl}{\relax}
\BIBdecl
\bibitem{qsort}
\BIBentryALTinterwordspacing
C.~A.~R. Hoare, ``Algorithm 64: Quicksort,'' \emph{Commun. ACM}, vol.~4, no.~7,
pp. 321--, Jul. 1961. [Online]. Available:
\url{http://doi.acm.org/10.1145/366622.366644}
\BIBentrySTDinterwordspacing
\bibitem{schulte11:_activ_docum_org_mode}
E.~Schulte and D.~Davison, ``Active document with org-mode,'' \emph{Computing
in Science \& Engineering}, vol.~13, no.~3, pp. 66--73, May/June 2011.
\bibitem{PER-GRA:2007}
\BIBentryALTinterwordspacing
F.~P\'erez and B.~E. Granger, ``{IP}ython: a system for interactive scientific
computing,'' \emph{Computing in Science and Engineering}, vol.~9, no.~3, pp.
21--29, May 2007. [Online]. Available: \url{http://ipython.org}
\BIBentrySTDinterwordspacing
\end{thebibliography}
This is BibTeX, Version 0.99d (TeX Live 2019)
Capacity: max_strings=200000, hash_size=200000, hash_prime=170003
The top-level auxiliary file: article.aux
The style file: IEEEtran.bst
Reallocated singl_function (elt_size=4) to 100 items from 50.
Reallocated singl_function (elt_size=4) to 100 items from 50.
Reallocated singl_function (elt_size=4) to 100 items from 50.
Reallocated wiz_functions (elt_size=4) to 6000 items from 3000.
Reallocated singl_function (elt_size=4) to 100 items from 50.
Database file #1: biblio.bib
-- IEEEtran.bst version 1.14 (2015/08/26) by Michael Shell.
-- http://www.michaelshell.org/tex/ieeetran/bibtex/
-- See the "IEEEtran_bst_HOWTO.pdf" manual for usage information.
Done.
You've used 3 entries,
4087 wiz_defined-function locations,
846 strings with 7752 characters,
and the built_in function-call counts, 2584 in all, are:
= -- 231
> -- 39
< -- 26
+ -- 21
- -- 5
* -- 146
:= -- 436
add.period$ -- 6
call.type$ -- 3
change.case$ -- 3
chr.to.int$ -- 51
cite$ -- 3
duplicate$ -- 175
empty$ -- 172
format.name$ -- 7
if$ -- 571
int.to.chr$ -- 0
int.to.str$ -- 3
missing$ -- 26
newline$ -- 36
num.names$ -- 3
pop$ -- 36
preamble$ -- 1
purify$ -- 0
quote$ -- 2
skip$ -- 196
stack$ -- 0
substring$ -- 125
swap$ -- 164
text.length$ -- 9
text.prefix$ -- 0
top$ -- 5
type$ -- 3
warning$ -- 0
while$ -- 15
width$ -- 4
write$ -- 61
This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019) (preloaded format=pdflatex 2020.3.19) 14 APR 2020 12:32
entering extended mode
restricted \write18 enabled.
%&-line parsing enabled.
**article.tex
(./article.tex
LaTeX2e <2020-02-02> patch level 5
L3 programming layer <2020-02-25> (./IEEEtran.cls
Document Class: IEEEtran 2015/08/26 V1.8b by Michael Shell
-- See the "IEEEtran_HOWTO" manual for usage information.
-- http://www.michaelshell.org/tex/ieeetran/
\@IEEEtrantmpdimenA=\dimen134
\@IEEEtrantmpdimenB=\dimen135
\@IEEEtrantmpdimenC=\dimen136
\@IEEEtrantmpcountA=\count167
\@IEEEtrantmpcountB=\count168
\@IEEEtrantmpcountC=\count169
\@IEEEtrantmptoksA=\toks15
LaTeX Font Info: Trying to load font information for OT1+ptm on input line 5
03.
(/usr/local/texlive/2019/texmf-dist/tex/latex/psnfss/ot1ptm.fd
File: ot1ptm.fd 2001/06/04 font definitions for OT1/ptm.
)
-- Using 8.5in x 11in (letter) paper.
-- Using PDF output.
\@IEEEnormalsizeunitybaselineskip=\dimen137
-- This is a 10 point document.
\CLASSINFOnormalsizebaselineskip=\dimen138
\CLASSINFOnormalsizeunitybaselineskip=\dimen139
\IEEEnormaljot=\dimen140
LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <5> not available
(Font) Font shape `OT1/ptm/b/n' tried instead on input line 1090.
LaTeX Font Info: Font shape `OT1/ptm/bx/it' in size <5> not available
(Font) Font shape `OT1/ptm/b/it' tried instead on input line 1090.
LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <7> not available
(Font) Font shape `OT1/ptm/b/n' tried instead on input line 1090.
LaTeX Font Info: Font shape `OT1/ptm/bx/it' in size <7> not available
(Font) Font shape `OT1/ptm/b/it' tried instead on input line 1090.
LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <8> not available
(Font) Font shape `OT1/ptm/b/n' tried instead on input line 1090.
LaTeX Font Info: Font shape `OT1/ptm/bx/it' in size <8> not available
(Font) Font shape `OT1/ptm/b/it' tried instead on input line 1090.
LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <9> not available
(Font) Font shape `OT1/ptm/b/n' tried instead on input line 1090.
LaTeX Font Info: Font shape `OT1/ptm/bx/it' in size <9> not available
(Font) Font shape `OT1/ptm/b/it' tried instead on input line 1090.
LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <10> not available
(Font) Font shape `OT1/ptm/b/n' tried instead on input line 1090.
LaTeX Font Info: Font shape `OT1/ptm/bx/it' in size <10> not available
(Font) Font shape `OT1/ptm/b/it' tried instead on input line 1090.
LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <11> not available
(Font) Font shape `OT1/ptm/b/n' tried instead on input line 1090.
LaTeX Font Info: Font shape `OT1/ptm/bx/it' in size <11> not available
(Font) Font shape `OT1/ptm/b/it' tried instead on input line 1090.
LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <12> not available
(Font) Font shape `OT1/ptm/b/n' tried instead on input line 1090.
LaTeX Font Info: Font shape `OT1/ptm/bx/it' in size <12> not available
(Font) Font shape `OT1/ptm/b/it' tried instead on input line 1090.
LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <17> not available
(Font) Font shape `OT1/ptm/b/n' tried instead on input line 1090.
LaTeX Font Info: Font shape `OT1/ptm/bx/it' in size <17> not available
(Font) Font shape `OT1/ptm/b/it' tried instead on input line 1090.
LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <20> not available
(Font) Font shape `OT1/ptm/b/n' tried instead on input line 1090.
LaTeX Font Info: Font shape `OT1/ptm/bx/it' in size <20> not available
(Font) Font shape `OT1/ptm/b/it' tried instead on input line 1090.
LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <24> not available
(Font) Font shape `OT1/ptm/b/n' tried instead on input line 1090.
LaTeX Font Info: Font shape `OT1/ptm/bx/it' in size <24> not available
(Font) Font shape `OT1/ptm/b/it' tried instead on input line 1090.
\IEEEquantizedlength=\dimen141
\IEEEquantizedlengthdiff=\dimen142
\IEEEquantizedtextheightdiff=\dimen143
\IEEEilabelindentA=\dimen144
\IEEEilabelindentB=\dimen145
\IEEEilabelindent=\dimen146
\IEEEelabelindent=\dimen147
\IEEEdlabelindent=\dimen148
\IEEElabelindent=\dimen149
\IEEEiednormlabelsep=\dimen150
\IEEEiedmathlabelsep=\dimen151
\IEEEiedtopsep=\skip47
\c@section=\count170
\c@subsection=\count171
\c@subsubsection=\count172
\c@paragraph=\count173
\c@IEEEsubequation=\count174
\abovecaptionskip=\skip48
\belowcaptionskip=\skip49
\c@figure=\count175
\c@table=\count176
\@IEEEeqnnumcols=\count177
\@IEEEeqncolcnt=\count178
\@IEEEsubeqnnumrollback=\count179
\@IEEEquantizeheightA=\dimen152
\@IEEEquantizeheightB=\dimen153
\@IEEEquantizeheightC=\dimen154
\@IEEEquantizeprevdepth=\dimen155
\@IEEEquantizemultiple=\count180
\@IEEEquantizeboxA=\box45
\@IEEEtmpitemindent=\dimen156
\IEEEPARstartletwidth=\dimen157
\c@IEEEbiography=\count181
\@IEEEtranrubishbin=\box46
) (/usr/local/texlive/2019/texmf-dist/tex/latex/base/fontenc.sty
Package: fontenc 2020/02/11 v2.0o Standard LaTeX package
LaTeX Font Info: Trying to load font information for T1+ptm on input line 11
2.
(/usr/local/texlive/2019/texmf-dist/tex/latex/psnfss/t1ptm.fd
File: t1ptm.fd 2001/06/04 font definitions for T1/ptm.
))
(/usr/local/texlive/2019/texmf-dist/tex/latex/base/inputenc.sty
Package: inputenc 2018/08/11 v1.3c Input encoding file
\inpenc@prehook=\toks16
\inpenc@posthook=\toks17
)
(/usr/local/texlive/2019/texmf-dist/tex/latex/graphics/graphicx.sty
Package: graphicx 2019/11/30 v1.2a Enhanced LaTeX Graphics (DPC,SPQR)
(/usr/local/texlive/2019/texmf-dist/tex/latex/graphics/keyval.sty
Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
\KV@toks@=\toks18
)
(/usr/local/texlive/2019/texmf-dist/tex/latex/graphics/graphics.sty
Package: graphics 2019/11/30 v1.4a Standard LaTeX Graphics (DPC,SPQR)
(/usr/local/texlive/2019/texmf-dist/tex/latex/graphics/trig.sty
Package: trig 2016/01/03 v1.10 sin cos tan (DPC)
)
(/usr/local/texlive/2019/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration
)
Package graphics Info: Driver file: pdftex.def on input line 105.
(/usr/local/texlive/2019/texmf-dist/tex/latex/graphics-def/pdftex.def
File: pdftex.def 2018/01/08 v1.0l Graphics/color driver for pdftex
))
\Gin@req@height=\dimen158
\Gin@req@width=\dimen159
)
(/usr/local/texlive/2019/texmf-dist/tex/latex/tools/xspace.sty
Package: xspace 2014/10/28 v1.13 Space after command names (DPC,MH)
)
(/usr/local/texlive/2019/texmf-dist/tex/latex/base/ifthen.sty
Package: ifthen 2014/09/29 v1.1c Standard LaTeX ifthen package (DPC)
)
(/usr/local/texlive/2019/texmf-dist/tex/latex/amsmath/amsmath.sty
Package: amsmath 2020/01/20 v2.17e AMS math features
\@mathmargin=\skip50
For additional information on amsmath, use the `?' option.
(/usr/local/texlive/2019/texmf-dist/tex/latex/amsmath/amstext.sty
Package: amstext 2000/06/29 v2.01 AMS text
(/usr/local/texlive/2019/texmf-dist/tex/latex/amsmath/amsgen.sty
File: amsgen.sty 1999/11/30 v2.0 generic functions
\@emptytoks=\toks19
\ex@=\dimen160
))
(/usr/local/texlive/2019/texmf-dist/tex/latex/amsmath/amsbsy.sty
Package: amsbsy 1999/11/29 v1.2d Bold Symbols
\pmbraise@=\dimen161
)
(/usr/local/texlive/2019/texmf-dist/tex/latex/amsmath/amsopn.sty
Package: amsopn 2016/03/08 v2.02 operator names
)
\inf@bad=\count182
LaTeX Info: Redefining \frac on input line 227.
\uproot@=\count183
\leftroot@=\count184
LaTeX Info: Redefining \overline on input line 389.
\classnum@=\count185
\DOTSCASE@=\count186
LaTeX Info: Redefining \ldots on input line 486.
LaTeX Info: Redefining \dots on input line 489.
LaTeX Info: Redefining \cdots on input line 610.
\Mathstrutbox@=\box47
\strutbox@=\box48
\big@size=\dimen162
LaTeX Font Info: Redeclaring font encoding OML on input line 733.
LaTeX Font Info: Redeclaring font encoding OMS on input line 734.
\macc@depth=\count187
\c@MaxMatrixCols=\count188
\dotsspace@=\muskip16
\c@parentequation=\count189
\dspbrk@lvl=\count190
\tag@help=\toks20
\row@=\count191
\column@=\count192
\maxfields@=\count193
\andhelp@=\toks21
\eqnshift@=\dimen163
\alignsep@=\dimen164
\tagshift@=\dimen165
\tagwidth@=\dimen166
\totwidth@=\dimen167
\lineht@=\dimen168
\@envbody=\toks22
\multlinegap=\skip51
\multlinetaggap=\skip52
\mathdisplay@stack=\toks23
LaTeX Info: Redefining \[ on input line 2859.
LaTeX Info: Redefining \] on input line 2860.
)
(/usr/local/texlive/2019/texmf-dist/tex/latex/amsfonts/amssymb.sty
Package: amssymb 2013/01/14 v3.01 AMS font symbols
(/usr/local/texlive/2019/texmf-dist/tex/latex/amsfonts/amsfonts.sty
Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support
\symAMSa=\mathgroup4
\symAMSb=\mathgroup5
LaTeX Font Info: Redeclaring math symbol \hbar on input line 98.
LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold'
(Font) U/euf/m/n --> U/euf/b/n on input line 106.
))
(/usr/local/texlive/2019/texmf-dist/tex/generic/babel/babel.sty
Package: babel 2020/02/28 3.41 The Babel package
(/usr/local/texlive/2019/texmf-dist/tex/generic/babel/switch.def
File: switch.def 2020/02/28 3.41 Babel switching mechanism
)
(/usr/local/texlive/2019/texmf-dist/tex/generic/babel-english/american.ldf
Language: american 2017/06/06 v3.3r English support from the babel system
(/usr/local/texlive/2019/texmf-dist/tex/generic/babel-english/english.ldf
Language: english 2017/06/06 v3.3r English support from the babel system
(/usr/local/texlive/2019/texmf-dist/tex/generic/babel/babel.def
File: babel.def 2020/02/28 3.41 Babel common definitions
\babel@savecnt=\count194
\U@D=\dimen169
(/usr/local/texlive/2019/texmf-dist/tex/generic/babel/txtbabel.def)
\bbl@readstream=\read2
\bbl@dirlevel=\count195
)
Package babel Info: \l@canadian = using hyphenrules for english
(babel) (\language0) on input line 102.
Package babel Info: \l@australian = using hyphenrules for ukenglish
(babel) (\language21) on input line 105.
Package babel Info: \l@newzealand = using hyphenrules for ukenglish
(babel) (\language21) on input line 108.
))
(/usr/local/texlive/2019/texmf-dist/tex/generic/babel-english/english.ldf
Language: english 2017/06/06 v3.3r English support from the babel system
))
Package Babel Warning: The package option `english' should not be used
(Babel) with a more specific one (like `american') on input line
10.
(/usr/local/texlive/2019/texmf-dist/tex/latex/url/url.sty
\Urlmuskip=\muskip17
Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc.
)
(/usr/local/texlive/2019/texmf-dist/tex/latex/hyperref/hyperref.sty
Package: hyperref 2020/01/14 v7.00d Hypertext links for LaTeX
(/usr/local/texlive/2019/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty
Package: ltxcmds 2019/12/15 v1.24 LaTeX kernel commands for general use (HO)
)
(/usr/local/texlive/2019/texmf-dist/tex/generic/iftex/iftex.sty
Package: iftex 2019/11/07 v1.0c TeX engine tests
)
(/usr/local/texlive/2019/texmf-dist/tex/latex/pdftexcmds/pdftexcmds.sty
Package: pdftexcmds 2019/11/24 v0.31 Utility functions of pdfTeX for LuaTeX (HO
)
(/usr/local/texlive/2019/texmf-dist/tex/generic/infwarerr/infwarerr.sty
Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO)
)
Package pdftexcmds Info: \pdf@primitive is available.
Package pdftexcmds Info: \pdf@ifprimitive is available.
Package pdftexcmds Info: \pdfdraftmode found.
)
(/usr/local/texlive/2019/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty
Package: kvsetkeys 2019/12/15 v1.18 Key value parser (HO)
)
(/usr/local/texlive/2019/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty
Package: kvdefinekeys 2019-12-19 v1.6 Define keys (HO)
)
(/usr/local/texlive/2019/texmf-dist/tex/generic/pdfescape/pdfescape.sty
Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO)
)
(/usr/local/texlive/2019/texmf-dist/tex/latex/hycolor/hycolor.sty
Package: hycolor 2020-01-27 v1.10 Color options for hyperref/bookmark (HO)
)
(/usr/local/texlive/2019/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty
Package: letltxmacro 2019/12/03 v1.6 Let assignment for LaTeX macros (HO)
)
(/usr/local/texlive/2019/texmf-dist/tex/latex/auxhook/auxhook.sty
Package: auxhook 2019-12-17 v1.6 Hooks for auxiliary files (HO)
)
(/usr/local/texlive/2019/texmf-dist/tex/latex/kvoptions/kvoptions.sty
Package: kvoptions 2019/11/29 v3.13 Key value format for package options (HO)
)
\@linkdim=\dimen170
\Hy@linkcounter=\count196
\Hy@pagecounter=\count197
(/usr/local/texlive/2019/texmf-dist/tex/latex/hyperref/pd1enc.def
File: pd1enc.def 2020/01/14 v7.00d Hyperref: PDFDocEncoding definition (HO)
Now handling font encoding PD1 ...
... no UTF-8 mapping file for font encoding PD1
)
(/usr/local/texlive/2019/texmf-dist/tex/generic/intcalc/intcalc.sty
Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO)
)
(/usr/local/texlive/2019/texmf-dist/tex/generic/etexcmds/etexcmds.sty
Package: etexcmds 2019/12/15 v1.7 Avoid name clashes with e-TeX commands (HO)
)
\Hy@SavedSpaceFactor=\count198
\pdfmajorversion=\count199
Package hyperref Info: Hyper figures OFF on input line 4547.
Package hyperref Info: Link nesting OFF on input line 4552.
Package hyperref Info: Hyper index ON on input line 4555.
Package hyperref Info: Plain pages OFF on input line 4562.
Package hyperref Info: Backreferencing OFF on input line 4567.
Package hyperref Info: Implicit mode ON; LaTeX internals redefined.
Package hyperref Info: Bookmarks ON on input line 4800.
\c@Hy@tempcnt=\count266
LaTeX Info: Redefining \url on input line 5159.
\XeTeXLinkMargin=\dimen171
(/usr/local/texlive/2019/texmf-dist/tex/generic/bitset/bitset.sty
Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO)
(/usr/local/texlive/2019/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty
Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO
)
))
\Fld@menulength=\count267
\Field@Width=\dimen172
\Fld@charsize=\dimen173
Package hyperref Info: Hyper figures OFF on input line 6430.
Package hyperref Info: Link nesting OFF on input line 6435.
Package hyperref Info: Hyper index ON on input line 6438.
Package hyperref Info: backreferencing OFF on input line 6445.
Package hyperref Info: Link coloring OFF on input line 6450.
Package hyperref Info: Link coloring with OCG OFF on input line 6455.
Package hyperref Info: PDF/A mode OFF on input line 6460.
LaTeX Info: Redefining \ref on input line 6500.
LaTeX Info: Redefining \pageref on input line 6504.
(/usr/local/texlive/2019/texmf-dist/tex/generic/atbegshi/atbegshi.sty
Package: atbegshi 2019/12/05 v1.19 At begin shipout hook (HO)
)
\Hy@abspage=\count268
\c@Item=\count269
\c@Hfootnote=\count270
)
Package hyperref Info: Driver (autodetected): hpdftex.
(/usr/local/texlive/2019/texmf-dist/tex/latex/hyperref/hpdftex.def
File: hpdftex.def 2020/01/14 v7.00d Hyperref driver for pdfTeX
(/usr/local/texlive/2019/texmf-dist/tex/latex/atveryend/atveryend.sty
Package: atveryend 2019-12-11 v1.11 Hooks at the very end of document (HO)
Package atveryend Info: \enddocument detected (standard20110627).
)
\Fld@listcount=\count271
\c@bookmark@seq@number=\count272
(/usr/local/texlive/2019/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty
Package: rerunfilecheck 2019/12/05 v1.9 Rerun checks for auxiliary files (HO)
(/usr/local/texlive/2019/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty
Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO)
)
Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2
86.
)
\Hy@SectionHShift=\skip53
)
(/usr/local/texlive/2019/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def
File: l3backend-pdfmode.def 2020-02-23 L3 backend support: PDF mode
\l__kernel_color_stack_int=\count273
\l__pdf_internal_box=\box49
)
(./article.aux)
\openout1 = `article.aux'.
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 24.
LaTeX Font Info: ... okay on input line 24.
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 24.
LaTeX Font Info: ... okay on input line 24.
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 24.
LaTeX Font Info: ... okay on input line 24.
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 24.
LaTeX Font Info: ... okay on input line 24.
LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 24.
LaTeX Font Info: ... okay on input line 24.
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 24.
LaTeX Font Info: ... okay on input line 24.
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 24.
LaTeX Font Info: ... okay on input line 24.
LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 24.
LaTeX Font Info: ... okay on input line 24.
-- Lines per column: 56 (exact).
(/usr/local/texlive/2019/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
[Loading MPS to PDF converter (version 2006.09.02).]
\scratchcounter=\count274
\scratchdimen=\dimen174
\scratchbox=\box50
\nofMPsegments=\count275
\nofMParguments=\count276
\everyMPshowfont=\toks24
\MPscratchCnt=\count277
\MPscratchDim=\dimen175
\MPnumerator=\count278
\makeMPintoPDFobject=\count279
\everyMPtoPDFconversion=\toks25
) (/usr/local/texlive/2019/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf
Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4
85.
(/usr/local/texlive/2019/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv
e
))
\AtBeginShipoutBox=\box51
Package hyperref Info: Link coloring OFF on input line 24.
(/usr/local/texlive/2019/texmf-dist/tex/latex/hyperref/nameref.sty
Package: nameref 2019/09/16 v2.46 Cross-referencing by name of section
(/usr/local/texlive/2019/texmf-dist/tex/latex/refcount/refcount.sty
Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO)
)
(/usr/local/texlive/2019/texmf-dist/tex/generic/gettitlestring/gettitlestring.s
ty
Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO)
)
\c@section@level=\count280
)
LaTeX Info: Redefining \ref on input line 24.
LaTeX Info: Redefining \pageref on input line 24.
LaTeX Info: Redefining \nameref on input line 24.
(./article.out) (./article.out)
\@outlinefile=\write3
\openout3 = `article.out'.
(./article.toc)
\tf@toc=\write4
\openout4 = `article.toc'.
LaTeX Font Info: Trying to load font information for T1+pcr on input line 72
.
(/usr/local/texlive/2019/texmf-dist/tex/latex/psnfss/t1pcr.fd
File: t1pcr.fd 2001/06/04 font definitions for T1/pcr.
)
LaTeX Font Info: Trying to load font information for U+msa on input line 77.
(/usr/local/texlive/2019/texmf-dist/tex/latex/amsfonts/umsa.fd
File: umsa.fd 2013/01/14 v3.01 AMS symbols A
)
LaTeX Font Info: Trying to load font information for U+msb on input line 77.
(/usr/local/texlive/2019/texmf-dist/tex/latex/amsfonts/umsb.fd
File: umsb.fd 2013/01/14 v3.01 AMS symbols B
)
<figure.pdf, id=17, 433.62pt x 289.08pt>
File: figure.pdf Graphic file (type pdf)
<use figure.pdf>
Package pdftex.def Info: figure.pdf used on input line 102.
(pdftex.def) Requested size: 201.60077pt x 134.40315pt.
(./article.bbl)
** Conference Paper **
Before submitting the final camera ready copy, remember to:
1. Manually equalize the lengths of two columns on the last page
of your paper;
2. Ensure that any PostScript and/or PDF output post-processing
uses only Type 1 fonts and that every step in the generation
process uses the appropriate paper size.
Package atveryend Info: Empty hook `BeforeClearDocument' on input line 123.
[1{/usr/local/texlive/2019/texmf-var/fonts/map/pdftex/updmap/pdftex.map}
<./figure.pdf>]
Package atveryend Info: Empty hook `AfterLastShipout' on input line 123.
(./article.aux)
Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 123.
Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 123.
Package rerunfilecheck Info: File `article.out' has not changed.
(rerunfilecheck) Checksum: C15571AB9E67EB6DFE845261237C5F0C;46.
Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 123.
)
Here is how much of TeX's memory you used:
8146 strings out of 480994
123452 string characters out of 5912127
400389 words of memory out of 5000000
23474 multiletter control sequences out of 15000+600000
642764 words of font info for 138 fonts, out of 8000000 for 9000
1141 hyphenation exceptions out of 8191
34i,8n,31p,273b,329s stack positions out of 5000i,500n,10000p,200000b,80000s
{/usr/local/texlive/2019/texmf-dist/fonts/enc/dvips/base/8r.enc}</usr/local/t
exlive/2019/texmf-dist/fonts/type1/urw/courier/ucrr8a.pfb></usr/local/texlive/2
019/texmf-dist/fonts/type1/urw/times/utmb8a.pfb></usr/local/texlive/2019/texmf-
dist/fonts/type1/urw/times/utmbi8a.pfb></usr/local/texlive/2019/texmf-dist/font
s/type1/urw/times/utmr8a.pfb></usr/local/texlive/2019/texmf-dist/fonts/type1/ur
w/times/utmri8a.pfb>
Output written on article.pdf (1 page, 67794 bytes).
PDF statistics:
74 PDF objects out of 1000 (max. 8388607)
63 compressed objects within 1 object stream
16 named destinations out of 1000 (max. 500000)
14 words of extra memory for PDF output out of 10000 (max. 10000000)
# -*- coding: utf-8 -*-
# -*- mode: org -*-
#+TITLE: Org Mode Template for an IEEE Conference Article
#+AUTHOR: John Doe, John Smith, and Jane Doe
#+STARTUP: overview indent inlineimages logdrawer
#+LANGUAGE: en
#+OPTIONS: num:nil toc:t \n:nil @:t ::t |:t ^:nil -:t f:t *:t <:t
#+OPTIONS: TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc
#+OPTIONS: email:nil creator:nil timestamp:t
#+TAGS: noexport(n) deprecated(d)
#+EXPORT_SELECT_TAGS: export
#+EXPORT_EXCLUDE_TAGS: noexport
# # Default org-mode HTML style
# #+HTML_HEAD: <link rel="stylesheet" title="Standard" href="http://orgmode.org/worg/style/worg.css" type="text/css" />
# # Shiny readthedocs HTML style
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="http://www.pirilampo.org/styles/readtheorg/css/htmlize.css"/>
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="http://www.pirilampo.org/styles/readtheorg/css/readtheorg.css"/>
#+HTML_HEAD: <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
#+HTML_HEAD: <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="http://www.pirilampo.org/styles/lib/js/jquery.stickytableheaders.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="http://www.pirilampo.org/styles/readtheorg/js/readtheorg.js"></script>
# ### By default, all code chunks are being run when exporting. To
# ### avoid this, simply remove the "# " of the next line.
# #+PROPERTY: header-args :eval never-export
#+LATEX_CLASS: IEEEtran
#+LATEX_HEADER: \usepackage[T1]{fontenc}
#+LATEX_HEADER: \usepackage[utf8]{inputenc}
#+LATEX_HEADER: \usepackage{graphicx}
#+LATEX_HEADER: \usepackage{xspace,ifthen}
#+LATEX_HEADER: \usepackage{amsmath,amssymb}
#+LATEX_HEADER: \usepackage[american]{babel}
#+LATEX_HEADER: \usepackage{url} \urlstyle{sf}
#+BEGIN_EXPORT latex
\let\oldcite=\cite
\renewcommand\cite[2][]{~\ifthenelse{\equal{#1}{}}{\oldcite{#2}}{\oldcite[#1]{#2}}\xspace}
\let\oldref=\ref
\def\ref#1{~\oldref{#1}\xspace}
\sloppy
#+END_EXPORT
#+BEGIN_abstract
Reproducible research has become increasingly important, just like
parallel architectures so we propose a novel experimental study of a
parallel implementation of the quicksort algorithm that builds on
reproducible research technology.
#+END_abstract
* Getting the LaTeX packages :noexport:
#+begin_src python :session python :results output :exports both
import urllib.request
import os.path
def download_urls(url_list):
for url,filename in url_list:
if(not(os.path.isfile(filename))):
urllib.request.urlretrieve(url, filename)
download_urls([("http://mirrors.ctan.org/macros/latex/contrib/IEEEtran/IEEEtran.cls","IEEEtran.cls"),
("http://mirrors.ctan.org/macros/latex/contrib/IEEEtran/bibtex/IEEEtran.bst","IEEEtran.bst")])
#+end_src
#+RESULTS:
* Getting the data :noexport:
#+begin_src python :session python :results output :exports both
download_urls([("https://raw.githubusercontent.com/alegrand/M2R-ParallelQuicksort/master/data/sama_2014-10-13/measurements_03%3A47.txt","measurements.txt")])
#+end_src
#+RESULTS:
* Extracting traces from data files :noexport:
#+begin_src python :results output raw :exports both :var input="measurements.txt" output="data.csv"
import re,sys
INPUT = open(input, "r")
OUTPUT = open(output, "w")
OUTPUT.writelines("Size, Seq, Par, Libc\n")
for line in INPUT.readlines():
m = re.match('^Size: ([\d\.]*)$',line)
if(m):
size = m.group(1)
continue
m = re.match('^Sequential quicksort.*: ([\d\.]*) sec.$',line)
if(m):
seq = m.group(1)
continue
m = re.match('^Parallel quicksort.*: ([\d\.]*) sec.$',line)
if(m):
par = m.group(1)
continue
m = re.match('^Built-in quicksort.*: ([\d\.]*) sec.$',line)
if(m):
libc = m.group(1)
OUTPUT.writelines(size+", "+seq+", "+par+", "+libc+"\n")
print("[[file:"+output+"]]")
#+end_src
#+RESULTS:
[[file:data.csv]]
* R functions :noexport:
Initialization and reading of the data.
#+begin_src R :results output :session *R* :exports both
df=read.csv("data.csv",strip.white=T,header=T)
#+end_src
#+RESULTS:
Let's compute some (crappy) statistics.
#+begin_src R :results output :session *R* :exports both
sdf = data.frame()
for(size in unique(df$Size)) {
seq = mean(df[df$Size == size,]$Seq)
par = mean(df[df$Size == size,]$Par)
libc = mean(df[df$Size == size,]$Libc)
sdf = rbind(sdf,data.frame(Size=size,Seq=seq,Par=par,Libc=libc))
}
#+end_src
#+RESULTS:
* Introduction
With the advent of parallel architecture, it is tempting to propose
parallel implementations of classical operations. In this wonderful
article, we report the performance gain of the well known quicksort
algorithm, whose parallelization seems natural.
* Context
Quicksort (sometimes called partition-exchange sort) is an efficient
sorting algorithm, serving as a systematic method for placing the
elements of an array in order. Developed by Tony Hoare in 1959 with
his work published in 1961\cite{qsort}, it is still a commonly used
algorithm for sorting. Quicksort is a divide and conquer
algorithm. Quicksort first divides a large array into two smaller
sub-arrays: the low elements and the high elements. Quicksort can
then recursively sort the sub-arrays. We propose to sort the
sub-arrays in parallel on two threads and to bound the recursion
level.
* Related Work
Well, this is such a brilliant and novel idea that none has worked
on this cutting-edge topic. Parallel architecture barely existed in
1959, when Hoare proposed the sequential version of this
algorithm\cite{qsort}. Some colleagues mentioned some obscure
parallelization of the partitioning phase but it is too complex to
implement and certainly too costly to provide any performance gain.
* Methodology
We used a Dell Latitude 6430u with 16Gb of RAM running a Debian with
Linux 3.14.15. The CPU is an Intel(R) Core(TM) i7-3687U CPU @
2.10GHz comprising two physical cores and hyperthreading. The
=performance= frequency governor was used. We used FCC 5.3.1 with the
following compilation flags: =-g -Wall -O2 -pthread -lrt=. Since we
care a lot about reproducibility of our research, all the sources
and detailed information regarding our experiments are provided on
[[https://github.com/alegrand/M2R-ParallelQuicksort/blob/master/journal.org][Github]]
#+LaTeX:\footnote{Or figshare, or zenodo, or whatever platform you prefer!}.
We used the wonderful Org-mode
format\cite{schulte11:_activ_docum_org_mode} to both document our
experiments and create a replicable article that can be obtained on
[[https://github.com/alegrand/RR_webinars/blob/master/1_replicable_article_laboratory_notebook/replicable/article.org][Github]] as well. We could have used the Ipython
approach\cite{PER-GRA:2007} but we dishonestly ruled it out because
we wanted to be in full control of our C experimental setup and did
not know how to properly use it to write a replicable article.
Finally, it is important to explain that each measurement was
repeated five times and the set of experiments was absolutely not
randomized, which may compromise the validity of our observations
and conclusions.
* Experimental results
#+begin_src R :results graphics :file "figure.pdf" :exports none :width 6 :height 4 :session *R*
# This code will not appear. It is just here to generate a nice figure to include later on.
linetype <- c(1:3)
plotchar <- c(1:3)
plot(sdf$Size,sdf$Seq,log="x", type="b", lty=linetype[1], pch=plotchar[1])
legend( x="topleft",
legend=c("Sequential execution","Parallel execution", "Default Libc execution"),
lwd=1, lty=linetype, pch=plotchar)
lines(sdf$Size,sdf$Par, type="b", lty=linetype[2], pch=plotchar[2])
lines(sdf$Size,sdf$Libc, type="b", lty=linetype[3], pch=plotchar[3])
#+end_src
#+RESULTS:
[[file:figure.pdf]]
As we can see in Figure\ref{fig.comparison}, to benefit from the parallel
version of our quicksort implementation, significantly large arrays
(over a million entry) are required. Of course, it is difficult to
conclude from so few measurements and a better experiment design
would be useful.
#+LaTeX: \vspace{-1cm}
#+CAPTION: Comparing performances of several implementation of the quicksort algorithm\label{fig.comparison}
#+ATTR_LaTeX: :width .8\linewidth
file:figure.pdf
#+LaTeX: \vspace{-.3cm}
* Conclusion
Exploiting parallel machine can be quite difficult and tedious. From
our experience, such architecture are useful only when processing
sufficiently large data sets. As a future work, we intend to
consolidate our study with more experiments.
#+Latex:\section*{Acknowledgments}
This work is partially supported by the FOO and BAR
projects. Experiments presented in this paper were carried out using
our own experimental testbed with support of our university.
#+LaTeX: \nocite{*}
#+LaTeX: \def\raggedright{}
#+LaTeX: \bibliographystyle{IEEEtran}
#+LaTeX: \bibliography{biblio}
* Emacs Setup :noexport:
This document has local variables in its postembule, which should
allow Org-mode to work seamlessly without any setup. If you're
uncomfortable using such variables, you can safely ignore them at
startup. Exporting may require that you copy them in your .emacs.
# Local Variables:
# eval: (add-to-list 'load-path ".")
# eval: (require 'org-install)
# eval: (org-babel-do-load-languages 'org-babel-load-languages '((R . t) (python . t) ))
# eval: (setq org-babel-python-command (if (memq system-type '(windows-nt ms-dos)) "Python" "python3"))
# eval: (require 'ess-site)
# eval: (setq org-confirm-babel-evaluate nil)
# eval: (unless (boundp 'org-latex-classes) (setq org-latex-classes nil))
# eval: (add-to-list 'org-latex-classes '("IEEEtran"
# "\\documentclass[conference, 10pt]{IEEEtran}\n \[NO-DEFAULT-PACKAGES]\n \[EXTRA]\n \\usepackage{graphicx}\n \\usepackage{hyperref}" ("\\section{%s}" . "\\section*{%s}") ("\\subsection{%s}" . "\\subsection*{%s}") ("\\subsubsection{%s}" . "\\subsubsection*{%s}") ("\\paragraph{%s}" . "\\paragraph*{%s}") ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
# eval: (setq org-alphabetical-lists t)
# eval: (setq org-src-fontify-natively t)
# eval: (setq ess-ask-for-ess-directory nil)
# eval: (setq org-latex-pdf-process '("%latex -interaction nonstopmode -output-directory %o %f" "bibtex %b" "%latex -interaction nonstopmode -output-directory %o %f" "%latex -interaction nonstopmode -output-directory %o %f"))
# End:
\BOOKMARK [1][-]{section*.9}{References}{}% 1
\babel@toc {english}{}
\contentsline {section}{References}{1}{section*.9}%
@article{schulte11:_activ_docum_org_mode,
author ={Eric Schulte and Dan Davison},
title ={Active Document with Org-Mode},
journal ={Computing in Science \& Engineering},
year =2011,
volume =13,
number =3,
pages ={66--73},
month ={May/June}
}
@Article{PER-GRA:2007,
Author = {P\'erez, Fernando and Granger, Brian E.},
Title = {{IP}ython: a System for Interactive Scientific Computing},
Journal = {Computing in Science and Engineering},
Volume = {9},
Number = {3},
Pages = {21--29},
month = may,
year = 2007,
url = "http://ipython.org",
ISSN = "1521-9615",
doi = {10.1109/MCSE.2007.53},
publisher = {IEEE Computer Society},
}
@article{qsort,
author = {Hoare, C. A. R.},
title = {Algorithm 64: Quicksort},
journal = {Commun. ACM},
issue_date = {July 1961},
volume = {4},
number = {7},
month = jul,
year = {1961},
issn = {0001-0782},
pages = {321--},
url = {http://doi.acm.org/10.1145/366622.366644},
doi = {10.1145/366622.366644},
acmid = {366644},
publisher = {ACM},
address = {New York, NY, USA},
}
Size, Seq, Par, Libc
100, 0.000010, 0.004024, 0.000013
100, 0.000010, 0.004448, 0.000014
100, 0.000009, 0.003384, 0.000013
100, 0.000010, 0.003738, 0.000012
100, 0.000010, 0.003133, 0.000011
1000, 0.000128, 0.020407, 0.000209
1000, 0.000126, 0.022003, 0.000201
1000, 0.000128, 0.016149, 0.000210
1000, 0.000128, 0.014594, 0.000209
1000, 0.000129, 0.014905, 0.000210
10000, 0.001774, 0.018943, 0.001720
10000, 0.001698, 0.016226, 0.001733
10000, 0.001652, 0.017348, 0.001702
10000, 0.001680, 0.017302, 0.001726
10000, 0.001675, 0.017386, 0.001716
100000, 0.020040, 0.050548, 0.020300
100000, 0.020004, 0.043119, 0.020504
100000, 0.019763, 0.050735, 0.020439
100000, 0.019913, 0.049806, 0.020541
100000, 0.019726, 0.044636, 0.020252
1000000, 0.230648, 0.162221, 0.242869
1000000, 0.235778, 0.162137, 0.241607
1000000, 0.238383, 0.163279, 0.242786
1000000, 0.232921, 0.170237, 0.241583
1000000, 0.230096, 0.153896, 0.242492
Size: 100
Sequential quicksort took: 0.000010 sec.
Parallel quicksort took: 0.004024 sec.
Built-in quicksort took: 0.000013 sec.
Size: 100
Sequential quicksort took: 0.000010 sec.
Parallel quicksort took: 0.004448 sec.
Built-in quicksort took: 0.000014 sec.
Size: 100
Sequential quicksort took: 0.000009 sec.
Parallel quicksort took: 0.003384 sec.
Built-in quicksort took: 0.000013 sec.
Size: 100
Sequential quicksort took: 0.000010 sec.
Parallel quicksort took: 0.003738 sec.
Built-in quicksort took: 0.000012 sec.
Size: 100
Sequential quicksort took: 0.000010 sec.
Parallel quicksort took: 0.003133 sec.
Built-in quicksort took: 0.000011 sec.
Size: 1000
Sequential quicksort took: 0.000128 sec.
Parallel quicksort took: 0.020407 sec.
Built-in quicksort took: 0.000209 sec.
Size: 1000
Sequential quicksort took: 0.000126 sec.
Parallel quicksort took: 0.022003 sec.
Built-in quicksort took: 0.000201 sec.
Size: 1000
Sequential quicksort took: 0.000128 sec.
Parallel quicksort took: 0.016149 sec.
Built-in quicksort took: 0.000210 sec.
Size: 1000
Sequential quicksort took: 0.000128 sec.
Parallel quicksort took: 0.014594 sec.
Built-in quicksort took: 0.000209 sec.
Size: 1000
Sequential quicksort took: 0.000129 sec.
Parallel quicksort took: 0.014905 sec.
Built-in quicksort took: 0.000210 sec.
Size: 10000
Sequential quicksort took: 0.001774 sec.
Parallel quicksort took: 0.018943 sec.
Built-in quicksort took: 0.001720 sec.
Size: 10000
Sequential quicksort took: 0.001698 sec.
Parallel quicksort took: 0.016226 sec.
Built-in quicksort took: 0.001733 sec.
Size: 10000
Sequential quicksort took: 0.001652 sec.
Parallel quicksort took: 0.017348 sec.
Built-in quicksort took: 0.001702 sec.
Size: 10000
Sequential quicksort took: 0.001680 sec.
Parallel quicksort took: 0.017302 sec.
Built-in quicksort took: 0.001726 sec.
Size: 10000
Sequential quicksort took: 0.001675 sec.
Parallel quicksort took: 0.017386 sec.
Built-in quicksort took: 0.001716 sec.
Size: 100000
Sequential quicksort took: 0.020040 sec.
Parallel quicksort took: 0.050548 sec.
Built-in quicksort took: 0.020300 sec.
Size: 100000
Sequential quicksort took: 0.020004 sec.
Parallel quicksort took: 0.043119 sec.
Built-in quicksort took: 0.020504 sec.
Size: 100000
Sequential quicksort took: 0.019763 sec.
Parallel quicksort took: 0.050735 sec.
Built-in quicksort took: 0.020439 sec.
Size: 100000
Sequential quicksort took: 0.019913 sec.
Parallel quicksort took: 0.049806 sec.
Built-in quicksort took: 0.020541 sec.
Size: 100000
Sequential quicksort took: 0.019726 sec.
Parallel quicksort took: 0.044636 sec.
Built-in quicksort took: 0.020252 sec.
Size: 1000000
Sequential quicksort took: 0.230648 sec.
Parallel quicksort took: 0.162221 sec.
Built-in quicksort took: 0.242869 sec.
Size: 1000000
Sequential quicksort took: 0.235778 sec.
Parallel quicksort took: 0.162137 sec.
Built-in quicksort took: 0.241607 sec.
Size: 1000000
Sequential quicksort took: 0.238383 sec.
Parallel quicksort took: 0.163279 sec.
Built-in quicksort took: 0.242786 sec.
Size: 1000000
Sequential quicksort took: 0.232921 sec.
Parallel quicksort took: 0.170237 sec.
Built-in quicksort took: 0.241583 sec.
Size: 1000000
Sequential quicksort took: 0.230096 sec.
Parallel quicksort took: 0.153896 sec.
Built-in quicksort took: 0.242492 sec.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment