shaocongma commited on
Commit
8d2591b
1 Parent(s): 1012e47

Reformat LLM interaction logic. Update prompts.

Browse files

Bug fix:
huggingchat package doesn't work; directly using Specter API instead.

New UI to include prompts mode and domain knowledge.

Testing:
Access the domain knowledge database.

app.py CHANGED
@@ -134,7 +134,7 @@ def wrapped_generator(
134
  tldr=True, max_kw_refs=10, bib_refs=None, max_tokens_ref=2048, # references
135
  knowledge_database=None, max_tokens_kd=2048, query_counts=10, # domain knowledge
136
  paper_template="ICLR2022", selected_sections=None, model="gpt-4", prompts_mode=False, # outputs parameters
137
- cache_mode=IS_CACHE_AVAILABLE # handle cache mode
138
  ):
139
  # if `cache_mode` is True, then follow the following steps:
140
  # check if "title"+"description" have been generated before
@@ -271,16 +271,16 @@ with gr.Blocks(theme=theme) as demo:
271
  clear_button_pp = gr.Button("Clear")
272
  submit_button_pp = gr.Button("Submit", variant="primary")
273
 
274
- # with gr.Tab("文献搜索"):
275
- # gr.Markdown(REFERENCES)
276
- #
277
- # title_refs = gr.Textbox(value="Playing Atari with Deep Reinforcement Learning", lines=1, max_lines=1,
278
- # label="Title", info="论文标题")
279
- # slider_refs = gr.Slider(minimum=1, maximum=100, value=5, step=1,
280
- # interactive=True, label="最相关的参考文献数目")
281
- # with gr.Row():
282
- # clear_button_refs = gr.Button("Clear")
283
- # submit_button_refs = gr.Button("Submit", variant="primary")
284
 
285
  with gr.Tab("文献综述 (Coming soon!)"):
286
  gr.Markdown('''
@@ -312,9 +312,9 @@ with gr.Blocks(theme=theme) as demo:
312
  domain_knowledge, max_tokens_kd_slider, query_counts_slider,
313
  template, sections, model_selection, prompts_mode], outputs=file_output)
314
 
315
- # clear_button_refs.click(fn=clear_inputs_refs, inputs=[title_refs, slider_refs], outputs=[title_refs, slider_refs])
316
- # submit_button_refs.click(fn=wrapped_references_generator,
317
- # inputs=[title_refs, slider_refs, key], outputs=json_output)
318
 
319
  demo.queue(concurrency_count=1, max_size=5, api_open=False)
320
  demo.launch(show_error=True)
 
134
  tldr=True, max_kw_refs=10, bib_refs=None, max_tokens_ref=2048, # references
135
  knowledge_database=None, max_tokens_kd=2048, query_counts=10, # domain knowledge
136
  paper_template="ICLR2022", selected_sections=None, model="gpt-4", prompts_mode=False, # outputs parameters
137
+ cache_mode=False # IS_CACHE_AVAILABLE # handle cache mode
138
  ):
139
  # if `cache_mode` is True, then follow the following steps:
140
  # check if "title"+"description" have been generated before
 
271
  clear_button_pp = gr.Button("Clear")
272
  submit_button_pp = gr.Button("Submit", variant="primary")
273
 
274
+ with gr.Tab("文献搜索"):
275
+ gr.Markdown(REFERENCES)
276
+
277
+ title_refs = gr.Textbox(value="Playing Atari with Deep Reinforcement Learning", lines=1, max_lines=1,
278
+ label="Title", info="论文标题")
279
+ slider_refs = gr.Slider(minimum=1, maximum=100, value=5, step=1,
280
+ interactive=True, label="最相关的参考文献数目")
281
+ with gr.Row():
282
+ clear_button_refs = gr.Button("Clear")
283
+ submit_button_refs = gr.Button("Submit", variant="primary")
284
 
285
  with gr.Tab("文献综述 (Coming soon!)"):
286
  gr.Markdown('''
 
312
  domain_knowledge, max_tokens_kd_slider, query_counts_slider,
313
  template, sections, model_selection, prompts_mode], outputs=file_output)
314
 
315
+ clear_button_refs.click(fn=clear_inputs_refs, inputs=[title_refs, slider_refs], outputs=[title_refs, slider_refs])
316
+ submit_button_refs.click(fn=wrapped_references_generator,
317
+ inputs=[title_refs, slider_refs, key], outputs=json_output)
318
 
319
  demo.queue(concurrency_count=1, max_size=5, api_open=False)
320
  demo.launch(show_error=True)
auto_backgrounds.py CHANGED
@@ -5,7 +5,6 @@ from utils.knowledge import Knowledge
5
  from utils.file_operations import hash_name, make_archive, copy_templates
6
  from utils.tex_processing import create_copies
7
  from section_generator import section_generation # figures_generation, section_generation_bg, keywords_generation,
8
- from utils.prompts import generate_paper_prompts
9
  import logging
10
  import time
11
  from langchain.vectorstores import FAISS
@@ -146,7 +145,6 @@ def _generation_setup(title, description="", template="ICLR2022",
146
  print(f"Failed to query from FAISS. Error {e}. Use empty domain knowledge instead.")
147
  domain_knowledge = ""
148
  else:
149
- print("Selected database doesn't exist or no database is selected.")
150
  domain_knowledge = ""
151
 
152
  ###################################################################################################################
@@ -251,14 +249,8 @@ def generate_draft(title, description="", # main input
251
  knowledge_database=knowledge_database)
252
 
253
  # main components
254
- prompts_dict = {}
255
  print(f"================PROCESSING================")
256
  for section in sections:
257
- if prompts_mode:
258
- prompts = generate_paper_prompts(paper, section)
259
- prompts_dict[section] = prompts
260
- continue
261
-
262
  print(f"Generate {section} part...")
263
  max_attempts = 4
264
  attempts_count = 0
@@ -281,14 +273,7 @@ def generate_draft(title, description="", # main input
281
  input_dict = {"title": title, "description": description, "generator": "generate_draft"}
282
  filename = hash_name(input_dict) + ".zip"
283
  print("\nMission completed.\n")
284
-
285
- if prompts_mode:
286
- filename = hash_name(input_dict) + ".json"
287
- with open(filename, "w") as f:
288
- json.dump(prompts_dict, f)
289
- return filename
290
- else:
291
- return make_archive(destination_folder, filename)
292
 
293
 
294
  if __name__ == "__main__":
 
5
  from utils.file_operations import hash_name, make_archive, copy_templates
6
  from utils.tex_processing import create_copies
7
  from section_generator import section_generation # figures_generation, section_generation_bg, keywords_generation,
 
8
  import logging
9
  import time
10
  from langchain.vectorstores import FAISS
 
145
  print(f"Failed to query from FAISS. Error {e}. Use empty domain knowledge instead.")
146
  domain_knowledge = ""
147
  else:
 
148
  domain_knowledge = ""
149
 
150
  ###################################################################################################################
 
249
  knowledge_database=knowledge_database)
250
 
251
  # main components
 
252
  print(f"================PROCESSING================")
253
  for section in sections:
 
 
 
 
 
254
  print(f"Generate {section} part...")
255
  max_attempts = 4
256
  attempts_count = 0
 
273
  input_dict = {"title": title, "description": description, "generator": "generate_draft"}
274
  filename = hash_name(input_dict) + ".zip"
275
  print("\nMission completed.\n")
276
+ return make_archive(destination_folder, filename)
 
 
 
 
 
 
 
277
 
278
 
279
  if __name__ == "__main__":
latex_templates/Default/fancyhdr.sty DELETED
@@ -1,485 +0,0 @@
1
- % fancyhdr.sty version 3.2
2
- % Fancy headers and footers for LaTeX.
3
- % Piet van Oostrum,
4
- % Dept of Computer and Information Sciences, University of Utrecht,
5
- % Padualaan 14, P.O. Box 80.089, 3508 TB Utrecht, The Netherlands
6
- % Telephone: +31 30 2532180. Email: piet@cs.uu.nl
7
- % ========================================================================
8
- % LICENCE:
9
- % This file may be distributed under the terms of the LaTeX Project Public
10
- % License, as described in lppl.txt in the base LaTeX distribution.
11
- % Either version 1 or, at your option, any later version.
12
- % ========================================================================
13
- % MODIFICATION HISTORY:
14
- % Sep 16, 1994
15
- % version 1.4: Correction for use with \reversemargin
16
- % Sep 29, 1994:
17
- % version 1.5: Added the \iftopfloat, \ifbotfloat and \iffloatpage commands
18
- % Oct 4, 1994:
19
- % version 1.6: Reset single spacing in headers/footers for use with
20
- % setspace.sty or doublespace.sty
21
- % Oct 4, 1994:
22
- % version 1.7: changed \let\@mkboth\markboth to
23
- % \def\@mkboth{\protect\markboth} to make it more robust
24
- % Dec 5, 1994:
25
- % version 1.8: corrections for amsbook/amsart: define \@chapapp and (more
26
- % importantly) use the \chapter/sectionmark definitions from ps@headings if
27
- % they exist (which should be true for all standard classes).
28
- % May 31, 1995:
29
- % version 1.9: The proposed \renewcommand{\headrulewidth}{\iffloatpage...
30
- % construction in the doc did not work properly with the fancyplain style.
31
- % June 1, 1995:
32
- % version 1.91: The definition of \@mkboth wasn't restored on subsequent
33
- % \pagestyle{fancy}'s.
34
- % June 1, 1995:
35
- % version 1.92: The sequence \pagestyle{fancyplain} \pagestyle{plain}
36
- % \pagestyle{fancy} would erroneously select the plain version.
37
- % June 1, 1995:
38
- % version 1.93: \fancypagestyle command added.
39
- % Dec 11, 1995:
40
- % version 1.94: suggested by Conrad Hughes <chughes@maths.tcd.ie>
41
- % CJCH, Dec 11, 1995: added \footruleskip to allow control over footrule
42
- % position (old hardcoded value of .3\normalbaselineskip is far too high
43
- % when used with very small footer fonts).
44
- % Jan 31, 1996:
45
- % version 1.95: call \@normalsize in the reset code if that is defined,
46
- % otherwise \normalsize.
47
- % this is to solve a problem with ucthesis.cls, as this doesn't
48
- % define \@currsize. Unfortunately for latex209 calling \normalsize doesn't
49
- % work as this is optimized to do very little, so there \@normalsize should
50
- % be called. Hopefully this code works for all versions of LaTeX known to
51
- % mankind.
52
- % April 25, 1996:
53
- % version 1.96: initialize \headwidth to a magic (negative) value to catch
54
- % most common cases that people change it before calling \pagestyle{fancy}.
55
- % Note it can't be initialized when reading in this file, because
56
- % \textwidth could be changed afterwards. This is quite probable.
57
- % We also switch to \MakeUppercase rather than \uppercase and introduce a
58
- % \nouppercase command for use in headers. and footers.
59
- % May 3, 1996:
60
- % version 1.97: Two changes:
61
- % 1. Undo the change in version 1.8 (using the pagestyle{headings} defaults
62
- % for the chapter and section marks. The current version of amsbook and
63
- % amsart classes don't seem to need them anymore. Moreover the standard
64
- % latex classes don't use \markboth if twoside isn't selected, and this is
65
- % confusing as \leftmark doesn't work as expected.
66
- % 2. include a call to \ps@empty in ps@@fancy. This is to solve a problem
67
- % in the amsbook and amsart classes, that make global changes to \topskip,
68
- % which are reset in \ps@empty. Hopefully this doesn't break other things.
69
- % May 7, 1996:
70
- % version 1.98:
71
- % Added % after the line \def\nouppercase
72
- % May 7, 1996:
73
- % version 1.99: This is the alpha version of fancyhdr 2.0
74
- % Introduced the new commands \fancyhead, \fancyfoot, and \fancyhf.
75
- % Changed \headrulewidth, \footrulewidth, \footruleskip to
76
- % macros rather than length parameters, In this way they can be
77
- % conditionalized and they don't consume length registers. There is no need
78
- % to have them as length registers unless you want to do calculations with
79
- % them, which is unlikely. Note that this may make some uses of them
80
- % incompatible (i.e. if you have a file that uses \setlength or \xxxx=)
81
- % May 10, 1996:
82
- % version 1.99a:
83
- % Added a few more % signs
84
- % May 10, 1996:
85
- % version 1.99b:
86
- % Changed the syntax of \f@nfor to be resistent to catcode changes of :=
87
- % Removed the [1] from the defs of \lhead etc. because the parameter is
88
- % consumed by the \@[xy]lhead etc. macros.
89
- % June 24, 1997:
90
- % version 1.99c:
91
- % corrected \nouppercase to also include the protected form of \MakeUppercase
92
- % \global added to manipulation of \headwidth.
93
- % \iffootnote command added.
94
- % Some comments added about \@fancyhead and \@fancyfoot.
95
- % Aug 24, 1998
96
- % version 1.99d
97
- % Changed the default \ps@empty to \ps@@empty in order to allow
98
- % \fancypagestyle{empty} redefinition.
99
- % Oct 11, 2000
100
- % version 2.0
101
- % Added LPPL license clause.
102
- %
103
- % A check for \headheight is added. An errormessage is given (once) if the
104
- % header is too large. Empty headers don't generate the error even if
105
- % \headheight is very small or even 0pt.
106
- % Warning added for the use of 'E' option when twoside option is not used.
107
- % In this case the 'E' fields will never be used.
108
- %
109
- % Mar 10, 2002
110
- % version 2.1beta
111
- % New command: \fancyhfoffset[place]{length}
112
- % defines offsets to be applied to the header/footer to let it stick into
113
- % the margins (if length > 0).
114
- % place is like in fancyhead, except that only E,O,L,R can be used.
115
- % This replaces the old calculation based on \headwidth and the marginpar
116
- % area.
117
- % \headwidth will be dynamically calculated in the headers/footers when
118
- % this is used.
119
- %
120
- % Mar 26, 2002
121
- % version 2.1beta2
122
- % \fancyhfoffset now also takes h,f as possible letters in the argument to
123
- % allow the header and footer widths to be different.
124
- % New commands \fancyheadoffset and \fancyfootoffset added comparable to
125
- % \fancyhead and \fancyfoot.
126
- % Errormessages and warnings have been made more informative.
127
- %
128
- % Dec 9, 2002
129
- % version 2.1
130
- % The defaults for \footrulewidth, \plainheadrulewidth and
131
- % \plainfootrulewidth are changed from \z@skip to 0pt. In this way when
132
- % someone inadvertantly uses \setlength to change any of these, the value
133
- % of \z@skip will not be changed, rather an errormessage will be given.
134
-
135
- % March 3, 2004
136
- % Release of version 3.0
137
-
138
- % Oct 7, 2004
139
- % version 3.1
140
- % Added '\endlinechar=13' to \fancy@reset to prevent problems with
141
- % includegraphics in header when verbatiminput is active.
142
-
143
- % March 22, 2005
144
- % version 3.2
145
- % reset \everypar (the real one) in \fancy@reset because spanish.ldf does
146
- % strange things with \everypar between << and >>.
147
-
148
- \def\ifancy@mpty#1{\def\temp@a{#1}\ifx\temp@a\@empty}
149
-
150
- \def\fancy@def#1#2{\ifancy@mpty{#2}\fancy@gbl\def#1{\leavevmode}\else
151
- \fancy@gbl\def#1{#2\strut}\fi}
152
-
153
- \let\fancy@gbl\global
154
-
155
- \def\@fancyerrmsg#1{%
156
- \ifx\PackageError\undefined
157
- \errmessage{#1}\else
158
- \PackageError{Fancyhdr}{#1}{}\fi}
159
- \def\@fancywarning#1{%
160
- \ifx\PackageWarning\undefined
161
- \errmessage{#1}\else
162
- \PackageWarning{Fancyhdr}{#1}{}\fi}
163
-
164
- % Usage: \@forc \var{charstring}{command to be executed for each char}
165
- % This is similar to LaTeX's \@tfor, but expands the charstring.
166
-
167
- \def\@forc#1#2#3{\expandafter\f@rc\expandafter#1\expandafter{#2}{#3}}
168
- \def\f@rc#1#2#3{\def\temp@ty{#2}\ifx\@empty\temp@ty\else
169
- \f@@rc#1#2\f@@rc{#3}\fi}
170
- \def\f@@rc#1#2#3\f@@rc#4{\def#1{#2}#4\f@rc#1{#3}{#4}}
171
-
172
- % Usage: \f@nfor\name:=list\do{body}
173
- % Like LaTeX's \@for but an empty list is treated as a list with an empty
174
- % element
175
-
176
- \newcommand{\f@nfor}[3]{\edef\@fortmp{#2}%
177
- \expandafter\@forloop#2,\@nil,\@nil\@@#1{#3}}
178
-
179
- % Usage: \def@ult \cs{defaults}{argument}
180
- % sets \cs to the characters from defaults appearing in argument
181
- % or defaults if it would be empty. All characters are lowercased.
182
-
183
- \newcommand\def@ult[3]{%
184
- \edef\temp@a{\lowercase{\edef\noexpand\temp@a{#3}}}\temp@a
185
- \def#1{}%
186
- \@forc\tmpf@ra{#2}%
187
- {\expandafter\if@in\tmpf@ra\temp@a{\edef#1{#1\tmpf@ra}}{}}%
188
- \ifx\@empty#1\def#1{#2}\fi}
189
- %
190
- % \if@in <char><set><truecase><falsecase>
191
- %
192
- \newcommand{\if@in}[4]{%
193
- \edef\temp@a{#2}\def\temp@b##1#1##2\temp@b{\def\temp@b{##1}}%
194
- \expandafter\temp@b#2#1\temp@b\ifx\temp@a\temp@b #4\else #3\fi}
195
-
196
- \newcommand{\fancyhead}{\@ifnextchar[{\f@ncyhf\fancyhead h}%
197
- {\f@ncyhf\fancyhead h[]}}
198
- \newcommand{\fancyfoot}{\@ifnextchar[{\f@ncyhf\fancyfoot f}%
199
- {\f@ncyhf\fancyfoot f[]}}
200
- \newcommand{\fancyhf}{\@ifnextchar[{\f@ncyhf\fancyhf{}}%
201
- {\f@ncyhf\fancyhf{}[]}}
202
-
203
- % New commands for offsets added
204
-
205
- \newcommand{\fancyheadoffset}{\@ifnextchar[{\f@ncyhfoffs\fancyheadoffset h}%
206
- {\f@ncyhfoffs\fancyheadoffset h[]}}
207
- \newcommand{\fancyfootoffset}{\@ifnextchar[{\f@ncyhfoffs\fancyfootoffset f}%
208
- {\f@ncyhfoffs\fancyfootoffset f[]}}
209
- \newcommand{\fancyhfoffset}{\@ifnextchar[{\f@ncyhfoffs\fancyhfoffset{}}%
210
- {\f@ncyhfoffs\fancyhfoffset{}[]}}
211
-
212
- % The header and footer fields are stored in command sequences with
213
- % names of the form: \f@ncy<x><y><z> with <x> for [eo], <y> from [lcr]
214
- % and <z> from [hf].
215
-
216
- \def\f@ncyhf#1#2[#3]#4{%
217
- \def\temp@c{}%
218
- \@forc\tmpf@ra{#3}%
219
- {\expandafter\if@in\tmpf@ra{eolcrhf,EOLCRHF}%
220
- {}{\edef\temp@c{\temp@c\tmpf@ra}}}%
221
- \ifx\@empty\temp@c\else
222
- \@fancyerrmsg{Illegal char `\temp@c' in \string#1 argument:
223
- [#3]}%
224
- \fi
225
- \f@nfor\temp@c{#3}%
226
- {\def@ult\f@@@eo{eo}\temp@c
227
- \if@twoside\else
228
- \if\f@@@eo e\@fancywarning
229
- {\string#1's `E' option without twoside option is useless}\fi\fi
230
- \def@ult\f@@@lcr{lcr}\temp@c
231
- \def@ult\f@@@hf{hf}{#2\temp@c}%
232
- \@forc\f@@eo\f@@@eo
233
- {\@forc\f@@lcr\f@@@lcr
234
- {\@forc\f@@hf\f@@@hf
235
- {\expandafter\fancy@def\csname
236
- f@ncy\f@@eo\f@@lcr\f@@hf\endcsname
237
- {#4}}}}}}
238
-
239
- \def\f@ncyhfoffs#1#2[#3]#4{%
240
- \def\temp@c{}%
241
- \@forc\tmpf@ra{#3}%
242
- {\expandafter\if@in\tmpf@ra{eolrhf,EOLRHF}%
243
- {}{\edef\temp@c{\temp@c\tmpf@ra}}}%
244
- \ifx\@empty\temp@c\else
245
- \@fancyerrmsg{Illegal char `\temp@c' in \string#1 argument:
246
- [#3]}%
247
- \fi
248
- \f@nfor\temp@c{#3}%
249
- {\def@ult\f@@@eo{eo}\temp@c
250
- \if@twoside\else
251
- \if\f@@@eo e\@fancywarning
252
- {\string#1's `E' option without twoside option is useless}\fi\fi
253
- \def@ult\f@@@lcr{lr}\temp@c
254
- \def@ult\f@@@hf{hf}{#2\temp@c}%
255
- \@forc\f@@eo\f@@@eo
256
- {\@forc\f@@lcr\f@@@lcr
257
- {\@forc\f@@hf\f@@@hf
258
- {\expandafter\setlength\csname
259
- f@ncyO@\f@@eo\f@@lcr\f@@hf\endcsname
260
- {#4}}}}}%
261
- \fancy@setoffs}
262
-
263
- % Fancyheadings version 1 commands. These are more or less deprecated,
264
- % but they continue to work.
265
-
266
- \newcommand{\lhead}{\@ifnextchar[{\@xlhead}{\@ylhead}}
267
- \def\@xlhead[#1]#2{\fancy@def\f@ncyelh{#1}\fancy@def\f@ncyolh{#2}}
268
- \def\@ylhead#1{\fancy@def\f@ncyelh{#1}\fancy@def\f@ncyolh{#1}}
269
-
270
- \newcommand{\chead}{\@ifnextchar[{\@xchead}{\@ychead}}
271
- \def\@xchead[#1]#2{\fancy@def\f@ncyech{#1}\fancy@def\f@ncyoch{#2}}
272
- \def\@ychead#1{\fancy@def\f@ncyech{#1}\fancy@def\f@ncyoch{#1}}
273
-
274
- \newcommand{\rhead}{\@ifnextchar[{\@xrhead}{\@yrhead}}
275
- \def\@xrhead[#1]#2{\fancy@def\f@ncyerh{#1}\fancy@def\f@ncyorh{#2}}
276
- \def\@yrhead#1{\fancy@def\f@ncyerh{#1}\fancy@def\f@ncyorh{#1}}
277
-
278
- \newcommand{\lfoot}{\@ifnextchar[{\@xlfoot}{\@ylfoot}}
279
- \def\@xlfoot[#1]#2{\fancy@def\f@ncyelf{#1}\fancy@def\f@ncyolf{#2}}
280
- \def\@ylfoot#1{\fancy@def\f@ncyelf{#1}\fancy@def\f@ncyolf{#1}}
281
-
282
- \newcommand{\cfoot}{\@ifnextchar[{\@xcfoot}{\@ycfoot}}
283
- \def\@xcfoot[#1]#2{\fancy@def\f@ncyecf{#1}\fancy@def\f@ncyocf{#2}}
284
- \def\@ycfoot#1{\fancy@def\f@ncyecf{#1}\fancy@def\f@ncyocf{#1}}
285
-
286
- \newcommand{\rfoot}{\@ifnextchar[{\@xrfoot}{\@yrfoot}}
287
- \def\@xrfoot[#1]#2{\fancy@def\f@ncyerf{#1}\fancy@def\f@ncyorf{#2}}
288
- \def\@yrfoot#1{\fancy@def\f@ncyerf{#1}\fancy@def\f@ncyorf{#1}}
289
-
290
- \newlength{\fancy@headwidth}
291
- \let\headwidth\fancy@headwidth
292
- \newlength{\f@ncyO@elh}
293
- \newlength{\f@ncyO@erh}
294
- \newlength{\f@ncyO@olh}
295
- \newlength{\f@ncyO@orh}
296
- \newlength{\f@ncyO@elf}
297
- \newlength{\f@ncyO@erf}
298
- \newlength{\f@ncyO@olf}
299
- \newlength{\f@ncyO@orf}
300
- \newcommand{\headrulewidth}{0.4pt}
301
- \newcommand{\footrulewidth}{0pt}
302
- \newcommand{\footruleskip}{.3\normalbaselineskip}
303
-
304
- % Fancyplain stuff shouldn't be used anymore (rather
305
- % \fancypagestyle{plain} should be used), but it must be present for
306
- % compatibility reasons.
307
-
308
- \newcommand{\plainheadrulewidth}{0pt}
309
- \newcommand{\plainfootrulewidth}{0pt}
310
- \newif\if@fancyplain \@fancyplainfalse
311
- \def\fancyplain#1#2{\if@fancyplain#1\else#2\fi}
312
-
313
- \headwidth=-123456789sp %magic constant
314
-
315
- % Command to reset various things in the headers:
316
- % a.o. single spacing (taken from setspace.sty)
317
- % and the catcode of ^^M (so that epsf files in the header work if a
318
- % verbatim crosses a page boundary)
319
- % It also defines a \nouppercase command that disables \uppercase and
320
- % \Makeuppercase. It can only be used in the headers and footers.
321
- \let\fnch@everypar\everypar% save real \everypar because of spanish.ldf
322
- \def\fancy@reset{\fnch@everypar{}\restorecr\endlinechar=13
323
- \def\baselinestretch{1}%
324
- \def\nouppercase##1{{\let\uppercase\relax\let\MakeUppercase\relax
325
- \expandafter\let\csname MakeUppercase \endcsname\relax##1}}%
326
- \ifx\undefined\@newbaseline% NFSS not present; 2.09 or 2e
327
- \ifx\@normalsize\undefined \normalsize % for ucthesis.cls
328
- \else \@normalsize \fi
329
- \else% NFSS (2.09) present
330
- \@newbaseline%
331
- \fi}
332
-
333
- % Initialization of the head and foot text.
334
-
335
- % The default values still contain \fancyplain for compatibility.
336
- \fancyhf{} % clear all
337
- % lefthead empty on ``plain'' pages, \rightmark on even, \leftmark on odd pages
338
- % evenhead empty on ``plain'' pages, \leftmark on even, \rightmark on odd pages
339
- \if@twoside
340
- \fancyhead[el,or]{\fancyplain{}{\sl\rightmark}}
341
- \fancyhead[er,ol]{\fancyplain{}{\sl\leftmark}}
342
- \else
343
- \fancyhead[l]{\fancyplain{}{\sl\rightmark}}
344
- \fancyhead[r]{\fancyplain{}{\sl\leftmark}}
345
- \fi
346
- \fancyfoot[c]{\rm\thepage} % page number
347
-
348
- % Use box 0 as a temp box and dimen 0 as temp dimen.
349
- % This can be done, because this code will always
350
- % be used inside another box, and therefore the changes are local.
351
-
352
- \def\@fancyvbox#1#2{\setbox0\vbox{#2}\ifdim\ht0>#1\@fancywarning
353
- {\string#1 is too small (\the#1): ^^J Make it at least \the\ht0.^^J
354
- We now make it that large for the rest of the document.^^J
355
- This may cause the page layout to be inconsistent, however\@gobble}%
356
- \dimen0=#1\global\setlength{#1}{\ht0}\ht0=\dimen0\fi
357
- \box0}
358
-
359
- % Put together a header or footer given the left, center and
360
- % right text, fillers at left and right and a rule.
361
- % The \lap commands put the text into an hbox of zero size,
362
- % so overlapping text does not generate an errormessage.
363
- % These macros have 5 parameters:
364
- % 1. LEFTSIDE BEARING % This determines at which side the header will stick
365
- % out. When \fancyhfoffset is used this calculates \headwidth, otherwise
366
- % it is \hss or \relax (after expansion).
367
- % 2. \f@ncyolh, \f@ncyelh, \f@ncyolf or \f@ncyelf. This is the left component.
368
- % 3. \f@ncyoch, \f@ncyech, \f@ncyocf or \f@ncyecf. This is the middle comp.
369
- % 4. \f@ncyorh, \f@ncyerh, \f@ncyorf or \f@ncyerf. This is the right component.
370
- % 5. RIGHTSIDE BEARING. This is always \relax or \hss (after expansion).
371
-
372
- \def\@fancyhead#1#2#3#4#5{#1\hbox to\headwidth{\fancy@reset
373
- \@fancyvbox\headheight{\hbox
374
- {\rlap{\parbox[b]{\headwidth}{\raggedright#2}}\hfill
375
- \parbox[b]{\headwidth}{\centering#3}\hfill
376
- \llap{\parbox[b]{\headwidth}{\raggedleft#4}}}\headrule}}#5}
377
-
378
- \def\@fancyfoot#1#2#3#4#5{#1\hbox to\headwidth{\fancy@reset
379
- \@fancyvbox\footskip{\footrule
380
- \hbox{\rlap{\parbox[t]{\headwidth}{\raggedright#2}}\hfill
381
- \parbox[t]{\headwidth}{\centering#3}\hfill
382
- \llap{\parbox[t]{\headwidth}{\raggedleft#4}}}}}#5}
383
-
384
- \def\headrule{{\if@fancyplain\let\headrulewidth\plainheadrulewidth\fi
385
- \hrule\@height\headrulewidth\@width\headwidth \vskip-\headrulewidth}}
386
-
387
- \def\footrule{{\if@fancyplain\let\footrulewidth\plainfootrulewidth\fi
388
- \vskip-\footruleskip\vskip-\footrulewidth
389
- \hrule\@width\headwidth\@height\footrulewidth\vskip\footruleskip}}
390
-
391
- \def\ps@fancy{%
392
- \@ifundefined{@chapapp}{\let\@chapapp\chaptername}{}%for amsbook
393
- %
394
- % Define \MakeUppercase for old LaTeXen.
395
- % Note: we used \def rather than \let, so that \let\uppercase\relax (from
396
- % the version 1 documentation) will still work.
397
- %
398
- \@ifundefined{MakeUppercase}{\def\MakeUppercase{\uppercase}}{}%
399
- \@ifundefined{chapter}{\def\sectionmark##1{\markboth
400
- {\MakeUppercase{\ifnum \c@secnumdepth>\z@
401
- \thesection\hskip 1em\relax \fi ##1}}{}}%
402
- \def\subsectionmark##1{\markright {\ifnum \c@secnumdepth >\@ne
403
- \thesubsection\hskip 1em\relax \fi ##1}}}%
404
- {\def\chaptermark##1{\markboth {\MakeUppercase{\ifnum \c@secnumdepth>\m@ne
405
- \@chapapp\ \thechapter. \ \fi ##1}}{}}%
406
- \def\sectionmark##1{\markright{\MakeUppercase{\ifnum \c@secnumdepth >\z@
407
- \thesection. \ \fi ##1}}}}%
408
- %\csname ps@headings\endcsname % use \ps@headings defaults if they exist
409
- \ps@@fancy
410
- \gdef\ps@fancy{\@fancyplainfalse\ps@@fancy}%
411
- % Initialize \headwidth if the user didn't
412
- %
413
- \ifdim\headwidth<0sp
414
- %
415
- % This catches the case that \headwidth hasn't been initialized and the
416
- % case that the user added something to \headwidth in the expectation that
417
- % it was initialized to \textwidth. We compensate this now. This loses if
418
- % the user intended to multiply it by a factor. But that case is more
419
- % likely done by saying something like \headwidth=1.2\textwidth.
420
- % The doc says you have to change \headwidth after the first call to
421
- % \pagestyle{fancy}. This code is just to catch the most common cases were
422
- % that requirement is violated.
423
- %
424
- \global\advance\headwidth123456789sp\global\advance\headwidth\textwidth
425
- \fi}
426
- \def\ps@fancyplain{\ps@fancy \let\ps@plain\ps@plain@fancy}
427
- \def\ps@plain@fancy{\@fancyplaintrue\ps@@fancy}
428
- \let\ps@@empty\ps@empty
429
- \def\ps@@fancy{%
430
- \ps@@empty % This is for amsbook/amsart, which do strange things with \topskip
431
- \def\@mkboth{\protect\markboth}%
432
- \def\@oddhead{\@fancyhead\fancy@Oolh\f@ncyolh\f@ncyoch\f@ncyorh\fancy@Oorh}%
433
- \def\@oddfoot{\@fancyfoot\fancy@Oolf\f@ncyolf\f@ncyocf\f@ncyorf\fancy@Oorf}%
434
- \def\@evenhead{\@fancyhead\fancy@Oelh\f@ncyelh\f@ncyech\f@ncyerh\fancy@Oerh}%
435
- \def\@evenfoot{\@fancyfoot\fancy@Oelf\f@ncyelf\f@ncyecf\f@ncyerf\fancy@Oerf}%
436
- }
437
- % Default definitions for compatibility mode:
438
- % These cause the header/footer to take the defined \headwidth as width
439
- % And to shift in the direction of the marginpar area
440
-
441
- \def\fancy@Oolh{\if@reversemargin\hss\else\relax\fi}
442
- \def\fancy@Oorh{\if@reversemargin\relax\else\hss\fi}
443
- \let\fancy@Oelh\fancy@Oorh
444
- \let\fancy@Oerh\fancy@Oolh
445
-
446
- \let\fancy@Oolf\fancy@Oolh
447
- \let\fancy@Oorf\fancy@Oorh
448
- \let\fancy@Oelf\fancy@Oelh
449
- \let\fancy@Oerf\fancy@Oerh
450
-
451
- % New definitions for the use of \fancyhfoffset
452
- % These calculate the \headwidth from \textwidth and the specified offsets.
453
-
454
- \def\fancy@offsolh{\headwidth=\textwidth\advance\headwidth\f@ncyO@olh
455
- \advance\headwidth\f@ncyO@orh\hskip-\f@ncyO@olh}
456
- \def\fancy@offselh{\headwidth=\textwidth\advance\headwidth\f@ncyO@elh
457
- \advance\headwidth\f@ncyO@erh\hskip-\f@ncyO@elh}
458
-
459
- \def\fancy@offsolf{\headwidth=\textwidth\advance\headwidth\f@ncyO@olf
460
- \advance\headwidth\f@ncyO@orf\hskip-\f@ncyO@olf}
461
- \def\fancy@offself{\headwidth=\textwidth\advance\headwidth\f@ncyO@elf
462
- \advance\headwidth\f@ncyO@erf\hskip-\f@ncyO@elf}
463
-
464
- \def\fancy@setoffs{%
465
- % Just in case \let\headwidth\textwidth was used
466
- \fancy@gbl\let\headwidth\fancy@headwidth
467
- \fancy@gbl\let\fancy@Oolh\fancy@offsolh
468
- \fancy@gbl\let\fancy@Oelh\fancy@offselh
469
- \fancy@gbl\let\fancy@Oorh\hss
470
- \fancy@gbl\let\fancy@Oerh\hss
471
- \fancy@gbl\let\fancy@Oolf\fancy@offsolf
472
- \fancy@gbl\let\fancy@Oelf\fancy@offself
473
- \fancy@gbl\let\fancy@Oorf\hss
474
- \fancy@gbl\let\fancy@Oerf\hss}
475
-
476
- \newif\iffootnote
477
- \let\latex@makecol\@makecol
478
- \def\@makecol{\ifvoid\footins\footnotetrue\else\footnotefalse\fi
479
- \let\topfloat\@toplist\let\botfloat\@botlist\latex@makecol}
480
- \def\iftopfloat#1#2{\ifx\topfloat\empty #2\else #1\fi}
481
- \def\ifbotfloat#1#2{\ifx\botfloat\empty #2\else #1\fi}
482
- \def\iffloatpage#1#2{\if@fcolmade #1\else #2\fi}
483
-
484
- \newcommand{\fancypagestyle}[2]{%
485
- \@namedef{ps@#1}{\let\fancy@gbl\relax#2\relax\ps@fancy}}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
latex_templates/Default/fig.png DELETED
Binary file (13 kB)
 
latex_templates/Default/iclr2022_conference.bst DELETED
@@ -1,1440 +0,0 @@
1
- %% File: `iclr2017.bst'
2
- %% A copy of iclm2010.bst, which is a modification of `plainnl.bst' for use with natbib package
3
- %%
4
- %% Copyright 2010 Hal Daum\'e III
5
- %% Modified by J. F�rnkranz
6
- %% - Changed labels from (X and Y, 2000) to (X & Y, 2000)
7
- %%
8
- %% Copyright 1993-2007 Patrick W Daly
9
- %% Max-Planck-Institut f\"ur Sonnensystemforschung
10
- %% Max-Planck-Str. 2
11
- %% D-37191 Katlenburg-Lindau
12
- %% Germany
13
- %% E-mail: daly@mps.mpg.de
14
- %%
15
- %% This program can be redistributed and/or modified under the terms
16
- %% of the LaTeX Project Public License Distributed from CTAN
17
- %% archives in directory macros/latex/base/lppl.txt; either
18
- %% version 1 of the License, or any later version.
19
- %%
20
- % Version and source file information:
21
- % \ProvidesFile{icml2010.mbs}[2007/11/26 1.93 (PWD)]
22
- %
23
- % BibTeX `plainnat' family
24
- % version 0.99b for BibTeX versions 0.99a or later,
25
- % for LaTeX versions 2.09 and 2e.
26
- %
27
- % For use with the `natbib.sty' package; emulates the corresponding
28
- % member of the `plain' family, but with author-year citations.
29
- %
30
- % With version 6.0 of `natbib.sty', it may also be used for numerical
31
- % citations, while retaining the commands \citeauthor, \citefullauthor,
32
- % and \citeyear to print the corresponding information.
33
- %
34
- % For version 7.0 of `natbib.sty', the KEY field replaces missing
35
- % authors/editors, and the date is left blank in \bibitem.
36
- %
37
- % Includes field EID for the sequence/citation number of electronic journals
38
- % which is used instead of page numbers.
39
- %
40
- % Includes fields ISBN and ISSN.
41
- %
42
- % Includes field URL for Internet addresses.
43
- %
44
- % Includes field DOI for Digital Object Idenfifiers.
45
- %
46
- % Works best with the url.sty package of Donald Arseneau.
47
- %
48
- % Works with identical authors and year are further sorted by
49
- % citation key, to preserve any natural sequence.
50
- %
51
- ENTRY
52
- { address
53
- author
54
- booktitle
55
- chapter
56
- doi
57
- eid
58
- edition
59
- editor
60
- howpublished
61
- institution
62
- isbn
63
- issn
64
- journal
65
- key
66
- month
67
- note
68
- number
69
- organization
70
- pages
71
- publisher
72
- school
73
- series
74
- title
75
- type
76
- url
77
- volume
78
- year
79
- }
80
- {}
81
- { label extra.label sort.label short.list }
82
-
83
- INTEGERS { output.state before.all mid.sentence after.sentence after.block }
84
-
85
- FUNCTION {init.state.consts}
86
- { #0 'before.all :=
87
- #1 'mid.sentence :=
88
- #2 'after.sentence :=
89
- #3 'after.block :=
90
- }
91
-
92
- STRINGS { s t }
93
-
94
- FUNCTION {output.nonnull}
95
- { 's :=
96
- output.state mid.sentence =
97
- { ", " * write$ }
98
- { output.state after.block =
99
- { add.period$ write$
100
- newline$
101
- "\newblock " write$
102
- }
103
- { output.state before.all =
104
- 'write$
105
- { add.period$ " " * write$ }
106
- if$
107
- }
108
- if$
109
- mid.sentence 'output.state :=
110
- }
111
- if$
112
- s
113
- }
114
-
115
- FUNCTION {output}
116
- { duplicate$ empty$
117
- 'pop$
118
- 'output.nonnull
119
- if$
120
- }
121
-
122
- FUNCTION {output.check}
123
- { 't :=
124
- duplicate$ empty$
125
- { pop$ "empty " t * " in " * cite$ * warning$ }
126
- 'output.nonnull
127
- if$
128
- }
129
-
130
- FUNCTION {fin.entry}
131
- { add.period$
132
- write$
133
- newline$
134
- }
135
-
136
- FUNCTION {new.block}
137
- { output.state before.all =
138
- 'skip$
139
- { after.block 'output.state := }
140
- if$
141
- }
142
-
143
- FUNCTION {new.sentence}
144
- { output.state after.block =
145
- 'skip$
146
- { output.state before.all =
147
- 'skip$
148
- { after.sentence 'output.state := }
149
- if$
150
- }
151
- if$
152
- }
153
-
154
- FUNCTION {not}
155
- { { #0 }
156
- { #1 }
157
- if$
158
- }
159
-
160
- FUNCTION {and}
161
- { 'skip$
162
- { pop$ #0 }
163
- if$
164
- }
165
-
166
- FUNCTION {or}
167
- { { pop$ #1 }
168
- 'skip$
169
- if$
170
- }
171
-
172
- FUNCTION {new.block.checka}
173
- { empty$
174
- 'skip$
175
- 'new.block
176
- if$
177
- }
178
-
179
- FUNCTION {new.block.checkb}
180
- { empty$
181
- swap$ empty$
182
- and
183
- 'skip$
184
- 'new.block
185
- if$
186
- }
187
-
188
- FUNCTION {new.sentence.checka}
189
- { empty$
190
- 'skip$
191
- 'new.sentence
192
- if$
193
- }
194
-
195
- FUNCTION {new.sentence.checkb}
196
- { empty$
197
- swap$ empty$
198
- and
199
- 'skip$
200
- 'new.sentence
201
- if$
202
- }
203
-
204
- FUNCTION {field.or.null}
205
- { duplicate$ empty$
206
- { pop$ "" }
207
- 'skip$
208
- if$
209
- }
210
-
211
- FUNCTION {emphasize}
212
- { duplicate$ empty$
213
- { pop$ "" }
214
- { "\emph{" swap$ * "}" * }
215
- if$
216
- }
217
-
218
- INTEGERS { nameptr namesleft numnames }
219
-
220
- FUNCTION {format.names}
221
- { 's :=
222
- #1 'nameptr :=
223
- s num.names$ 'numnames :=
224
- numnames 'namesleft :=
225
- { namesleft #0 > }
226
- { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
227
- nameptr #1 >
228
- { namesleft #1 >
229
- { ", " * t * }
230
- { numnames #2 >
231
- { "," * }
232
- 'skip$
233
- if$
234
- t "others" =
235
- { " et~al." * }
236
- { " and " * t * }
237
- if$
238
- }
239
- if$
240
- }
241
- 't
242
- if$
243
- nameptr #1 + 'nameptr :=
244
- namesleft #1 - 'namesleft :=
245
- }
246
- while$
247
- }
248
-
249
- FUNCTION {format.key}
250
- { empty$
251
- { key field.or.null }
252
- { "" }
253
- if$
254
- }
255
-
256
- FUNCTION {format.authors}
257
- { author empty$
258
- { "" }
259
- { author format.names }
260
- if$
261
- }
262
-
263
- FUNCTION {format.editors}
264
- { editor empty$
265
- { "" }
266
- { editor format.names
267
- editor num.names$ #1 >
268
- { " (eds.)" * }
269
- { " (ed.)" * }
270
- if$
271
- }
272
- if$
273
- }
274
-
275
- FUNCTION {format.isbn}
276
- { isbn empty$
277
- { "" }
278
- { new.block "ISBN " isbn * }
279
- if$
280
- }
281
-
282
- FUNCTION {format.issn}
283
- { issn empty$
284
- { "" }
285
- { new.block "ISSN " issn * }
286
- if$
287
- }
288
-
289
- FUNCTION {format.url}
290
- { url empty$
291
- { "" }
292
- { new.block "URL \url{" url * "}" * }
293
- if$
294
- }
295
-
296
- FUNCTION {format.doi}
297
- { doi empty$
298
- { "" }
299
- { new.block "\doi{" doi * "}" * }
300
- if$
301
- }
302
-
303
- FUNCTION {format.title}
304
- { title empty$
305
- { "" }
306
- { title "t" change.case$ }
307
- if$
308
- }
309
-
310
- FUNCTION {format.full.names}
311
- {'s :=
312
- #1 'nameptr :=
313
- s num.names$ 'numnames :=
314
- numnames 'namesleft :=
315
- { namesleft #0 > }
316
- { s nameptr
317
- "{vv~}{ll}" format.name$ 't :=
318
- nameptr #1 >
319
- {
320
- namesleft #1 >
321
- { ", " * t * }
322
- {
323
- numnames #2 >
324
- { "," * }
325
- 'skip$
326
- if$
327
- t "others" =
328
- { " et~al." * }
329
- { " and " * t * }
330
- if$
331
- }
332
- if$
333
- }
334
- 't
335
- if$
336
- nameptr #1 + 'nameptr :=
337
- namesleft #1 - 'namesleft :=
338
- }
339
- while$
340
- }
341
-
342
- FUNCTION {author.editor.full}
343
- { author empty$
344
- { editor empty$
345
- { "" }
346
- { editor format.full.names }
347
- if$
348
- }
349
- { author format.full.names }
350
- if$
351
- }
352
-
353
- FUNCTION {author.full}
354
- { author empty$
355
- { "" }
356
- { author format.full.names }
357
- if$
358
- }
359
-
360
- FUNCTION {editor.full}
361
- { editor empty$
362
- { "" }
363
- { editor format.full.names }
364
- if$
365
- }
366
-
367
- FUNCTION {make.full.names}
368
- { type$ "book" =
369
- type$ "inbook" =
370
- or
371
- 'author.editor.full
372
- { type$ "proceedings" =
373
- 'editor.full
374
- 'author.full
375
- if$
376
- }
377
- if$
378
- }
379
-
380
- FUNCTION {output.bibitem}
381
- { newline$
382
- "\bibitem[" write$
383
- label write$
384
- ")" make.full.names duplicate$ short.list =
385
- { pop$ }
386
- { * }
387
- if$
388
- "]{" * write$
389
- cite$ write$
390
- "}" write$
391
- newline$
392
- ""
393
- before.all 'output.state :=
394
- }
395
-
396
- FUNCTION {n.dashify}
397
- { 't :=
398
- ""
399
- { t empty$ not }
400
- { t #1 #1 substring$ "-" =
401
- { t #1 #2 substring$ "--" = not
402
- { "--" *
403
- t #2 global.max$ substring$ 't :=
404
- }
405
- { { t #1 #1 substring$ "-" = }
406
- { "-" *
407
- t #2 global.max$ substring$ 't :=
408
- }
409
- while$
410
- }
411
- if$
412
- }
413
- { t #1 #1 substring$ *
414
- t #2 global.max$ substring$ 't :=
415
- }
416
- if$
417
- }
418
- while$
419
- }
420
-
421
- FUNCTION {format.date}
422
- { year duplicate$ empty$
423
- { "empty year in " cite$ * warning$
424
- pop$ "" }
425
- 'skip$
426
- if$
427
- month empty$
428
- 'skip$
429
- { month
430
- " " * swap$ *
431
- }
432
- if$
433
- extra.label *
434
- }
435
-
436
- FUNCTION {format.btitle}
437
- { title emphasize
438
- }
439
-
440
- FUNCTION {tie.or.space.connect}
441
- { duplicate$ text.length$ #3 <
442
- { "~" }
443
- { " " }
444
- if$
445
- swap$ * *
446
- }
447
-
448
- FUNCTION {either.or.check}
449
- { empty$
450
- 'pop$
451
- { "can't use both " swap$ * " fields in " * cite$ * warning$ }
452
- if$
453
- }
454
-
455
- FUNCTION {format.bvolume}
456
- { volume empty$
457
- { "" }
458
- { "volume" volume tie.or.space.connect
459
- series empty$
460
- 'skip$
461
- { " of " * series emphasize * }
462
- if$
463
- "volume and number" number either.or.check
464
- }
465
- if$
466
- }
467
-
468
- FUNCTION {format.number.series}
469
- { volume empty$
470
- { number empty$
471
- { series field.or.null }
472
- { output.state mid.sentence =
473
- { "number" }
474
- { "Number" }
475
- if$
476
- number tie.or.space.connect
477
- series empty$
478
- { "there's a number but no series in " cite$ * warning$ }
479
- { " in " * series * }
480
- if$
481
- }
482
- if$
483
- }
484
- { "" }
485
- if$
486
- }
487
-
488
- FUNCTION {format.edition}
489
- { edition empty$
490
- { "" }
491
- { output.state mid.sentence =
492
- { edition "l" change.case$ " edition" * }
493
- { edition "t" change.case$ " edition" * }
494
- if$
495
- }
496
- if$
497
- }
498
-
499
- INTEGERS { multiresult }
500
-
501
- FUNCTION {multi.page.check}
502
- { 't :=
503
- #0 'multiresult :=
504
- { multiresult not
505
- t empty$ not
506
- and
507
- }
508
- { t #1 #1 substring$
509
- duplicate$ "-" =
510
- swap$ duplicate$ "," =
511
- swap$ "+" =
512
- or or
513
- { #1 'multiresult := }
514
- { t #2 global.max$ substring$ 't := }
515
- if$
516
- }
517
- while$
518
- multiresult
519
- }
520
-
521
- FUNCTION {format.pages}
522
- { pages empty$
523
- { "" }
524
- { pages multi.page.check
525
- { "pp.\ " pages n.dashify tie.or.space.connect }
526
- { "pp.\ " pages tie.or.space.connect }
527
- if$
528
- }
529
- if$
530
- }
531
-
532
- FUNCTION {format.eid}
533
- { eid empty$
534
- { "" }
535
- { "art." eid tie.or.space.connect }
536
- if$
537
- }
538
-
539
- FUNCTION {format.vol.num.pages}
540
- { volume field.or.null
541
- number empty$
542
- 'skip$
543
- { "\penalty0 (" number * ")" * *
544
- volume empty$
545
- { "there's a number but no volume in " cite$ * warning$ }
546
- 'skip$
547
- if$
548
- }
549
- if$
550
- pages empty$
551
- 'skip$
552
- { duplicate$ empty$
553
- { pop$ format.pages }
554
- { ":\penalty0 " * pages n.dashify * }
555
- if$
556
- }
557
- if$
558
- }
559
-
560
- FUNCTION {format.vol.num.eid}
561
- { volume field.or.null
562
- number empty$
563
- 'skip$
564
- { "\penalty0 (" number * ")" * *
565
- volume empty$
566
- { "there's a number but no volume in " cite$ * warning$ }
567
- 'skip$
568
- if$
569
- }
570
- if$
571
- eid empty$
572
- 'skip$
573
- { duplicate$ empty$
574
- { pop$ format.eid }
575
- { ":\penalty0 " * eid * }
576
- if$
577
- }
578
- if$
579
- }
580
-
581
- FUNCTION {format.chapter.pages}
582
- { chapter empty$
583
- 'format.pages
584
- { type empty$
585
- { "chapter" }
586
- { type "l" change.case$ }
587
- if$
588
- chapter tie.or.space.connect
589
- pages empty$
590
- 'skip$
591
- { ", " * format.pages * }
592
- if$
593
- }
594
- if$
595
- }
596
-
597
- FUNCTION {format.in.ed.booktitle}
598
- { booktitle empty$
599
- { "" }
600
- { editor empty$
601
- { "In " booktitle emphasize * }
602
- { "In " format.editors * ", " * booktitle emphasize * }
603
- if$
604
- }
605
- if$
606
- }
607
-
608
- FUNCTION {empty.misc.check}
609
- { author empty$ title empty$ howpublished empty$
610
- month empty$ year empty$ note empty$
611
- and and and and and
612
- key empty$ not and
613
- { "all relevant fields are empty in " cite$ * warning$ }
614
- 'skip$
615
- if$
616
- }
617
-
618
- FUNCTION {format.thesis.type}
619
- { type empty$
620
- 'skip$
621
- { pop$
622
- type "t" change.case$
623
- }
624
- if$
625
- }
626
-
627
- FUNCTION {format.tr.number}
628
- { type empty$
629
- { "Technical Report" }
630
- 'type
631
- if$
632
- number empty$
633
- { "t" change.case$ }
634
- { number tie.or.space.connect }
635
- if$
636
- }
637
-
638
- FUNCTION {format.article.crossref}
639
- { key empty$
640
- { journal empty$
641
- { "need key or journal for " cite$ * " to crossref " * crossref *
642
- warning$
643
- ""
644
- }
645
- { "In \emph{" journal * "}" * }
646
- if$
647
- }
648
- { "In " }
649
- if$
650
- " \citet{" * crossref * "}" *
651
- }
652
-
653
- FUNCTION {format.book.crossref}
654
- { volume empty$
655
- { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
656
- "In "
657
- }
658
- { "Volume" volume tie.or.space.connect
659
- " of " *
660
- }
661
- if$
662
- editor empty$
663
- editor field.or.null author field.or.null =
664
- or
665
- { key empty$
666
- { series empty$
667
- { "need editor, key, or series for " cite$ * " to crossref " *
668
- crossref * warning$
669
- "" *
670
- }
671
- { "\emph{" * series * "}" * }
672
- if$
673
- }
674
- 'skip$
675
- if$
676
- }
677
- 'skip$
678
- if$
679
- " \citet{" * crossref * "}" *
680
- }
681
-
682
- FUNCTION {format.incoll.inproc.crossref}
683
- { editor empty$
684
- editor field.or.null author field.or.null =
685
- or
686
- { key empty$
687
- { booktitle empty$
688
- { "need editor, key, or booktitle for " cite$ * " to crossref " *
689
- crossref * warning$
690
- ""
691
- }
692
- { "In \emph{" booktitle * "}" * }
693
- if$
694
- }
695
- { "In " }
696
- if$
697
- }
698
- { "In " }
699
- if$
700
- " \citet{" * crossref * "}" *
701
- }
702
-
703
- FUNCTION {article}
704
- { output.bibitem
705
- format.authors "author" output.check
706
- author format.key output
707
- new.block
708
- format.title "title" output.check
709
- new.block
710
- crossref missing$
711
- { journal emphasize "journal" output.check
712
- eid empty$
713
- { format.vol.num.pages output }
714
- { format.vol.num.eid output }
715
- if$
716
- format.date "year" output.check
717
- }
718
- { format.article.crossref output.nonnull
719
- eid empty$
720
- { format.pages output }
721
- { format.eid output }
722
- if$
723
- }
724
- if$
725
- format.issn output
726
- format.doi output
727
- format.url output
728
- new.block
729
- note output
730
- fin.entry
731
- }
732
-
733
- FUNCTION {book}
734
- { output.bibitem
735
- author empty$
736
- { format.editors "author and editor" output.check
737
- editor format.key output
738
- }
739
- { format.authors output.nonnull
740
- crossref missing$
741
- { "author and editor" editor either.or.check }
742
- 'skip$
743
- if$
744
- }
745
- if$
746
- new.block
747
- format.btitle "title" output.check
748
- crossref missing$
749
- { format.bvolume output
750
- new.block
751
- format.number.series output
752
- new.sentence
753
- publisher "publisher" output.check
754
- address output
755
- }
756
- { new.block
757
- format.book.crossref output.nonnull
758
- }
759
- if$
760
- format.edition output
761
- format.date "year" output.check
762
- format.isbn output
763
- format.doi output
764
- format.url output
765
- new.block
766
- note output
767
- fin.entry
768
- }
769
-
770
- FUNCTION {booklet}
771
- { output.bibitem
772
- format.authors output
773
- author format.key output
774
- new.block
775
- format.title "title" output.check
776
- howpublished address new.block.checkb
777
- howpublished output
778
- address output
779
- format.date output
780
- format.isbn output
781
- format.doi output
782
- format.url output
783
- new.block
784
- note output
785
- fin.entry
786
- }
787
-
788
- FUNCTION {inbook}
789
- { output.bibitem
790
- author empty$
791
- { format.editors "author and editor" output.check
792
- editor format.key output
793
- }
794
- { format.authors output.nonnull
795
- crossref missing$
796
- { "author and editor" editor either.or.check }
797
- 'skip$
798
- if$
799
- }
800
- if$
801
- new.block
802
- format.btitle "title" output.check
803
- crossref missing$
804
- { format.bvolume output
805
- format.chapter.pages "chapter and pages" output.check
806
- new.block
807
- format.number.series output
808
- new.sentence
809
- publisher "publisher" output.check
810
- address output
811
- }
812
- { format.chapter.pages "chapter and pages" output.check
813
- new.block
814
- format.book.crossref output.nonnull
815
- }
816
- if$
817
- format.edition output
818
- format.date "year" output.check
819
- format.isbn output
820
- format.doi output
821
- format.url output
822
- new.block
823
- note output
824
- fin.entry
825
- }
826
-
827
- FUNCTION {incollection}
828
- { output.bibitem
829
- format.authors "author" output.check
830
- author format.key output
831
- new.block
832
- format.title "title" output.check
833
- new.block
834
- crossref missing$
835
- { format.in.ed.booktitle "booktitle" output.check
836
- format.bvolume output
837
- format.number.series output
838
- format.chapter.pages output
839
- new.sentence
840
- publisher "publisher" output.check
841
- address output
842
- format.edition output
843
- format.date "year" output.check
844
- }
845
- { format.incoll.inproc.crossref output.nonnull
846
- format.chapter.pages output
847
- }
848
- if$
849
- format.isbn output
850
- format.doi output
851
- format.url output
852
- new.block
853
- note output
854
- fin.entry
855
- }
856
-
857
- FUNCTION {inproceedings}
858
- { output.bibitem
859
- format.authors "author" output.check
860
- author format.key output
861
- new.block
862
- format.title "title" output.check
863
- new.block
864
- crossref missing$
865
- { format.in.ed.booktitle "booktitle" output.check
866
- format.bvolume output
867
- format.number.series output
868
- format.pages output
869
- address empty$
870
- { organization publisher new.sentence.checkb
871
- organization output
872
- publisher output
873
- format.date "year" output.check
874
- }
875
- { address output.nonnull
876
- format.date "year" output.check
877
- new.sentence
878
- organization output
879
- publisher output
880
- }
881
- if$
882
- }
883
- { format.incoll.inproc.crossref output.nonnull
884
- format.pages output
885
- }
886
- if$
887
- format.isbn output
888
- format.doi output
889
- format.url output
890
- new.block
891
- note output
892
- fin.entry
893
- }
894
-
895
- FUNCTION {conference} { inproceedings }
896
-
897
- FUNCTION {manual}
898
- { output.bibitem
899
- format.authors output
900
- author format.key output
901
- new.block
902
- format.btitle "title" output.check
903
- organization address new.block.checkb
904
- organization output
905
- address output
906
- format.edition output
907
- format.date output
908
- format.url output
909
- new.block
910
- note output
911
- fin.entry
912
- }
913
-
914
- FUNCTION {mastersthesis}
915
- { output.bibitem
916
- format.authors "author" output.check
917
- author format.key output
918
- new.block
919
- format.title "title" output.check
920
- new.block
921
- "Master's thesis" format.thesis.type output.nonnull
922
- school "school" output.check
923
- address output
924
- format.date "year" output.check
925
- format.url output
926
- new.block
927
- note output
928
- fin.entry
929
- }
930
-
931
- FUNCTION {misc}
932
- { output.bibitem
933
- format.authors output
934
- author format.key output
935
- title howpublished new.block.checkb
936
- format.title output
937
- howpublished new.block.checka
938
- howpublished output
939
- format.date output
940
- format.issn output
941
- format.url output
942
- new.block
943
- note output
944
- fin.entry
945
- empty.misc.check
946
- }
947
-
948
- FUNCTION {phdthesis}
949
- { output.bibitem
950
- format.authors "author" output.check
951
- author format.key output
952
- new.block
953
- format.btitle "title" output.check
954
- new.block
955
- "PhD thesis" format.thesis.type output.nonnull
956
- school "school" output.check
957
- address output
958
- format.date "year" output.check
959
- format.url output
960
- new.block
961
- note output
962
- fin.entry
963
- }
964
-
965
- FUNCTION {proceedings}
966
- { output.bibitem
967
- format.editors output
968
- editor format.key output
969
- new.block
970
- format.btitle "title" output.check
971
- format.bvolume output
972
- format.number.series output
973
- address output
974
- format.date "year" output.check
975
- new.sentence
976
- organization output
977
- publisher output
978
- format.isbn output
979
- format.doi output
980
- format.url output
981
- new.block
982
- note output
983
- fin.entry
984
- }
985
-
986
- FUNCTION {techreport}
987
- { output.bibitem
988
- format.authors "author" output.check
989
- author format.key output
990
- new.block
991
- format.title "title" output.check
992
- new.block
993
- format.tr.number output.nonnull
994
- institution "institution" output.check
995
- address output
996
- format.date "year" output.check
997
- format.url output
998
- new.block
999
- note output
1000
- fin.entry
1001
- }
1002
-
1003
- FUNCTION {unpublished}
1004
- { output.bibitem
1005
- format.authors "author" output.check
1006
- author format.key output
1007
- new.block
1008
- format.title "title" output.check
1009
- new.block
1010
- note "note" output.check
1011
- format.date output
1012
- format.url output
1013
- fin.entry
1014
- }
1015
-
1016
- FUNCTION {default.type} { misc }
1017
-
1018
-
1019
- MACRO {jan} {"January"}
1020
-
1021
- MACRO {feb} {"February"}
1022
-
1023
- MACRO {mar} {"March"}
1024
-
1025
- MACRO {apr} {"April"}
1026
-
1027
- MACRO {may} {"May"}
1028
-
1029
- MACRO {jun} {"June"}
1030
-
1031
- MACRO {jul} {"July"}
1032
-
1033
- MACRO {aug} {"August"}
1034
-
1035
- MACRO {sep} {"September"}
1036
-
1037
- MACRO {oct} {"October"}
1038
-
1039
- MACRO {nov} {"November"}
1040
-
1041
- MACRO {dec} {"December"}
1042
-
1043
-
1044
-
1045
- MACRO {acmcs} {"ACM Computing Surveys"}
1046
-
1047
- MACRO {acta} {"Acta Informatica"}
1048
-
1049
- MACRO {cacm} {"Communications of the ACM"}
1050
-
1051
- MACRO {ibmjrd} {"IBM Journal of Research and Development"}
1052
-
1053
- MACRO {ibmsj} {"IBM Systems Journal"}
1054
-
1055
- MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
1056
-
1057
- MACRO {ieeetc} {"IEEE Transactions on Computers"}
1058
-
1059
- MACRO {ieeetcad}
1060
- {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
1061
-
1062
- MACRO {ipl} {"Information Processing Letters"}
1063
-
1064
- MACRO {jacm} {"Journal of the ACM"}
1065
-
1066
- MACRO {jcss} {"Journal of Computer and System Sciences"}
1067
-
1068
- MACRO {scp} {"Science of Computer Programming"}
1069
-
1070
- MACRO {sicomp} {"SIAM Journal on Computing"}
1071
-
1072
- MACRO {tocs} {"ACM Transactions on Computer Systems"}
1073
-
1074
- MACRO {tods} {"ACM Transactions on Database Systems"}
1075
-
1076
- MACRO {tog} {"ACM Transactions on Graphics"}
1077
-
1078
- MACRO {toms} {"ACM Transactions on Mathematical Software"}
1079
-
1080
- MACRO {toois} {"ACM Transactions on Office Information Systems"}
1081
-
1082
- MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
1083
-
1084
- MACRO {tcs} {"Theoretical Computer Science"}
1085
-
1086
-
1087
- READ
1088
-
1089
- FUNCTION {sortify}
1090
- { purify$
1091
- "l" change.case$
1092
- }
1093
-
1094
- INTEGERS { len }
1095
-
1096
- FUNCTION {chop.word}
1097
- { 's :=
1098
- 'len :=
1099
- s #1 len substring$ =
1100
- { s len #1 + global.max$ substring$ }
1101
- 's
1102
- if$
1103
- }
1104
-
1105
- FUNCTION {format.lab.names}
1106
- { 's :=
1107
- s #1 "{vv~}{ll}" format.name$
1108
- s num.names$ duplicate$
1109
- #2 >
1110
- { pop$ " et~al." * }
1111
- { #2 <
1112
- 'skip$
1113
- { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
1114
- { " et~al." * }
1115
- { " \& " * s #2 "{vv~}{ll}" format.name$ * }
1116
- if$
1117
- }
1118
- if$
1119
- }
1120
- if$
1121
- }
1122
-
1123
- FUNCTION {author.key.label}
1124
- { author empty$
1125
- { key empty$
1126
- { cite$ #1 #3 substring$ }
1127
- 'key
1128
- if$
1129
- }
1130
- { author format.lab.names }
1131
- if$
1132
- }
1133
-
1134
- FUNCTION {author.editor.key.label}
1135
- { author empty$
1136
- { editor empty$
1137
- { key empty$
1138
- { cite$ #1 #3 substring$ }
1139
- 'key
1140
- if$
1141
- }
1142
- { editor format.lab.names }
1143
- if$
1144
- }
1145
- { author format.lab.names }
1146
- if$
1147
- }
1148
-
1149
- FUNCTION {author.key.organization.label}
1150
- { author empty$
1151
- { key empty$
1152
- { organization empty$
1153
- { cite$ #1 #3 substring$ }
1154
- { "The " #4 organization chop.word #3 text.prefix$ }
1155
- if$
1156
- }
1157
- 'key
1158
- if$
1159
- }
1160
- { author format.lab.names }
1161
- if$
1162
- }
1163
-
1164
- FUNCTION {editor.key.organization.label}
1165
- { editor empty$
1166
- { key empty$
1167
- { organization empty$
1168
- { cite$ #1 #3 substring$ }
1169
- { "The " #4 organization chop.word #3 text.prefix$ }
1170
- if$
1171
- }
1172
- 'key
1173
- if$
1174
- }
1175
- { editor format.lab.names }
1176
- if$
1177
- }
1178
-
1179
- FUNCTION {calc.short.authors}
1180
- { type$ "book" =
1181
- type$ "inbook" =
1182
- or
1183
- 'author.editor.key.label
1184
- { type$ "proceedings" =
1185
- 'editor.key.organization.label
1186
- { type$ "manual" =
1187
- 'author.key.organization.label
1188
- 'author.key.label
1189
- if$
1190
- }
1191
- if$
1192
- }
1193
- if$
1194
- 'short.list :=
1195
- }
1196
-
1197
- FUNCTION {calc.label}
1198
- { calc.short.authors
1199
- short.list
1200
- "("
1201
- *
1202
- year duplicate$ empty$
1203
- short.list key field.or.null = or
1204
- { pop$ "" }
1205
- 'skip$
1206
- if$
1207
- *
1208
- 'label :=
1209
- }
1210
-
1211
- FUNCTION {sort.format.names}
1212
- { 's :=
1213
- #1 'nameptr :=
1214
- ""
1215
- s num.names$ 'numnames :=
1216
- numnames 'namesleft :=
1217
- { namesleft #0 > }
1218
- {
1219
- s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
1220
- nameptr #1 >
1221
- {
1222
- " " *
1223
- namesleft #1 = t "others" = and
1224
- { "zzzzz" * }
1225
- { numnames #2 > nameptr #2 = and
1226
- { "zz" * year field.or.null * " " * }
1227
- 'skip$
1228
- if$
1229
- t sortify *
1230
- }
1231
- if$
1232
- }
1233
- { t sortify * }
1234
- if$
1235
- nameptr #1 + 'nameptr :=
1236
- namesleft #1 - 'namesleft :=
1237
- }
1238
- while$
1239
- }
1240
-
1241
- FUNCTION {sort.format.title}
1242
- { 't :=
1243
- "A " #2
1244
- "An " #3
1245
- "The " #4 t chop.word
1246
- chop.word
1247
- chop.word
1248
- sortify
1249
- #1 global.max$ substring$
1250
- }
1251
-
1252
- FUNCTION {author.sort}
1253
- { author empty$
1254
- { key empty$
1255
- { "to sort, need author or key in " cite$ * warning$
1256
- ""
1257
- }
1258
- { key sortify }
1259
- if$
1260
- }
1261
- { author sort.format.names }
1262
- if$
1263
- }
1264
-
1265
- FUNCTION {author.editor.sort}
1266
- { author empty$
1267
- { editor empty$
1268
- { key empty$
1269
- { "to sort, need author, editor, or key in " cite$ * warning$
1270
- ""
1271
- }
1272
- { key sortify }
1273
- if$
1274
- }
1275
- { editor sort.format.names }
1276
- if$
1277
- }
1278
- { author sort.format.names }
1279
- if$
1280
- }
1281
-
1282
- FUNCTION {author.organization.sort}
1283
- { author empty$
1284
- { organization empty$
1285
- { key empty$
1286
- { "to sort, need author, organization, or key in " cite$ * warning$
1287
- ""
1288
- }
1289
- { key sortify }
1290
- if$
1291
- }
1292
- { "The " #4 organization chop.word sortify }
1293
- if$
1294
- }
1295
- { author sort.format.names }
1296
- if$
1297
- }
1298
-
1299
- FUNCTION {editor.organization.sort}
1300
- { editor empty$
1301
- { organization empty$
1302
- { key empty$
1303
- { "to sort, need editor, organization, or key in " cite$ * warning$
1304
- ""
1305
- }
1306
- { key sortify }
1307
- if$
1308
- }
1309
- { "The " #4 organization chop.word sortify }
1310
- if$
1311
- }
1312
- { editor sort.format.names }
1313
- if$
1314
- }
1315
-
1316
-
1317
- FUNCTION {presort}
1318
- { calc.label
1319
- label sortify
1320
- " "
1321
- *
1322
- type$ "book" =
1323
- type$ "inbook" =
1324
- or
1325
- 'author.editor.sort
1326
- { type$ "proceedings" =
1327
- 'editor.organization.sort
1328
- { type$ "manual" =
1329
- 'author.organization.sort
1330
- 'author.sort
1331
- if$
1332
- }
1333
- if$
1334
- }
1335
- if$
1336
- " "
1337
- *
1338
- year field.or.null sortify
1339
- *
1340
- " "
1341
- *
1342
- cite$
1343
- *
1344
- #1 entry.max$ substring$
1345
- 'sort.label :=
1346
- sort.label *
1347
- #1 entry.max$ substring$
1348
- 'sort.key$ :=
1349
- }
1350
-
1351
- ITERATE {presort}
1352
-
1353
- SORT
1354
-
1355
- STRINGS { longest.label last.label next.extra }
1356
-
1357
- INTEGERS { longest.label.width last.extra.num number.label }
1358
-
1359
- FUNCTION {initialize.longest.label}
1360
- { "" 'longest.label :=
1361
- #0 int.to.chr$ 'last.label :=
1362
- "" 'next.extra :=
1363
- #0 'longest.label.width :=
1364
- #0 'last.extra.num :=
1365
- #0 'number.label :=
1366
- }
1367
-
1368
- FUNCTION {forward.pass}
1369
- { last.label label =
1370
- { last.extra.num #1 + 'last.extra.num :=
1371
- last.extra.num int.to.chr$ 'extra.label :=
1372
- }
1373
- { "a" chr.to.int$ 'last.extra.num :=
1374
- "" 'extra.label :=
1375
- label 'last.label :=
1376
- }
1377
- if$
1378
- number.label #1 + 'number.label :=
1379
- }
1380
-
1381
- FUNCTION {reverse.pass}
1382
- { next.extra "b" =
1383
- { "a" 'extra.label := }
1384
- 'skip$
1385
- if$
1386
- extra.label 'next.extra :=
1387
- extra.label
1388
- duplicate$ empty$
1389
- 'skip$
1390
- { "{\natexlab{" swap$ * "}}" * }
1391
- if$
1392
- 'extra.label :=
1393
- label extra.label * 'label :=
1394
- }
1395
-
1396
- EXECUTE {initialize.longest.label}
1397
-
1398
- ITERATE {forward.pass}
1399
-
1400
- REVERSE {reverse.pass}
1401
-
1402
- FUNCTION {bib.sort.order}
1403
- { sort.label 'sort.key$ :=
1404
- }
1405
-
1406
- ITERATE {bib.sort.order}
1407
-
1408
- SORT
1409
-
1410
- FUNCTION {begin.bib}
1411
- { preamble$ empty$
1412
- 'skip$
1413
- { preamble$ write$ newline$ }
1414
- if$
1415
- "\begin{thebibliography}{" number.label int.to.str$ * "}" *
1416
- write$ newline$
1417
- "\providecommand{\natexlab}[1]{#1}"
1418
- write$ newline$
1419
- "\providecommand{\url}[1]{\texttt{#1}}"
1420
- write$ newline$
1421
- "\expandafter\ifx\csname urlstyle\endcsname\relax"
1422
- write$ newline$
1423
- " \providecommand{\doi}[1]{doi: #1}\else"
1424
- write$ newline$
1425
- " \providecommand{\doi}{doi: \begingroup \urlstyle{rm}\Url}\fi"
1426
- write$ newline$
1427
- }
1428
-
1429
- EXECUTE {begin.bib}
1430
-
1431
- EXECUTE {init.state.consts}
1432
-
1433
- ITERATE {call.type$}
1434
-
1435
- FUNCTION {end.bib}
1436
- { newline$
1437
- "\end{thebibliography}" write$ newline$
1438
- }
1439
-
1440
- EXECUTE {end.bib}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
latex_templates/Default/iclr2022_conference.sty DELETED
@@ -1,245 +0,0 @@
1
- %%%% ICLR Macros (LaTex)
2
- %%%% Adapted by Hugo Larochelle from the NIPS stylefile Macros
3
- %%%% Style File
4
- %%%% Dec 12, 1990 Rev Aug 14, 1991; Sept, 1995; April, 1997; April, 1999; October 2014
5
-
6
- % This file can be used with Latex2e whether running in main mode, or
7
- % 2.09 compatibility mode.
8
- %
9
- % If using main mode, you need to include the commands
10
- % \documentclass{article}
11
- % \usepackage{iclr14submit_e,times}
12
- %
13
-
14
- % Change the overall width of the page. If these parameters are
15
- % changed, they will require corresponding changes in the
16
- % maketitle section.
17
- %
18
- \usepackage{eso-pic} % used by \AddToShipoutPicture
19
- \RequirePackage{fancyhdr}
20
- \RequirePackage{natbib}
21
-
22
- % modification to natbib citations
23
- \setcitestyle{authoryear,round,citesep={;},aysep={,},yysep={;}}
24
-
25
- \renewcommand{\topfraction}{0.95} % let figure take up nearly whole page
26
- \renewcommand{\textfraction}{0.05} % let figure take up nearly whole page
27
-
28
- % Define iclrfinal, set to true if iclrfinalcopy is defined
29
- \newif\ificlrfinal
30
- \iclrfinalfalse
31
- \def\iclrfinalcopy{\iclrfinaltrue}
32
- \font\iclrtenhv = phvb at 8pt
33
-
34
- % Specify the dimensions of each page
35
-
36
- \setlength{\paperheight}{11in}
37
- \setlength{\paperwidth}{8.5in}
38
-
39
-
40
- \oddsidemargin .5in % Note \oddsidemargin = \evensidemargin
41
- \evensidemargin .5in
42
- \marginparwidth 0.07 true in
43
- %\marginparwidth 0.75 true in
44
- %\topmargin 0 true pt % Nominal distance from top of page to top of
45
- %\topmargin 0.125in
46
- \topmargin -0.625in
47
- \addtolength{\headsep}{0.25in}
48
- \textheight 9.0 true in % Height of text (including footnotes & figures)
49
- \textwidth 5.5 true in % Width of text line.
50
- \widowpenalty=10000
51
- \clubpenalty=10000
52
-
53
- % \thispagestyle{empty} \pagestyle{empty}
54
- \flushbottom \sloppy
55
-
56
- % We're never going to need a table of contents, so just flush it to
57
- % save space --- suggested by drstrip@sandia-2
58
- \def\addcontentsline#1#2#3{}
59
-
60
- % Title stuff, taken from deproc.
61
- \def\maketitle{\par
62
- \begingroup
63
- \def\thefootnote{\fnsymbol{footnote}}
64
- \def\@makefnmark{\hbox to 0pt{$^{\@thefnmark}$\hss}} % for perfect author
65
- % name centering
66
- % The footnote-mark was overlapping the footnote-text,
67
- % added the following to fix this problem (MK)
68
- \long\def\@makefntext##1{\parindent 1em\noindent
69
- \hbox to1.8em{\hss $\m@th ^{\@thefnmark}$}##1}
70
- \@maketitle \@thanks
71
- \endgroup
72
- \setcounter{footnote}{0}
73
- \let\maketitle\relax \let\@maketitle\relax
74
- \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax}
75
-
76
- % The toptitlebar has been raised to top-justify the first page
77
-
78
- \usepackage{fancyhdr}
79
- \pagestyle{fancy}
80
- \fancyhead{}
81
-
82
- % Title (includes both anonimized and non-anonimized versions)
83
- \def\@maketitle{\vbox{\hsize\textwidth
84
- %\linewidth\hsize \vskip 0.1in \toptitlebar \centering
85
- {\LARGE\sc \@title\par}
86
- %\bottomtitlebar % \vskip 0.1in % minus
87
- \ificlrfinal
88
- \lhead{Published as a conference paper at ICLR 2022}
89
- \def\And{\end{tabular}\hfil\linebreak[0]\hfil
90
- \begin{tabular}[t]{l}\bf\rule{\z@}{24pt}\ignorespaces}%
91
- \def\AND{\end{tabular}\hfil\linebreak[4]\hfil
92
- \begin{tabular}[t]{l}\bf\rule{\z@}{24pt}\ignorespaces}%
93
- \begin{tabular}[t]{l}\bf\rule{\z@}{24pt}\@author\end{tabular}%
94
- \else
95
- \lhead{Under review as a conference paper at ICLR 2022}
96
- \def\And{\end{tabular}\hfil\linebreak[0]\hfil
97
- \begin{tabular}[t]{l}\bf\rule{\z@}{24pt}\ignorespaces}%
98
- \def\AND{\end{tabular}\hfil\linebreak[4]\hfil
99
- \begin{tabular}[t]{l}\bf\rule{\z@}{24pt}\ignorespaces}%
100
- \begin{tabular}[t]{l}\bf\rule{\z@}{24pt}Anonymous authors\\Paper under double-blind review\end{tabular}%
101
- \fi
102
- \vskip 0.3in minus 0.1in}}
103
-
104
- \renewenvironment{abstract}{\vskip.075in\centerline{\large\sc
105
- Abstract}\vspace{0.5ex}\begin{quote}}{\par\end{quote}\vskip 1ex}
106
-
107
- % sections with less space
108
- \def\section{\@startsection {section}{1}{\z@}{-2.0ex plus
109
- -0.5ex minus -.2ex}{1.5ex plus 0.3ex
110
- minus0.2ex}{\large\sc\raggedright}}
111
-
112
- \def\subsection{\@startsection{subsection}{2}{\z@}{-1.8ex plus
113
- -0.5ex minus -.2ex}{0.8ex plus .2ex}{\normalsize\sc\raggedright}}
114
- \def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-1.5ex
115
- plus -0.5ex minus -.2ex}{0.5ex plus
116
- .2ex}{\normalsize\sc\raggedright}}
117
- \def\paragraph{\@startsection{paragraph}{4}{\z@}{1.5ex plus
118
- 0.5ex minus .2ex}{-1em}{\normalsize\bf}}
119
- \def\subparagraph{\@startsection{subparagraph}{5}{\z@}{1.5ex plus
120
- 0.5ex minus .2ex}{-1em}{\normalsize\sc}}
121
- \def\subsubsubsection{\vskip
122
- 5pt{\noindent\normalsize\rm\raggedright}}
123
-
124
-
125
- % Footnotes
126
- \footnotesep 6.65pt %
127
- \skip\footins 9pt plus 4pt minus 2pt
128
- \def\footnoterule{\kern-3pt \hrule width 12pc \kern 2.6pt }
129
- \setcounter{footnote}{0}
130
-
131
- % Lists and paragraphs
132
- \parindent 0pt
133
- \topsep 4pt plus 1pt minus 2pt
134
- \partopsep 1pt plus 0.5pt minus 0.5pt
135
- \itemsep 2pt plus 1pt minus 0.5pt
136
- \parsep 2pt plus 1pt minus 0.5pt
137
- \parskip .5pc
138
-
139
-
140
- %\leftmargin2em
141
- \leftmargin3pc
142
- \leftmargini\leftmargin \leftmarginii 2em
143
- \leftmarginiii 1.5em \leftmarginiv 1.0em \leftmarginv .5em
144
-
145
- %\labelsep \labelsep 5pt
146
-
147
- \def\@listi{\leftmargin\leftmargini}
148
- \def\@listii{\leftmargin\leftmarginii
149
- \labelwidth\leftmarginii\advance\labelwidth-\labelsep
150
- \topsep 2pt plus 1pt minus 0.5pt
151
- \parsep 1pt plus 0.5pt minus 0.5pt
152
- \itemsep \parsep}
153
- \def\@listiii{\leftmargin\leftmarginiii
154
- \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
155
- \topsep 1pt plus 0.5pt minus 0.5pt
156
- \parsep \z@ \partopsep 0.5pt plus 0pt minus 0.5pt
157
- \itemsep \topsep}
158
- \def\@listiv{\leftmargin\leftmarginiv
159
- \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
160
- \def\@listv{\leftmargin\leftmarginv
161
- \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
162
- \def\@listvi{\leftmargin\leftmarginvi
163
- \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
164
-
165
- \abovedisplayskip 7pt plus2pt minus5pt%
166
- \belowdisplayskip \abovedisplayskip
167
- \abovedisplayshortskip 0pt plus3pt%
168
- \belowdisplayshortskip 4pt plus3pt minus3pt%
169
-
170
- % Less leading in most fonts (due to the narrow columns)
171
- % The choices were between 1-pt and 1.5-pt leading
172
- %\def\@normalsize{\@setsize\normalsize{11pt}\xpt\@xpt} % got rid of @ (MK)
173
- \def\normalsize{\@setsize\normalsize{11pt}\xpt\@xpt}
174
- \def\small{\@setsize\small{10pt}\ixpt\@ixpt}
175
- \def\footnotesize{\@setsize\footnotesize{10pt}\ixpt\@ixpt}
176
- \def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
177
- \def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
178
- \def\large{\@setsize\large{14pt}\xiipt\@xiipt}
179
- \def\Large{\@setsize\Large{16pt}\xivpt\@xivpt}
180
- \def\LARGE{\@setsize\LARGE{20pt}\xviipt\@xviipt}
181
- \def\huge{\@setsize\huge{23pt}\xxpt\@xxpt}
182
- \def\Huge{\@setsize\Huge{28pt}\xxvpt\@xxvpt}
183
-
184
- \def\toptitlebar{\hrule height4pt\vskip .25in\vskip-\parskip}
185
-
186
- \def\bottomtitlebar{\vskip .29in\vskip-\parskip\hrule height1pt\vskip
187
- .09in} %
188
- %Reduced second vskip to compensate for adding the strut in \@author
189
-
190
-
191
- %% % Vertical Ruler
192
- %% % This code is, largely, from the CVPR 2010 conference style file
193
- %% % ----- define vruler
194
- %% \makeatletter
195
- %% \newbox\iclrrulerbox
196
- %% \newcount\iclrrulercount
197
- %% \newdimen\iclrruleroffset
198
- %% \newdimen\cv@lineheight
199
- %% \newdimen\cv@boxheight
200
- %% \newbox\cv@tmpbox
201
- %% \newcount\cv@refno
202
- %% \newcount\cv@tot
203
- %% % NUMBER with left flushed zeros \fillzeros[<WIDTH>]<NUMBER>
204
- %% \newcount\cv@tmpc@ \newcount\cv@tmpc
205
- %% \def\fillzeros[#1]#2{\cv@tmpc@=#2\relax\ifnum\cv@tmpc@<0\cv@tmpc@=-\cv@tmpc@\fi
206
- %% \cv@tmpc=1 %
207
- %% \loop\ifnum\cv@tmpc@<10 \else \divide\cv@tmpc@ by 10 \advance\cv@tmpc by 1 \fi
208
- %% \ifnum\cv@tmpc@=10\relax\cv@tmpc@=11\relax\fi \ifnum\cv@tmpc@>10 \repeat
209
- %% \ifnum#2<0\advance\cv@tmpc1\relax-\fi
210
- %% \loop\ifnum\cv@tmpc<#1\relax0\advance\cv@tmpc1\relax\fi \ifnum\cv@tmpc<#1 \repeat
211
- %% \cv@tmpc@=#2\relax\ifnum\cv@tmpc@<0\cv@tmpc@=-\cv@tmpc@\fi \relax\the\cv@tmpc@}%
212
- %% % \makevruler[<SCALE>][<INITIAL_COUNT>][<STEP>][<DIGITS>][<HEIGHT>]
213
- %% \def\makevruler[#1][#2][#3][#4][#5]{\begingroup\offinterlineskip
214
- %% \textheight=#5\vbadness=10000\vfuzz=120ex\overfullrule=0pt%
215
- %% \global\setbox\iclrrulerbox=\vbox to \textheight{%
216
- %% {\parskip=0pt\hfuzz=150em\cv@boxheight=\textheight
217
- %% \cv@lineheight=#1\global\iclrrulercount=#2%
218
- %% \cv@tot\cv@boxheight\divide\cv@tot\cv@lineheight\advance\cv@tot2%
219
- %% \cv@refno1\vskip-\cv@lineheight\vskip1ex%
220
- %% \loop\setbox\cv@tmpbox=\hbox to0cm{{\iclrtenhv\hfil\fillzeros[#4]\iclrrulercount}}%
221
- %% \ht\cv@tmpbox\cv@lineheight\dp\cv@tmpbox0pt\box\cv@tmpbox\break
222
- %% \advance\cv@refno1\global\advance\iclrrulercount#3\relax
223
- %% \ifnum\cv@refno<\cv@tot\repeat}}\endgroup}%
224
- %% \makeatother
225
- %% % ----- end of vruler
226
-
227
- %% % \makevruler[<SCALE>][<INITIAL_COUNT>][<STEP>][<DIGITS>][<HEIGHT>]
228
- %% \def\iclrruler#1{\makevruler[12pt][#1][1][3][0.993\textheight]\usebox{\iclrrulerbox}}
229
- %% \AddToShipoutPicture{%
230
- %% \ificlrfinal\else
231
- %% \iclrruleroffset=\textheight
232
- %% \advance\iclrruleroffset by -3.7pt
233
- %% \color[rgb]{.7,.7,.7}
234
- %% \AtTextUpperLeft{%
235
- %% \put(\LenToUnit{-35pt},\LenToUnit{-\iclrruleroffset}){%left ruler
236
- %% \iclrruler{\iclrrulercount}}
237
- %% }
238
- %% \fi
239
- %% }
240
- %%% To add a vertical bar on the side
241
- %\AddToShipoutPicture{
242
- %\AtTextLowerLeft{
243
- %\hspace*{-1.8cm}
244
- %\colorbox[rgb]{0.7,0.7,0.7}{\small \parbox[b][\textheight]{0.1cm}{}}}
245
- %}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
latex_templates/Default/math_commands.tex DELETED
@@ -1,508 +0,0 @@
1
- %%%%% NEW MATH DEFINITIONS %%%%%
2
-
3
- \usepackage{amsmath,amsfonts,bm}
4
-
5
- % Mark sections of captions for referring to divisions of figures
6
- \newcommand{\figleft}{{\em (Left)}}
7
- \newcommand{\figcenter}{{\em (Center)}}
8
- \newcommand{\figright}{{\em (Right)}}
9
- \newcommand{\figtop}{{\em (Top)}}
10
- \newcommand{\figbottom}{{\em (Bottom)}}
11
- \newcommand{\captiona}{{\em (a)}}
12
- \newcommand{\captionb}{{\em (b)}}
13
- \newcommand{\captionc}{{\em (c)}}
14
- \newcommand{\captiond}{{\em (d)}}
15
-
16
- % Highlight a newly defined term
17
- \newcommand{\newterm}[1]{{\bf #1}}
18
-
19
-
20
- % Figure reference, lower-case.
21
- \def\figref#1{figure~\ref{#1}}
22
- % Figure reference, capital. For start of sentence
23
- \def\Figref#1{Figure~\ref{#1}}
24
- \def\twofigref#1#2{figures \ref{#1} and \ref{#2}}
25
- \def\quadfigref#1#2#3#4{figures \ref{#1}, \ref{#2}, \ref{#3} and \ref{#4}}
26
- % Section reference, lower-case.
27
- \def\secref#1{section~\ref{#1}}
28
- % Section reference, capital.
29
- \def\Secref#1{Section~\ref{#1}}
30
- % Reference to two sections.
31
- \def\twosecrefs#1#2{sections \ref{#1} and \ref{#2}}
32
- % Reference to three sections.
33
- \def\secrefs#1#2#3{sections \ref{#1}, \ref{#2} and \ref{#3}}
34
- % Reference to an equation, lower-case.
35
- \def\eqref#1{equation~\ref{#1}}
36
- % Reference to an equation, upper case
37
- \def\Eqref#1{Equation~\ref{#1}}
38
- % A raw reference to an equation---avoid using if possible
39
- \def\plaineqref#1{\ref{#1}}
40
- % Reference to a chapter, lower-case.
41
- \def\chapref#1{chapter~\ref{#1}}
42
- % Reference to an equation, upper case.
43
- \def\Chapref#1{Chapter~\ref{#1}}
44
- % Reference to a range of chapters
45
- \def\rangechapref#1#2{chapters\ref{#1}--\ref{#2}}
46
- % Reference to an algorithm, lower-case.
47
- \def\algref#1{algorithm~\ref{#1}}
48
- % Reference to an algorithm, upper case.
49
- \def\Algref#1{Algorithm~\ref{#1}}
50
- \def\twoalgref#1#2{algorithms \ref{#1} and \ref{#2}}
51
- \def\Twoalgref#1#2{Algorithms \ref{#1} and \ref{#2}}
52
- % Reference to a part, lower case
53
- \def\partref#1{part~\ref{#1}}
54
- % Reference to a part, upper case
55
- \def\Partref#1{Part~\ref{#1}}
56
- \def\twopartref#1#2{parts \ref{#1} and \ref{#2}}
57
-
58
- \def\ceil#1{\lceil #1 \rceil}
59
- \def\floor#1{\lfloor #1 \rfloor}
60
- \def\1{\bm{1}}
61
- \newcommand{\train}{\mathcal{D}}
62
- \newcommand{\valid}{\mathcal{D_{\mathrm{valid}}}}
63
- \newcommand{\test}{\mathcal{D_{\mathrm{test}}}}
64
-
65
- \def\eps{{\epsilon}}
66
-
67
-
68
- % Random variables
69
- \def\reta{{\textnormal{$\eta$}}}
70
- \def\ra{{\textnormal{a}}}
71
- \def\rb{{\textnormal{b}}}
72
- \def\rc{{\textnormal{c}}}
73
- \def\rd{{\textnormal{d}}}
74
- \def\re{{\textnormal{e}}}
75
- \def\rf{{\textnormal{f}}}
76
- \def\rg{{\textnormal{g}}}
77
- \def\rh{{\textnormal{h}}}
78
- \def\ri{{\textnormal{i}}}
79
- \def\rj{{\textnormal{j}}}
80
- \def\rk{{\textnormal{k}}}
81
- \def\rl{{\textnormal{l}}}
82
- % rm is already a command, just don't name any random variables m
83
- \def\rn{{\textnormal{n}}}
84
- \def\ro{{\textnormal{o}}}
85
- \def\rp{{\textnormal{p}}}
86
- \def\rq{{\textnormal{q}}}
87
- \def\rr{{\textnormal{r}}}
88
- \def\rs{{\textnormal{s}}}
89
- \def\rt{{\textnormal{t}}}
90
- \def\ru{{\textnormal{u}}}
91
- \def\rv{{\textnormal{v}}}
92
- \def\rw{{\textnormal{w}}}
93
- \def\rx{{\textnormal{x}}}
94
- \def\ry{{\textnormal{y}}}
95
- \def\rz{{\textnormal{z}}}
96
-
97
- % Random vectors
98
- \def\rvepsilon{{\mathbf{\epsilon}}}
99
- \def\rvtheta{{\mathbf{\theta}}}
100
- \def\rva{{\mathbf{a}}}
101
- \def\rvb{{\mathbf{b}}}
102
- \def\rvc{{\mathbf{c}}}
103
- \def\rvd{{\mathbf{d}}}
104
- \def\rve{{\mathbf{e}}}
105
- \def\rvf{{\mathbf{f}}}
106
- \def\rvg{{\mathbf{g}}}
107
- \def\rvh{{\mathbf{h}}}
108
- \def\rvu{{\mathbf{i}}}
109
- \def\rvj{{\mathbf{j}}}
110
- \def\rvk{{\mathbf{k}}}
111
- \def\rvl{{\mathbf{l}}}
112
- \def\rvm{{\mathbf{m}}}
113
- \def\rvn{{\mathbf{n}}}
114
- \def\rvo{{\mathbf{o}}}
115
- \def\rvp{{\mathbf{p}}}
116
- \def\rvq{{\mathbf{q}}}
117
- \def\rvr{{\mathbf{r}}}
118
- \def\rvs{{\mathbf{s}}}
119
- \def\rvt{{\mathbf{t}}}
120
- \def\rvu{{\mathbf{u}}}
121
- \def\rvv{{\mathbf{v}}}
122
- \def\rvw{{\mathbf{w}}}
123
- \def\rvx{{\mathbf{x}}}
124
- \def\rvy{{\mathbf{y}}}
125
- \def\rvz{{\mathbf{z}}}
126
-
127
- % Elements of random vectors
128
- \def\erva{{\textnormal{a}}}
129
- \def\ervb{{\textnormal{b}}}
130
- \def\ervc{{\textnormal{c}}}
131
- \def\ervd{{\textnormal{d}}}
132
- \def\erve{{\textnormal{e}}}
133
- \def\ervf{{\textnormal{f}}}
134
- \def\ervg{{\textnormal{g}}}
135
- \def\ervh{{\textnormal{h}}}
136
- \def\ervi{{\textnormal{i}}}
137
- \def\ervj{{\textnormal{j}}}
138
- \def\ervk{{\textnormal{k}}}
139
- \def\ervl{{\textnormal{l}}}
140
- \def\ervm{{\textnormal{m}}}
141
- \def\ervn{{\textnormal{n}}}
142
- \def\ervo{{\textnormal{o}}}
143
- \def\ervp{{\textnormal{p}}}
144
- \def\ervq{{\textnormal{q}}}
145
- \def\ervr{{\textnormal{r}}}
146
- \def\ervs{{\textnormal{s}}}
147
- \def\ervt{{\textnormal{t}}}
148
- \def\ervu{{\textnormal{u}}}
149
- \def\ervv{{\textnormal{v}}}
150
- \def\ervw{{\textnormal{w}}}
151
- \def\ervx{{\textnormal{x}}}
152
- \def\ervy{{\textnormal{y}}}
153
- \def\ervz{{\textnormal{z}}}
154
-
155
- % Random matrices
156
- \def\rmA{{\mathbf{A}}}
157
- \def\rmB{{\mathbf{B}}}
158
- \def\rmC{{\mathbf{C}}}
159
- \def\rmD{{\mathbf{D}}}
160
- \def\rmE{{\mathbf{E}}}
161
- \def\rmF{{\mathbf{F}}}
162
- \def\rmG{{\mathbf{G}}}
163
- \def\rmH{{\mathbf{H}}}
164
- \def\rmI{{\mathbf{I}}}
165
- \def\rmJ{{\mathbf{J}}}
166
- \def\rmK{{\mathbf{K}}}
167
- \def\rmL{{\mathbf{L}}}
168
- \def\rmM{{\mathbf{M}}}
169
- \def\rmN{{\mathbf{N}}}
170
- \def\rmO{{\mathbf{O}}}
171
- \def\rmP{{\mathbf{P}}}
172
- \def\rmQ{{\mathbf{Q}}}
173
- \def\rmR{{\mathbf{R}}}
174
- \def\rmS{{\mathbf{S}}}
175
- \def\rmT{{\mathbf{T}}}
176
- \def\rmU{{\mathbf{U}}}
177
- \def\rmV{{\mathbf{V}}}
178
- \def\rmW{{\mathbf{W}}}
179
- \def\rmX{{\mathbf{X}}}
180
- \def\rmY{{\mathbf{Y}}}
181
- \def\rmZ{{\mathbf{Z}}}
182
-
183
- % Elements of random matrices
184
- \def\ermA{{\textnormal{A}}}
185
- \def\ermB{{\textnormal{B}}}
186
- \def\ermC{{\textnormal{C}}}
187
- \def\ermD{{\textnormal{D}}}
188
- \def\ermE{{\textnormal{E}}}
189
- \def\ermF{{\textnormal{F}}}
190
- \def\ermG{{\textnormal{G}}}
191
- \def\ermH{{\textnormal{H}}}
192
- \def\ermI{{\textnormal{I}}}
193
- \def\ermJ{{\textnormal{J}}}
194
- \def\ermK{{\textnormal{K}}}
195
- \def\ermL{{\textnormal{L}}}
196
- \def\ermM{{\textnormal{M}}}
197
- \def\ermN{{\textnormal{N}}}
198
- \def\ermO{{\textnormal{O}}}
199
- \def\ermP{{\textnormal{P}}}
200
- \def\ermQ{{\textnormal{Q}}}
201
- \def\ermR{{\textnormal{R}}}
202
- \def\ermS{{\textnormal{S}}}
203
- \def\ermT{{\textnormal{T}}}
204
- \def\ermU{{\textnormal{U}}}
205
- \def\ermV{{\textnormal{V}}}
206
- \def\ermW{{\textnormal{W}}}
207
- \def\ermX{{\textnormal{X}}}
208
- \def\ermY{{\textnormal{Y}}}
209
- \def\ermZ{{\textnormal{Z}}}
210
-
211
- % Vectors
212
- \def\vzero{{\bm{0}}}
213
- \def\vone{{\bm{1}}}
214
- \def\vmu{{\bm{\mu}}}
215
- \def\vtheta{{\bm{\theta}}}
216
- \def\va{{\bm{a}}}
217
- \def\vb{{\bm{b}}}
218
- \def\vc{{\bm{c}}}
219
- \def\vd{{\bm{d}}}
220
- \def\ve{{\bm{e}}}
221
- \def\vf{{\bm{f}}}
222
- \def\vg{{\bm{g}}}
223
- \def\vh{{\bm{h}}}
224
- \def\vi{{\bm{i}}}
225
- \def\vj{{\bm{j}}}
226
- \def\vk{{\bm{k}}}
227
- \def\vl{{\bm{l}}}
228
- \def\vm{{\bm{m}}}
229
- \def\vn{{\bm{n}}}
230
- \def\vo{{\bm{o}}}
231
- \def\vp{{\bm{p}}}
232
- \def\vq{{\bm{q}}}
233
- \def\vr{{\bm{r}}}
234
- \def\vs{{\bm{s}}}
235
- \def\vt{{\bm{t}}}
236
- \def\vu{{\bm{u}}}
237
- \def\vv{{\bm{v}}}
238
- \def\vw{{\bm{w}}}
239
- \def\vx{{\bm{x}}}
240
- \def\vy{{\bm{y}}}
241
- \def\vz{{\bm{z}}}
242
-
243
- % Elements of vectors
244
- \def\evalpha{{\alpha}}
245
- \def\evbeta{{\beta}}
246
- \def\evepsilon{{\epsilon}}
247
- \def\evlambda{{\lambda}}
248
- \def\evomega{{\omega}}
249
- \def\evmu{{\mu}}
250
- \def\evpsi{{\psi}}
251
- \def\evsigma{{\sigma}}
252
- \def\evtheta{{\theta}}
253
- \def\eva{{a}}
254
- \def\evb{{b}}
255
- \def\evc{{c}}
256
- \def\evd{{d}}
257
- \def\eve{{e}}
258
- \def\evf{{f}}
259
- \def\evg{{g}}
260
- \def\evh{{h}}
261
- \def\evi{{i}}
262
- \def\evj{{j}}
263
- \def\evk{{k}}
264
- \def\evl{{l}}
265
- \def\evm{{m}}
266
- \def\evn{{n}}
267
- \def\evo{{o}}
268
- \def\evp{{p}}
269
- \def\evq{{q}}
270
- \def\evr{{r}}
271
- \def\evs{{s}}
272
- \def\evt{{t}}
273
- \def\evu{{u}}
274
- \def\evv{{v}}
275
- \def\evw{{w}}
276
- \def\evx{{x}}
277
- \def\evy{{y}}
278
- \def\evz{{z}}
279
-
280
- % Matrix
281
- \def\mA{{\bm{A}}}
282
- \def\mB{{\bm{B}}}
283
- \def\mC{{\bm{C}}}
284
- \def\mD{{\bm{D}}}
285
- \def\mE{{\bm{E}}}
286
- \def\mF{{\bm{F}}}
287
- \def\mG{{\bm{G}}}
288
- \def\mH{{\bm{H}}}
289
- \def\mI{{\bm{I}}}
290
- \def\mJ{{\bm{J}}}
291
- \def\mK{{\bm{K}}}
292
- \def\mL{{\bm{L}}}
293
- \def\mM{{\bm{M}}}
294
- \def\mN{{\bm{N}}}
295
- \def\mO{{\bm{O}}}
296
- \def\mP{{\bm{P}}}
297
- \def\mQ{{\bm{Q}}}
298
- \def\mR{{\bm{R}}}
299
- \def\mS{{\bm{S}}}
300
- \def\mT{{\bm{T}}}
301
- \def\mU{{\bm{U}}}
302
- \def\mV{{\bm{V}}}
303
- \def\mW{{\bm{W}}}
304
- \def\mX{{\bm{X}}}
305
- \def\mY{{\bm{Y}}}
306
- \def\mZ{{\bm{Z}}}
307
- \def\mBeta{{\bm{\beta}}}
308
- \def\mPhi{{\bm{\Phi}}}
309
- \def\mLambda{{\bm{\Lambda}}}
310
- \def\mSigma{{\bm{\Sigma}}}
311
-
312
- % Tensor
313
- \DeclareMathAlphabet{\mathsfit}{\encodingdefault}{\sfdefault}{m}{sl}
314
- \SetMathAlphabet{\mathsfit}{bold}{\encodingdefault}{\sfdefault}{bx}{n}
315
- \newcommand{\tens}[1]{\bm{\mathsfit{#1}}}
316
- \def\tA{{\tens{A}}}
317
- \def\tB{{\tens{B}}}
318
- \def\tC{{\tens{C}}}
319
- \def\tD{{\tens{D}}}
320
- \def\tE{{\tens{E}}}
321
- \def\tF{{\tens{F}}}
322
- \def\tG{{\tens{G}}}
323
- \def\tH{{\tens{H}}}
324
- \def\tI{{\tens{I}}}
325
- \def\tJ{{\tens{J}}}
326
- \def\tK{{\tens{K}}}
327
- \def\tL{{\tens{L}}}
328
- \def\tM{{\tens{M}}}
329
- \def\tN{{\tens{N}}}
330
- \def\tO{{\tens{O}}}
331
- \def\tP{{\tens{P}}}
332
- \def\tQ{{\tens{Q}}}
333
- \def\tR{{\tens{R}}}
334
- \def\tS{{\tens{S}}}
335
- \def\tT{{\tens{T}}}
336
- \def\tU{{\tens{U}}}
337
- \def\tV{{\tens{V}}}
338
- \def\tW{{\tens{W}}}
339
- \def\tX{{\tens{X}}}
340
- \def\tY{{\tens{Y}}}
341
- \def\tZ{{\tens{Z}}}
342
-
343
-
344
- % Graph
345
- \def\gA{{\mathcal{A}}}
346
- \def\gB{{\mathcal{B}}}
347
- \def\gC{{\mathcal{C}}}
348
- \def\gD{{\mathcal{D}}}
349
- \def\gE{{\mathcal{E}}}
350
- \def\gF{{\mathcal{F}}}
351
- \def\gG{{\mathcal{G}}}
352
- \def\gH{{\mathcal{H}}}
353
- \def\gI{{\mathcal{I}}}
354
- \def\gJ{{\mathcal{J}}}
355
- \def\gK{{\mathcal{K}}}
356
- \def\gL{{\mathcal{L}}}
357
- \def\gM{{\mathcal{M}}}
358
- \def\gN{{\mathcal{N}}}
359
- \def\gO{{\mathcal{O}}}
360
- \def\gP{{\mathcal{P}}}
361
- \def\gQ{{\mathcal{Q}}}
362
- \def\gR{{\mathcal{R}}}
363
- \def\gS{{\mathcal{S}}}
364
- \def\gT{{\mathcal{T}}}
365
- \def\gU{{\mathcal{U}}}
366
- \def\gV{{\mathcal{V}}}
367
- \def\gW{{\mathcal{W}}}
368
- \def\gX{{\mathcal{X}}}
369
- \def\gY{{\mathcal{Y}}}
370
- \def\gZ{{\mathcal{Z}}}
371
-
372
- % Sets
373
- \def\sA{{\mathbb{A}}}
374
- \def\sB{{\mathbb{B}}}
375
- \def\sC{{\mathbb{C}}}
376
- \def\sD{{\mathbb{D}}}
377
- % Don't use a set called E, because this would be the same as our symbol
378
- % for expectation.
379
- \def\sF{{\mathbb{F}}}
380
- \def\sG{{\mathbb{G}}}
381
- \def\sH{{\mathbb{H}}}
382
- \def\sI{{\mathbb{I}}}
383
- \def\sJ{{\mathbb{J}}}
384
- \def\sK{{\mathbb{K}}}
385
- \def\sL{{\mathbb{L}}}
386
- \def\sM{{\mathbb{M}}}
387
- \def\sN{{\mathbb{N}}}
388
- \def\sO{{\mathbb{O}}}
389
- \def\sP{{\mathbb{P}}}
390
- \def\sQ{{\mathbb{Q}}}
391
- \def\sR{{\mathbb{R}}}
392
- \def\sS{{\mathbb{S}}}
393
- \def\sT{{\mathbb{T}}}
394
- \def\sU{{\mathbb{U}}}
395
- \def\sV{{\mathbb{V}}}
396
- \def\sW{{\mathbb{W}}}
397
- \def\sX{{\mathbb{X}}}
398
- \def\sY{{\mathbb{Y}}}
399
- \def\sZ{{\mathbb{Z}}}
400
-
401
- % Entries of a matrix
402
- \def\emLambda{{\Lambda}}
403
- \def\emA{{A}}
404
- \def\emB{{B}}
405
- \def\emC{{C}}
406
- \def\emD{{D}}
407
- \def\emE{{E}}
408
- \def\emF{{F}}
409
- \def\emG{{G}}
410
- \def\emH{{H}}
411
- \def\emI{{I}}
412
- \def\emJ{{J}}
413
- \def\emK{{K}}
414
- \def\emL{{L}}
415
- \def\emM{{M}}
416
- \def\emN{{N}}
417
- \def\emO{{O}}
418
- \def\emP{{P}}
419
- \def\emQ{{Q}}
420
- \def\emR{{R}}
421
- \def\emS{{S}}
422
- \def\emT{{T}}
423
- \def\emU{{U}}
424
- \def\emV{{V}}
425
- \def\emW{{W}}
426
- \def\emX{{X}}
427
- \def\emY{{Y}}
428
- \def\emZ{{Z}}
429
- \def\emSigma{{\Sigma}}
430
-
431
- % entries of a tensor
432
- % Same font as tensor, without \bm wrapper
433
- \newcommand{\etens}[1]{\mathsfit{#1}}
434
- \def\etLambda{{\etens{\Lambda}}}
435
- \def\etA{{\etens{A}}}
436
- \def\etB{{\etens{B}}}
437
- \def\etC{{\etens{C}}}
438
- \def\etD{{\etens{D}}}
439
- \def\etE{{\etens{E}}}
440
- \def\etF{{\etens{F}}}
441
- \def\etG{{\etens{G}}}
442
- \def\etH{{\etens{H}}}
443
- \def\etI{{\etens{I}}}
444
- \def\etJ{{\etens{J}}}
445
- \def\etK{{\etens{K}}}
446
- \def\etL{{\etens{L}}}
447
- \def\etM{{\etens{M}}}
448
- \def\etN{{\etens{N}}}
449
- \def\etO{{\etens{O}}}
450
- \def\etP{{\etens{P}}}
451
- \def\etQ{{\etens{Q}}}
452
- \def\etR{{\etens{R}}}
453
- \def\etS{{\etens{S}}}
454
- \def\etT{{\etens{T}}}
455
- \def\etU{{\etens{U}}}
456
- \def\etV{{\etens{V}}}
457
- \def\etW{{\etens{W}}}
458
- \def\etX{{\etens{X}}}
459
- \def\etY{{\etens{Y}}}
460
- \def\etZ{{\etens{Z}}}
461
-
462
- % The true underlying data generating distribution
463
- \newcommand{\pdata}{p_{\rm{data}}}
464
- % The empirical distribution defined by the training set
465
- \newcommand{\ptrain}{\hat{p}_{\rm{data}}}
466
- \newcommand{\Ptrain}{\hat{P}_{\rm{data}}}
467
- % The model distribution
468
- \newcommand{\pmodel}{p_{\rm{model}}}
469
- \newcommand{\Pmodel}{P_{\rm{model}}}
470
- \newcommand{\ptildemodel}{\tilde{p}_{\rm{model}}}
471
- % Stochastic autoencoder distributions
472
- \newcommand{\pencode}{p_{\rm{encoder}}}
473
- \newcommand{\pdecode}{p_{\rm{decoder}}}
474
- \newcommand{\precons}{p_{\rm{reconstruct}}}
475
-
476
- \newcommand{\laplace}{\mathrm{Laplace}} % Laplace distribution
477
-
478
- \newcommand{\E}{\mathbb{E}}
479
- \newcommand{\Ls}{\mathcal{L}}
480
- \newcommand{\R}{\mathbb{R}}
481
- \newcommand{\emp}{\tilde{p}}
482
- \newcommand{\lr}{\alpha}
483
- \newcommand{\reg}{\lambda}
484
- \newcommand{\rect}{\mathrm{rectifier}}
485
- \newcommand{\softmax}{\mathrm{softmax}}
486
- \newcommand{\sigmoid}{\sigma}
487
- \newcommand{\softplus}{\zeta}
488
- \newcommand{\KL}{D_{\mathrm{KL}}}
489
- \newcommand{\Var}{\mathrm{Var}}
490
- \newcommand{\standarderror}{\mathrm{SE}}
491
- \newcommand{\Cov}{\mathrm{Cov}}
492
- % Wolfram Mathworld says $L^2$ is for function spaces and $\ell^2$ is for vectors
493
- % But then they seem to use $L^2$ for vectors throughout the site, and so does
494
- % wikipedia.
495
- \newcommand{\normlzero}{L^0}
496
- \newcommand{\normlone}{L^1}
497
- \newcommand{\normltwo}{L^2}
498
- \newcommand{\normlp}{L^p}
499
- \newcommand{\normmax}{L^\infty}
500
-
501
- \newcommand{\parents}{Pa} % See usage in notation.tex. Chosen to match Daphne's book.
502
-
503
- \DeclareMathOperator*{\argmax}{arg\,max}
504
- \DeclareMathOperator*{\argmin}{arg\,min}
505
-
506
- \DeclareMathOperator{\sign}{sign}
507
- \DeclareMathOperator{\Tr}{Tr}
508
- \let\ab\allowbreak
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
latex_templates/Default/natbib.sty DELETED
@@ -1,1246 +0,0 @@
1
- %%
2
- %% This is file `natbib.sty',
3
- %% generated with the docstrip utility.
4
- %%
5
- %% The original source files were:
6
- %%
7
- %% natbib.dtx (with options: `package,all')
8
- %% =============================================
9
- %% IMPORTANT NOTICE:
10
- %%
11
- %% This program can be redistributed and/or modified under the terms
12
- %% of the LaTeX Project Public License Distributed from CTAN
13
- %% archives in directory macros/latex/base/lppl.txt; either
14
- %% version 1 of the License, or any later version.
15
- %%
16
- %% This is a generated file.
17
- %% It may not be distributed without the original source file natbib.dtx.
18
- %%
19
- %% Full documentation can be obtained by LaTeXing that original file.
20
- %% Only a few abbreviated comments remain here to describe the usage.
21
- %% =============================================
22
- %% Copyright 1993-2009 Patrick W Daly
23
- %% Max-Planck-Institut f\"ur Sonnensystemforschung
24
- %% Max-Planck-Str. 2
25
- %% D-37191 Katlenburg-Lindau
26
- %% Germany
27
- %% E-mail: daly@mps.mpg.de
28
- \NeedsTeXFormat{LaTeX2e}[1995/06/01]
29
- \ProvidesPackage{natbib}
30
- [2009/07/16 8.31 (PWD, AO)]
31
-
32
- % This package reimplements the LaTeX \cite command to be used for various
33
- % citation styles, both author-year and numerical. It accepts BibTeX
34
- % output intended for many other packages, and therefore acts as a
35
- % general, all-purpose citation-style interface.
36
- %
37
- % With standard numerical .bst files, only numerical citations are
38
- % possible. With an author-year .bst file, both numerical and
39
- % author-year citations are possible.
40
- %
41
- % If author-year citations are selected, \bibitem must have one of the
42
- % following forms:
43
- % \bibitem[Jones et al.(1990)]{key}...
44
- % \bibitem[Jones et al.(1990)Jones, Baker, and Williams]{key}...
45
- % \bibitem[Jones et al., 1990]{key}...
46
- % \bibitem[\protect\citeauthoryear{Jones, Baker, and Williams}{Jones
47
- % et al.}{1990}]{key}...
48
- % \bibitem[\protect\citeauthoryear{Jones et al.}{1990}]{key}...
49
- % \bibitem[\protect\astroncite{Jones et al.}{1990}]{key}...
50
- % \bibitem[\protect\citename{Jones et al., }1990]{key}...
51
- % \harvarditem[Jones et al.]{Jones, Baker, and Williams}{1990}{key}...
52
- %
53
- % This is either to be made up manually, or to be generated by an
54
- % appropriate .bst file with BibTeX.
55
- % Author-year mode || Numerical mode
56
- % Then, \citet{key} ==>> Jones et al. (1990) || Jones et al. [21]
57
- % \citep{key} ==>> (Jones et al., 1990) || [21]
58
- % Multiple citations as normal:
59
- % \citep{key1,key2} ==>> (Jones et al., 1990; Smith, 1989) || [21,24]
60
- % or (Jones et al., 1990, 1991) || [21,24]
61
- % or (Jones et al., 1990a,b) || [21,24]
62
- % \cite{key} is the equivalent of \citet{key} in author-year mode
63
- % and of \citep{key} in numerical mode
64
- % Full author lists may be forced with \citet* or \citep*, e.g.
65
- % \citep*{key} ==>> (Jones, Baker, and Williams, 1990)
66
- % Optional notes as:
67
- % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2)
68
- % \citep[e.g.,][]{key} ==>> (e.g., Jones et al., 1990)
69
- % \citep[see][pg. 34]{key}==>> (see Jones et al., 1990, pg. 34)
70
- % (Note: in standard LaTeX, only one note is allowed, after the ref.
71
- % Here, one note is like the standard, two make pre- and post-notes.)
72
- % \citealt{key} ==>> Jones et al. 1990
73
- % \citealt*{key} ==>> Jones, Baker, and Williams 1990
74
- % \citealp{key} ==>> Jones et al., 1990
75
- % \citealp*{key} ==>> Jones, Baker, and Williams, 1990
76
- % Additional citation possibilities (both author-year and numerical modes)
77
- % \citeauthor{key} ==>> Jones et al.
78
- % \citeauthor*{key} ==>> Jones, Baker, and Williams
79
- % \citeyear{key} ==>> 1990
80
- % \citeyearpar{key} ==>> (1990)
81
- % \citetext{priv. comm.} ==>> (priv. comm.)
82
- % \citenum{key} ==>> 11 [non-superscripted]
83
- % Note: full author lists depends on whether the bib style supports them;
84
- % if not, the abbreviated list is printed even when full requested.
85
- %
86
- % For names like della Robbia at the start of a sentence, use
87
- % \Citet{dRob98} ==>> Della Robbia (1998)
88
- % \Citep{dRob98} ==>> (Della Robbia, 1998)
89
- % \Citeauthor{dRob98} ==>> Della Robbia
90
- %
91
- %
92
- % Citation aliasing is achieved with
93
- % \defcitealias{key}{text}
94
- % \citetalias{key} ==>> text
95
- % \citepalias{key} ==>> (text)
96
- %
97
- % Defining the citation mode and punctual (citation style)
98
- % \setcitestyle{<comma-separated list of keywords, same
99
- % as the package options>}
100
- % Example: \setcitestyle{square,semicolon}
101
- % Alternatively:
102
- % Use \bibpunct with 6 mandatory arguments:
103
- % 1. opening bracket for citation
104
- % 2. closing bracket
105
- % 3. citation separator (for multiple citations in one \cite)
106
- % 4. the letter n for numerical styles, s for superscripts
107
- % else anything for author-year
108
- % 5. punctuation between authors and date
109
- % 6. punctuation between years (or numbers) when common authors missing
110
- % One optional argument is the character coming before post-notes. It
111
- % appears in square braces before all other arguments. May be left off.
112
- % Example (and default) \bibpunct[, ]{(}{)}{;}{a}{,}{,}
113
- %
114
- % To make this automatic for a given bib style, named newbib, say, make
115
- % a local configuration file, natbib.cfg, with the definition
116
- % \newcommand{\bibstyle@newbib}{\bibpunct...}
117
- % Then the \bibliographystyle{newbib} will cause \bibstyle@newbib to
118
- % be called on THE NEXT LATEX RUN (via the aux file).
119
- %
120
- % Such preprogrammed definitions may be invoked anywhere in the text
121
- % by calling \citestyle{newbib}. This is only useful if the style specified
122
- % differs from that in \bibliographystyle.
123
- %
124
- % With \citeindextrue and \citeindexfalse, one can control whether the
125
- % \cite commands make an automatic entry of the citation in the .idx
126
- % indexing file. For this, \makeindex must also be given in the preamble.
127
- %
128
- % Package Options: (for selecting punctuation)
129
- % round - round parentheses are used (default)
130
- % square - square brackets are used [option]
131
- % curly - curly braces are used {option}
132
- % angle - angle brackets are used <option>
133
- % semicolon - multiple citations separated by semi-colon (default)
134
- % colon - same as semicolon, an earlier confusion
135
- % comma - separated by comma
136
- % authoryear - selects author-year citations (default)
137
- % numbers- selects numerical citations
138
- % super - numerical citations as superscripts
139
- % sort - sorts multiple citations according to order in ref. list
140
- % sort&compress - like sort, but also compresses numerical citations
141
- % compress - compresses without sorting
142
- % longnamesfirst - makes first citation full author list
143
- % sectionbib - puts bibliography in a \section* instead of \chapter*
144
- % merge - allows the citation key to have a * prefix,
145
- % signifying to merge its reference with that of the previous citation.
146
- % elide - if references are merged, repeated portions of later ones may be removed.
147
- % mcite - recognizes and ignores the * prefix for merging.
148
- % Punctuation so selected dominates over any predefined ones.
149
- % Package options are called as, e.g.
150
- % \usepackage[square,comma]{natbib}
151
- % LaTeX the source file natbib.dtx to obtain more details
152
- % or the file natnotes.tex for a brief reference sheet.
153
- %-----------------------------------------------------------
154
- \providecommand\@ifxundefined[1]{%
155
- \ifx#1\@undefined\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi
156
- }%
157
- \providecommand\@ifnum[1]{%
158
- \ifnum#1\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi
159
- }%
160
- \providecommand\@ifx[1]{%
161
- \ifx#1\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi
162
- }%
163
- \providecommand\appdef[2]{%
164
- \toks@\expandafter{#1}\@temptokena{#2}%
165
- \edef#1{\the\toks@\the\@temptokena}%
166
- }%
167
- \@ifclassloaded{agu2001}{\PackageError{natbib}
168
- {The agu2001 class already includes natbib coding,\MessageBreak
169
- so you should not add it explicitly}
170
- {Type <Return> for now, but then later remove\MessageBreak
171
- the command \protect\usepackage{natbib} from the document}
172
- \endinput}{}
173
- \@ifclassloaded{agutex}{\PackageError{natbib}
174
- {The AGUTeX class already includes natbib coding,\MessageBreak
175
- so you should not add it explicitly}
176
- {Type <Return> for now, but then later remove\MessageBreak
177
- the command \protect\usepackage{natbib} from the document}
178
- \endinput}{}
179
- \@ifclassloaded{aguplus}{\PackageError{natbib}
180
- {The aguplus class already includes natbib coding,\MessageBreak
181
- so you should not add it explicitly}
182
- {Type <Return> for now, but then later remove\MessageBreak
183
- the command \protect\usepackage{natbib} from the document}
184
- \endinput}{}
185
- \@ifclassloaded{nlinproc}{\PackageError{natbib}
186
- {The nlinproc class already includes natbib coding,\MessageBreak
187
- so you should not add it explicitly}
188
- {Type <Return> for now, but then later remove\MessageBreak
189
- the command \protect\usepackage{natbib} from the document}
190
- \endinput}{}
191
- \@ifclassloaded{egs}{\PackageError{natbib}
192
- {The egs class already includes natbib coding,\MessageBreak
193
- so you should not add it explicitly}
194
- {Type <Return> for now, but then later remove\MessageBreak
195
- the command \protect\usepackage{natbib} from the document}
196
- \endinput}{}
197
- \@ifclassloaded{egu}{\PackageError{natbib}
198
- {The egu class already includes natbib coding,\MessageBreak
199
- so you should not add it explicitly}
200
- {Type <Return> for now, but then later remove\MessageBreak
201
- the command \protect\usepackage{natbib} from the document}
202
- \endinput}{}
203
- % Define citation punctuation for some author-year styles
204
- % One may add and delete at this point
205
- % Or put additions into local configuration file natbib.cfg
206
- \newcommand\bibstyle@chicago{\bibpunct{(}{)}{;}{a}{,}{,}}
207
- \newcommand\bibstyle@named{\bibpunct{[}{]}{;}{a}{,}{,}}
208
- \newcommand\bibstyle@agu{\bibpunct{[}{]}{;}{a}{,}{,~}}%Amer. Geophys. Union
209
- \newcommand\bibstyle@copernicus{\bibpunct{(}{)}{;}{a}{,}{,}}%Copernicus Publications
210
- \let\bibstyle@egu=\bibstyle@copernicus
211
- \let\bibstyle@egs=\bibstyle@copernicus
212
- \newcommand\bibstyle@agsm{\bibpunct{(}{)}{,}{a}{}{,}\gdef\harvardand{\&}}
213
- \newcommand\bibstyle@kluwer{\bibpunct{(}{)}{,}{a}{}{,}\gdef\harvardand{\&}}
214
- \newcommand\bibstyle@dcu{\bibpunct{(}{)}{;}{a}{;}{,}\gdef\harvardand{and}}
215
- \newcommand\bibstyle@aa{\bibpunct{(}{)}{;}{a}{}{,}} %Astronomy & Astrophysics
216
- \newcommand\bibstyle@pass{\bibpunct{(}{)}{;}{a}{,}{,}}%Planet. & Space Sci
217
- \newcommand\bibstyle@anngeo{\bibpunct{(}{)}{;}{a}{,}{,}}%Annales Geophysicae
218
- \newcommand\bibstyle@nlinproc{\bibpunct{(}{)}{;}{a}{,}{,}}%Nonlin.Proc.Geophys.
219
- % Define citation punctuation for some numerical styles
220
- \newcommand\bibstyle@cospar{\bibpunct{/}{/}{,}{n}{}{}%
221
- \gdef\bibnumfmt##1{##1.}}
222
- \newcommand\bibstyle@esa{\bibpunct{(Ref.~}{)}{,}{n}{}{}%
223
- \gdef\bibnumfmt##1{##1.\hspace{1em}}}
224
- \newcommand\bibstyle@nature{\bibpunct{}{}{,}{s}{}{\textsuperscript{,}}%
225
- \gdef\bibnumfmt##1{##1.}}
226
- % The standard LaTeX styles
227
- \newcommand\bibstyle@plain{\bibpunct{[}{]}{,}{n}{}{,}}
228
- \let\bibstyle@alpha=\bibstyle@plain
229
- \let\bibstyle@abbrv=\bibstyle@plain
230
- \let\bibstyle@unsrt=\bibstyle@plain
231
- % The author-year modifications of the standard styles
232
- \newcommand\bibstyle@plainnat{\bibpunct{[}{]}{,}{a}{,}{,}}
233
- \let\bibstyle@abbrvnat=\bibstyle@plainnat
234
- \let\bibstyle@unsrtnat=\bibstyle@plainnat
235
- \newif\ifNAT@numbers \NAT@numbersfalse
236
- \newif\ifNAT@super \NAT@superfalse
237
- \let\NAT@merge\z@
238
- \DeclareOption{numbers}{\NAT@numberstrue
239
- \ExecuteOptions{square,comma,nobibstyle}}
240
- \DeclareOption{super}{\NAT@supertrue\NAT@numberstrue
241
- \renewcommand\NAT@open{}\renewcommand\NAT@close{}
242
- \ExecuteOptions{nobibstyle}}
243
- \DeclareOption{authoryear}{\NAT@numbersfalse
244
- \ExecuteOptions{round,semicolon,bibstyle}}
245
- \DeclareOption{round}{%
246
- \renewcommand\NAT@open{(} \renewcommand\NAT@close{)}
247
- \ExecuteOptions{nobibstyle}}
248
- \DeclareOption{square}{%
249
- \renewcommand\NAT@open{[} \renewcommand\NAT@close{]}
250
- \ExecuteOptions{nobibstyle}}
251
- \DeclareOption{angle}{%
252
- \renewcommand\NAT@open{$<$} \renewcommand\NAT@close{$>$}
253
- \ExecuteOptions{nobibstyle}}
254
- \DeclareOption{curly}{%
255
- \renewcommand\NAT@open{\{} \renewcommand\NAT@close{\}}
256
- \ExecuteOptions{nobibstyle}}
257
- \DeclareOption{comma}{\renewcommand\NAT@sep{,}
258
- \ExecuteOptions{nobibstyle}}
259
- \DeclareOption{semicolon}{\renewcommand\NAT@sep{;}
260
- \ExecuteOptions{nobibstyle}}
261
- \DeclareOption{colon}{\ExecuteOptions{semicolon}}
262
- \DeclareOption{nobibstyle}{\let\bibstyle=\@gobble}
263
- \DeclareOption{bibstyle}{\let\bibstyle=\@citestyle}
264
- \newif\ifNAT@openbib \NAT@openbibfalse
265
- \DeclareOption{openbib}{\NAT@openbibtrue}
266
- \DeclareOption{sectionbib}{\def\NAT@sectionbib{on}}
267
- \def\NAT@sort{\z@}
268
- \def\NAT@cmprs{\z@}
269
- \DeclareOption{sort}{\def\NAT@sort{\@ne}}
270
- \DeclareOption{compress}{\def\NAT@cmprs{\@ne}}
271
- \DeclareOption{sort&compress}{\def\NAT@sort{\@ne}\def\NAT@cmprs{\@ne}}
272
- \DeclareOption{mcite}{\let\NAT@merge\@ne}
273
- \DeclareOption{merge}{\@ifnum{\NAT@merge<\tw@}{\let\NAT@merge\tw@}{}}
274
- \DeclareOption{elide}{\@ifnum{\NAT@merge<\thr@@}{\let\NAT@merge\thr@@}{}}
275
- \@ifpackageloaded{cite}{\PackageWarningNoLine{natbib}
276
- {The `cite' package should not be used\MessageBreak
277
- with natbib. Use option `sort' instead}\ExecuteOptions{sort}}{}
278
- \@ifpackageloaded{mcite}{\PackageWarningNoLine{natbib}
279
- {The `mcite' package should not be used\MessageBreak
280
- with natbib. Use option `merge' instead}\ExecuteOptions{merge}}{}
281
- \@ifpackageloaded{citeref}{\PackageError{natbib}
282
- {The `citeref' package must be loaded after natbib}%
283
- {Move \protect\usepackage{citeref} to after \string\usepackage{natbib}}}{}
284
- \newif\ifNAT@longnames\NAT@longnamesfalse
285
- \DeclareOption{longnamesfirst}{\NAT@longnamestrue}
286
- \DeclareOption{nonamebreak}{\def\NAT@nmfmt#1{\mbox{\NAT@up#1}}}
287
- \def\NAT@nmfmt#1{{\NAT@up#1}}
288
- \renewcommand\bibstyle[1]{\csname bibstyle@#1\endcsname}
289
- \AtBeginDocument{\global\let\bibstyle=\@gobble}
290
- \let\@citestyle\bibstyle
291
- \newcommand\citestyle[1]{\@citestyle{#1}\let\bibstyle\@gobble}
292
- \newcommand\bibpunct[7][, ]%
293
- {\gdef\NAT@open{#2}\gdef\NAT@close{#3}\gdef
294
- \NAT@sep{#4}\global\NAT@numbersfalse
295
- \ifx #5n\global\NAT@numberstrue\global\NAT@superfalse
296
- \else
297
- \ifx #5s\global\NAT@numberstrue\global\NAT@supertrue
298
- \fi\fi
299
- \gdef\NAT@aysep{#6}\gdef\NAT@yrsep{#7}%
300
- \gdef\NAT@cmt{#1}%
301
- \NAT@@setcites
302
- }
303
- \newcommand\setcitestyle[1]{
304
- \@for\@tempa:=#1\do
305
- {\def\@tempb{round}\ifx\@tempa\@tempb
306
- \renewcommand\NAT@open{(}\renewcommand\NAT@close{)}\fi
307
- \def\@tempb{square}\ifx\@tempa\@tempb
308
- \renewcommand\NAT@open{[}\renewcommand\NAT@close{]}\fi
309
- \def\@tempb{angle}\ifx\@tempa\@tempb
310
- \renewcommand\NAT@open{$<$}\renewcommand\NAT@close{$>$}\fi
311
- \def\@tempb{curly}\ifx\@tempa\@tempb
312
- \renewcommand\NAT@open{\{}\renewcommand\NAT@close{\}}\fi
313
- \def\@tempb{semicolon}\ifx\@tempa\@tempb
314
- \renewcommand\NAT@sep{;}\fi
315
- \def\@tempb{colon}\ifx\@tempa\@tempb
316
- \renewcommand\NAT@sep{;}\fi
317
- \def\@tempb{comma}\ifx\@tempa\@tempb
318
- \renewcommand\NAT@sep{,}\fi
319
- \def\@tempb{authoryear}\ifx\@tempa\@tempb
320
- \NAT@numbersfalse\fi
321
- \def\@tempb{numbers}\ifx\@tempa\@tempb
322
- \NAT@numberstrue\NAT@superfalse\fi
323
- \def\@tempb{super}\ifx\@tempa\@tempb
324
- \NAT@numberstrue\NAT@supertrue\fi
325
- \expandafter\NAT@find@eq\@tempa=\relax\@nil
326
- \if\@tempc\relax\else
327
- \expandafter\NAT@rem@eq\@tempc
328
- \def\@tempb{open}\ifx\@tempa\@tempb
329
- \xdef\NAT@open{\@tempc}\fi
330
- \def\@tempb{close}\ifx\@tempa\@tempb
331
- \xdef\NAT@close{\@tempc}\fi
332
- \def\@tempb{aysep}\ifx\@tempa\@tempb
333
- \xdef\NAT@aysep{\@tempc}\fi
334
- \def\@tempb{yysep}\ifx\@tempa\@tempb
335
- \xdef\NAT@yrsep{\@tempc}\fi
336
- \def\@tempb{notesep}\ifx\@tempa\@tempb
337
- \xdef\NAT@cmt{\@tempc}\fi
338
- \def\@tempb{citesep}\ifx\@tempa\@tempb
339
- \xdef\NAT@sep{\@tempc}\fi
340
- \fi
341
- }%
342
- \NAT@@setcites
343
- }
344
- \def\NAT@find@eq#1=#2\@nil{\def\@tempa{#1}\def\@tempc{#2}}
345
- \def\NAT@rem@eq#1={\def\@tempc{#1}}
346
- \def\NAT@@setcites{\global\let\bibstyle\@gobble}
347
- \AtBeginDocument{\let\NAT@@setcites\NAT@set@cites}
348
- \newcommand\NAT@open{(} \newcommand\NAT@close{)}
349
- \newcommand\NAT@sep{;}
350
- \ProcessOptions
351
- \newcommand\NAT@aysep{,} \newcommand\NAT@yrsep{,}
352
- \newcommand\NAT@cmt{, }
353
- \newcommand\NAT@cite%
354
- [3]{\ifNAT@swa\NAT@@open\if*#2*\else#2\NAT@spacechar\fi
355
- #1\if*#3*\else\NAT@cmt#3\fi\NAT@@close\else#1\fi\endgroup}
356
- \newcommand\NAT@citenum%
357
- [3]{\ifNAT@swa\NAT@@open\if*#2*\else#2\NAT@spacechar\fi
358
- #1\if*#3*\else\NAT@cmt#3\fi\NAT@@close\else#1\fi\endgroup}
359
- \newcommand\NAT@citesuper[3]{\ifNAT@swa
360
- \if*#2*\else#2\NAT@spacechar\fi
361
- \unskip\kern\p@\textsuperscript{\NAT@@open#1\NAT@@close}%
362
- \if*#3*\else\NAT@spacechar#3\fi\else #1\fi\endgroup}
363
- \providecommand\textsuperscript[1]{\mbox{$^{\mbox{\scriptsize#1}}$}}
364
- \begingroup \catcode`\_=8
365
- \gdef\NAT@ifcat@num#1{%
366
- \ifcat_\ifnum\z@<0#1_\else A\fi
367
- \expandafter\@firstoftwo
368
- \else
369
- \expandafter\@secondoftwo
370
- \fi
371
- }%
372
- \endgroup
373
- \providecommand\@firstofone[1]{#1}
374
- \newcommand\NAT@citexnum{}
375
- \def\NAT@citexnum[#1][#2]#3{%
376
- \NAT@reset@parser
377
- \NAT@sort@cites{#3}%
378
- \NAT@reset@citea
379
- \@cite{\def\NAT@num{-1}\let\NAT@last@yr\relax\let\NAT@nm\@empty
380
- \@for\@citeb:=\NAT@cite@list\do
381
- {\@safe@activestrue
382
- \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
383
- \@safe@activesfalse
384
- \@ifundefined{b@\@citeb\@extra@b@citeb}{%
385
- {\reset@font\bfseries?}
386
- \NAT@citeundefined\PackageWarning{natbib}%
387
- {Citation `\@citeb' on page \thepage \space undefined}}%
388
- {\let\NAT@last@num\NAT@num\let\NAT@last@nm\NAT@nm
389
- \NAT@parse{\@citeb}%
390
- \ifNAT@longnames\@ifundefined{bv@\@citeb\@extra@b@citeb}{%
391
- \let\NAT@name=\NAT@all@names
392
- \global\@namedef{bv@\@citeb\@extra@b@citeb}{}}{}%
393
- \fi
394
- \ifNAT@full\let\NAT@nm\NAT@all@names\else
395
- \let\NAT@nm\NAT@name\fi
396
- \ifNAT@swa
397
- \@ifnum{\NAT@ctype>\@ne}{%
398
- \@citea
399
- \NAT@hyper@{\@ifnum{\NAT@ctype=\tw@}{\NAT@test{\NAT@ctype}}{\NAT@alias}}%
400
- }{%
401
- \@ifnum{\NAT@cmprs>\z@}{%
402
- \NAT@ifcat@num\NAT@num
403
- {\let\NAT@nm=\NAT@num}%
404
- {\def\NAT@nm{-2}}%
405
- \NAT@ifcat@num\NAT@last@num
406
- {\@tempcnta=\NAT@last@num\relax}%
407
- {\@tempcnta\m@ne}%
408
- \@ifnum{\NAT@nm=\@tempcnta}{%
409
- \@ifnum{\NAT@merge>\@ne}{}{\NAT@last@yr@mbox}%
410
- }{%
411
- \advance\@tempcnta by\@ne
412
- \@ifnum{\NAT@nm=\@tempcnta}{%
413
- \ifx\NAT@last@yr\relax
414
- \def@NAT@last@yr{\@citea}%
415
- \else
416
- \def@NAT@last@yr{--\NAT@penalty}%
417
- \fi
418
- }{%
419
- \NAT@last@yr@mbox
420
- }%
421
- }%
422
- }{%
423
- \@tempswatrue
424
- \@ifnum{\NAT@merge>\@ne}{\@ifnum{\NAT@last@num=\NAT@num\relax}{\@tempswafalse}{}}{}%
425
- \if@tempswa\NAT@citea@mbox\fi
426
- }%
427
- }%
428
- \NAT@def@citea
429
- \else
430
- \ifcase\NAT@ctype
431
- \ifx\NAT@last@nm\NAT@nm \NAT@yrsep\NAT@penalty\NAT@space\else
432
- \@citea \NAT@test{\@ne}\NAT@spacechar\NAT@mbox{\NAT@super@kern\NAT@@open}%
433
- \fi
434
- \if*#1*\else#1\NAT@spacechar\fi
435
- \NAT@mbox{\NAT@hyper@{{\citenumfont{\NAT@num}}}}%
436
- \NAT@def@citea@box
437
- \or
438
- \NAT@hyper@citea@space{\NAT@test{\NAT@ctype}}%
439
- \or
440
- \NAT@hyper@citea@space{\NAT@test{\NAT@ctype}}%
441
- \or
442
- \NAT@hyper@citea@space\NAT@alias
443
- \fi
444
- \fi
445
- }%
446
- }%
447
- \@ifnum{\NAT@cmprs>\z@}{\NAT@last@yr}{}%
448
- \ifNAT@swa\else
449
- \@ifnum{\NAT@ctype=\z@}{%
450
- \if*#2*\else\NAT@cmt#2\fi
451
- }{}%
452
- \NAT@mbox{\NAT@@close}%
453
- \fi
454
- }{#1}{#2}%
455
- }%
456
- \def\NAT@citea@mbox{%
457
- \@citea\mbox{\NAT@hyper@{{\citenumfont{\NAT@num}}}}%
458
- }%
459
- \def\NAT@hyper@#1{%
460
- \hyper@natlinkstart{\@citeb\@extra@b@citeb}#1\hyper@natlinkend
461
- }%
462
- \def\NAT@hyper@citea#1{%
463
- \@citea
464
- \NAT@hyper@{#1}%
465
- \NAT@def@citea
466
- }%
467
- \def\NAT@hyper@citea@space#1{%
468
- \@citea
469
- \NAT@hyper@{#1}%
470
- \NAT@def@citea@space
471
- }%
472
- \def\def@NAT@last@yr#1{%
473
- \protected@edef\NAT@last@yr{%
474
- #1%
475
- \noexpand\mbox{%
476
- \noexpand\hyper@natlinkstart{\@citeb\@extra@b@citeb}%
477
- {\noexpand\citenumfont{\NAT@num}}%
478
- \noexpand\hyper@natlinkend
479
- }%
480
- }%
481
- }%
482
- \def\NAT@last@yr@mbox{%
483
- \NAT@last@yr\let\NAT@last@yr\relax
484
- \NAT@citea@mbox
485
- }%
486
- \newcommand\NAT@test[1]{%
487
- \@ifnum{#1=\@ne}{%
488
- \ifx\NAT@nm\NAT@noname
489
- \begingroup\reset@font\bfseries(author?)\endgroup
490
- \PackageWarning{natbib}{%
491
- Author undefined for citation`\@citeb' \MessageBreak on page \thepage%
492
- }%
493
- \else \NAT@nm
494
- \fi
495
- }{%
496
- \if\relax\NAT@date\relax
497
- \begingroup\reset@font\bfseries(year?)\endgroup
498
- \PackageWarning{natbib}{%
499
- Year undefined for citation`\@citeb' \MessageBreak on page \thepage%
500
- }%
501
- \else \NAT@date
502
- \fi
503
- }%
504
- }%
505
- \let\citenumfont=\@empty
506
- \newcommand\NAT@citex{}
507
- \def\NAT@citex%
508
- [#1][#2]#3{%
509
- \NAT@reset@parser
510
- \NAT@sort@cites{#3}%
511
- \NAT@reset@citea
512
- \@cite{\let\NAT@nm\@empty\let\NAT@year\@empty
513
- \@for\@citeb:=\NAT@cite@list\do
514
- {\@safe@activestrue
515
- \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
516
- \@safe@activesfalse
517
- \@ifundefined{b@\@citeb\@extra@b@citeb}{\@citea%
518
- {\reset@font\bfseries ?}\NAT@citeundefined
519
- \PackageWarning{natbib}%
520
- {Citation `\@citeb' on page \thepage \space undefined}\def\NAT@date{}}%
521
- {\let\NAT@last@nm=\NAT@nm\let\NAT@last@yr=\NAT@year
522
- \NAT@parse{\@citeb}%
523
- \ifNAT@longnames\@ifundefined{bv@\@citeb\@extra@b@citeb}{%
524
- \let\NAT@name=\NAT@all@names
525
- \global\@namedef{bv@\@citeb\@extra@b@citeb}{}}{}%
526
- \fi
527
- \ifNAT@full\let\NAT@nm\NAT@all@names\else
528
- \let\NAT@nm\NAT@name\fi
529
- \ifNAT@swa\ifcase\NAT@ctype
530
- \if\relax\NAT@date\relax
531
- \@citea\NAT@hyper@{\NAT@nmfmt{\NAT@nm}\NAT@date}%
532
- \else
533
- \ifx\NAT@last@nm\NAT@nm\NAT@yrsep
534
- \ifx\NAT@last@yr\NAT@year
535
- \def\NAT@temp{{?}}%
536
- \ifx\NAT@temp\NAT@exlab\PackageWarningNoLine{natbib}%
537
- {Multiple citation on page \thepage: same authors and
538
- year\MessageBreak without distinguishing extra
539
- letter,\MessageBreak appears as question mark}\fi
540
- \NAT@hyper@{\NAT@exlab}%
541
- \else\unskip\NAT@spacechar
542
- \NAT@hyper@{\NAT@date}%
543
- \fi
544
- \else
545
- \@citea\NAT@hyper@{%
546
- \NAT@nmfmt{\NAT@nm}%
547
- \hyper@natlinkbreak{%
548
- \NAT@aysep\NAT@spacechar}{\@citeb\@extra@b@citeb
549
- }%
550
- \NAT@date
551
- }%
552
- \fi
553
- \fi
554
- \or\@citea\NAT@hyper@{\NAT@nmfmt{\NAT@nm}}%
555
- \or\@citea\NAT@hyper@{\NAT@date}%
556
- \or\@citea\NAT@hyper@{\NAT@alias}%
557
- \fi \NAT@def@citea
558
- \else
559
- \ifcase\NAT@ctype
560
- \if\relax\NAT@date\relax
561
- \@citea\NAT@hyper@{\NAT@nmfmt{\NAT@nm}}%
562
- \else
563
- \ifx\NAT@last@nm\NAT@nm\NAT@yrsep
564
- \ifx\NAT@last@yr\NAT@year
565
- \def\NAT@temp{{?}}%
566
- \ifx\NAT@temp\NAT@exlab\PackageWarningNoLine{natbib}%
567
- {Multiple citation on page \thepage: same authors and
568
- year\MessageBreak without distinguishing extra
569
- letter,\MessageBreak appears as question mark}\fi
570
- \NAT@hyper@{\NAT@exlab}%
571
- \else
572
- \unskip\NAT@spacechar
573
- \NAT@hyper@{\NAT@date}%
574
- \fi
575
- \else
576
- \@citea\NAT@hyper@{%
577
- \NAT@nmfmt{\NAT@nm}%
578
- \hyper@natlinkbreak{\NAT@spacechar\NAT@@open\if*#1*\else#1\NAT@spacechar\fi}%
579
- {\@citeb\@extra@b@citeb}%
580
- \NAT@date
581
- }%
582
- \fi
583
- \fi
584
- \or\@citea\NAT@hyper@{\NAT@nmfmt{\NAT@nm}}%
585
- \or\@citea\NAT@hyper@{\NAT@date}%
586
- \or\@citea\NAT@hyper@{\NAT@alias}%
587
- \fi
588
- \if\relax\NAT@date\relax
589
- \NAT@def@citea
590
- \else
591
- \NAT@def@citea@close
592
- \fi
593
- \fi
594
- }}\ifNAT@swa\else\if*#2*\else\NAT@cmt#2\fi
595
- \if\relax\NAT@date\relax\else\NAT@@close\fi\fi}{#1}{#2}}
596
- \def\NAT@spacechar{\ }%
597
- \def\NAT@separator{\NAT@sep\NAT@penalty}%
598
- \def\NAT@reset@citea{\c@NAT@ctr\@ne\let\@citea\@empty}%
599
- \def\NAT@def@citea{\def\@citea{\NAT@separator\NAT@space}}%
600
- \def\NAT@def@citea@space{\def\@citea{\NAT@separator\NAT@spacechar}}%
601
- \def\NAT@def@citea@close{\def\@citea{\NAT@@close\NAT@separator\NAT@space}}%
602
- \def\NAT@def@citea@box{\def\@citea{\NAT@mbox{\NAT@@close}\NAT@separator\NAT@spacechar}}%
603
- \newif\ifNAT@par \NAT@partrue
604
- \newcommand\NAT@@open{\ifNAT@par\NAT@open\fi}
605
- \newcommand\NAT@@close{\ifNAT@par\NAT@close\fi}
606
- \newcommand\NAT@alias{\@ifundefined{al@\@citeb\@extra@b@citeb}{%
607
- {\reset@font\bfseries(alias?)}\PackageWarning{natbib}
608
- {Alias undefined for citation `\@citeb'
609
- \MessageBreak on page \thepage}}{\@nameuse{al@\@citeb\@extra@b@citeb}}}
610
- \let\NAT@up\relax
611
- \newcommand\NAT@Up[1]{{\let\protect\@unexpandable@protect\let~\relax
612
- \expandafter\NAT@deftemp#1}\expandafter\NAT@UP\NAT@temp}
613
- \newcommand\NAT@deftemp[1]{\xdef\NAT@temp{#1}}
614
- \newcommand\NAT@UP[1]{\let\@tempa\NAT@UP\ifcat a#1\MakeUppercase{#1}%
615
- \let\@tempa\relax\else#1\fi\@tempa}
616
- \newcommand\shortcites[1]{%
617
- \@bsphack\@for\@citeb:=#1\do
618
- {\@safe@activestrue
619
- \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
620
- \@safe@activesfalse
621
- \global\@namedef{bv@\@citeb\@extra@b@citeb}{}}\@esphack}
622
- \newcommand\NAT@biblabel[1]{\hfill}
623
- \newcommand\NAT@biblabelnum[1]{\bibnumfmt{#1}}
624
- \let\bibnumfmt\@empty
625
- \providecommand\@biblabel[1]{[#1]}
626
- \AtBeginDocument{\ifx\bibnumfmt\@empty\let\bibnumfmt\@biblabel\fi}
627
- \newcommand\NAT@bibsetnum[1]{\settowidth\labelwidth{\@biblabel{#1}}%
628
- \setlength{\leftmargin}{\labelwidth}\addtolength{\leftmargin}{\labelsep}%
629
- \setlength{\itemsep}{\bibsep}\setlength{\parsep}{\z@}%
630
- \ifNAT@openbib
631
- \addtolength{\leftmargin}{\bibindent}%
632
- \setlength{\itemindent}{-\bibindent}%
633
- \setlength{\listparindent}{\itemindent}%
634
- \setlength{\parsep}{0pt}%
635
- \fi
636
- }
637
- \newlength{\bibhang}
638
- \setlength{\bibhang}{1em}
639
- \newlength{\bibsep}
640
- {\@listi \global\bibsep\itemsep \global\advance\bibsep by\parsep}
641
-
642
- \newcommand\NAT@bibsetup%
643
- [1]{\setlength{\leftmargin}{\bibhang}\setlength{\itemindent}{-\leftmargin}%
644
- \setlength{\itemsep}{\bibsep}\setlength{\parsep}{\z@}}
645
- \newcommand\NAT@set@cites{%
646
- \ifNAT@numbers
647
- \ifNAT@super \let\@cite\NAT@citesuper
648
- \def\NAT@mbox##1{\unskip\nobreak\textsuperscript{##1}}%
649
- \let\citeyearpar=\citeyear
650
- \let\NAT@space\relax
651
- \def\NAT@super@kern{\kern\p@}%
652
- \else
653
- \let\NAT@mbox=\mbox
654
- \let\@cite\NAT@citenum
655
- \let\NAT@space\NAT@spacechar
656
- \let\NAT@super@kern\relax
657
- \fi
658
- \let\@citex\NAT@citexnum
659
- \let\@biblabel\NAT@biblabelnum
660
- \let\@bibsetup\NAT@bibsetnum
661
- \renewcommand\NAT@idxtxt{\NAT@name\NAT@spacechar\NAT@open\NAT@num\NAT@close}%
662
- \def\natexlab##1{}%
663
- \def\NAT@penalty{\penalty\@m}%
664
- \else
665
- \let\@cite\NAT@cite
666
- \let\@citex\NAT@citex
667
- \let\@biblabel\NAT@biblabel
668
- \let\@bibsetup\NAT@bibsetup
669
- \let\NAT@space\NAT@spacechar
670
- \let\NAT@penalty\@empty
671
- \renewcommand\NAT@idxtxt{\NAT@name\NAT@spacechar\NAT@open\NAT@date\NAT@close}%
672
- \def\natexlab##1{##1}%
673
- \fi}
674
- \AtBeginDocument{\NAT@set@cites}
675
- \AtBeginDocument{\ifx\SK@def\@undefined\else
676
- \ifx\SK@cite\@empty\else
677
- \SK@def\@citex[#1][#2]#3{\SK@\SK@@ref{#3}\SK@@citex[#1][#2]{#3}}\fi
678
- \ifx\SK@citeauthor\@undefined\def\HAR@checkdef{}\else
679
- \let\citeauthor\SK@citeauthor
680
- \let\citefullauthor\SK@citefullauthor
681
- \let\citeyear\SK@citeyear\fi
682
- \fi}
683
- \newif\ifNAT@full\NAT@fullfalse
684
- \newif\ifNAT@swa
685
- \DeclareRobustCommand\citet
686
- {\begingroup\NAT@swafalse\let\NAT@ctype\z@\NAT@partrue
687
- \@ifstar{\NAT@fulltrue\NAT@citetp}{\NAT@fullfalse\NAT@citetp}}
688
- \newcommand\NAT@citetp{\@ifnextchar[{\NAT@@citetp}{\NAT@@citetp[]}}
689
- \newcommand\NAT@@citetp{}
690
- \def\NAT@@citetp[#1]{\@ifnextchar[{\@citex[#1]}{\@citex[][#1]}}
691
- \DeclareRobustCommand\citep
692
- {\begingroup\NAT@swatrue\let\NAT@ctype\z@\NAT@partrue
693
- \@ifstar{\NAT@fulltrue\NAT@citetp}{\NAT@fullfalse\NAT@citetp}}
694
- \DeclareRobustCommand\cite
695
- {\begingroup\let\NAT@ctype\z@\NAT@partrue\NAT@swatrue
696
- \@ifstar{\NAT@fulltrue\NAT@cites}{\NAT@fullfalse\NAT@cites}}
697
- \newcommand\NAT@cites{\@ifnextchar [{\NAT@@citetp}{%
698
- \ifNAT@numbers\else
699
- \NAT@swafalse
700
- \fi
701
- \NAT@@citetp[]}}
702
- \DeclareRobustCommand\citealt
703
- {\begingroup\NAT@swafalse\let\NAT@ctype\z@\NAT@parfalse
704
- \@ifstar{\NAT@fulltrue\NAT@citetp}{\NAT@fullfalse\NAT@citetp}}
705
- \DeclareRobustCommand\citealp
706
- {\begingroup\NAT@swatrue\let\NAT@ctype\z@\NAT@parfalse
707
- \@ifstar{\NAT@fulltrue\NAT@citetp}{\NAT@fullfalse\NAT@citetp}}
708
- \DeclareRobustCommand\citenum
709
- {\begingroup
710
- \NAT@swatrue\let\NAT@ctype\z@\NAT@parfalse\let\textsuperscript\NAT@spacechar
711
- \NAT@citexnum[][]}
712
- \DeclareRobustCommand\citeauthor
713
- {\begingroup\NAT@swafalse\let\NAT@ctype\@ne\NAT@parfalse
714
- \@ifstar{\NAT@fulltrue\NAT@citetp}{\NAT@fullfalse\NAT@citetp}}
715
- \DeclareRobustCommand\Citet
716
- {\begingroup\NAT@swafalse\let\NAT@ctype\z@\NAT@partrue
717
- \let\NAT@up\NAT@Up
718
- \@ifstar{\NAT@fulltrue\NAT@citetp}{\NAT@fullfalse\NAT@citetp}}
719
- \DeclareRobustCommand\Citep
720
- {\begingroup\NAT@swatrue\let\NAT@ctype\z@\NAT@partrue
721
- \let\NAT@up\NAT@Up
722
- \@ifstar{\NAT@fulltrue\NAT@citetp}{\NAT@fullfalse\NAT@citetp}}
723
- \DeclareRobustCommand\Citealt
724
- {\begingroup\NAT@swafalse\let\NAT@ctype\z@\NAT@parfalse
725
- \let\NAT@up\NAT@Up
726
- \@ifstar{\NAT@fulltrue\NAT@citetp}{\NAT@fullfalse\NAT@citetp}}
727
- \DeclareRobustCommand\Citealp
728
- {\begingroup\NAT@swatrue\let\NAT@ctype\z@\NAT@parfalse
729
- \let\NAT@up\NAT@Up
730
- \@ifstar{\NAT@fulltrue\NAT@citetp}{\NAT@fullfalse\NAT@citetp}}
731
- \DeclareRobustCommand\Citeauthor
732
- {\begingroup\NAT@swafalse\let\NAT@ctype\@ne\NAT@parfalse
733
- \let\NAT@up\NAT@Up
734
- \@ifstar{\NAT@fulltrue\NAT@citetp}{\NAT@fullfalse\NAT@citetp}}
735
- \DeclareRobustCommand\citeyear
736
- {\begingroup\NAT@swafalse\let\NAT@ctype\tw@\NAT@parfalse\NAT@citetp}
737
- \DeclareRobustCommand\citeyearpar
738
- {\begingroup\NAT@swatrue\let\NAT@ctype\tw@\NAT@partrue\NAT@citetp}
739
- \newcommand\citetext[1]{\NAT@open#1\NAT@close}
740
- \DeclareRobustCommand\citefullauthor
741
- {\citeauthor*}
742
- \newcommand\defcitealias[2]{%
743
- \@ifundefined{al@#1\@extra@b@citeb}{}
744
- {\PackageWarning{natbib}{Overwriting existing alias for citation #1}}
745
- \@namedef{al@#1\@extra@b@citeb}{#2}}
746
- \DeclareRobustCommand\citetalias{\begingroup
747
- \NAT@swafalse\let\NAT@ctype\thr@@\NAT@parfalse\NAT@citetp}
748
- \DeclareRobustCommand\citepalias{\begingroup
749
- \NAT@swatrue\let\NAT@ctype\thr@@\NAT@partrue\NAT@citetp}
750
- \renewcommand\nocite[1]{\@bsphack
751
- \@for\@citeb:=#1\do{%
752
- \@safe@activestrue
753
- \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
754
- \@safe@activesfalse
755
- \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
756
- \if*\@citeb\else
757
- \@ifundefined{b@\@citeb\@extra@b@citeb}{%
758
- \NAT@citeundefined \PackageWarning{natbib}%
759
- {Citation `\@citeb' undefined}}{}\fi}%
760
- \@esphack}
761
- \newcommand\NAT@parse[1]{%
762
- \begingroup
763
- \let\protect=\@unexpandable@protect
764
- \let~\relax
765
- \let\active@prefix=\@gobble
766
- \edef\NAT@temp{\csname b@#1\@extra@b@citeb\endcsname}%
767
- \aftergroup\NAT@split
768
- \expandafter
769
- \endgroup
770
- \NAT@temp{}{}{}{}{}@@%
771
- \expandafter\NAT@parse@date\NAT@date??????@@%
772
- \ifciteindex\NAT@index\fi
773
- }%
774
- \def\NAT@split#1#2#3#4#5@@{%
775
- \gdef\NAT@num{#1}\gdef\NAT@name{#3}\gdef\NAT@date{#2}%
776
- \gdef\NAT@all@names{#4}%
777
- \ifx\NAT@num\@empty\gdef\NAT@num{0}\fi
778
- \ifx\NAT@noname\NAT@all@names \gdef\NAT@all@names{#3}\fi
779
- }%
780
- \def\NAT@reset@parser{%
781
- \global\let\NAT@num\@empty
782
- \global\let\NAT@name\@empty
783
- \global\let\NAT@date\@empty
784
- \global\let\NAT@all@names\@empty
785
- }%
786
- \newcommand\NAT@parse@date{}
787
- \def\NAT@parse@date#1#2#3#4#5#6@@{%
788
- \ifnum\the\catcode`#1=11\def\NAT@year{}\def\NAT@exlab{#1}\else
789
- \ifnum\the\catcode`#2=11\def\NAT@year{#1}\def\NAT@exlab{#2}\else
790
- \ifnum\the\catcode`#3=11\def\NAT@year{#1#2}\def\NAT@exlab{#3}\else
791
- \ifnum\the\catcode`#4=11\def\NAT@year{#1#2#3}\def\NAT@exlab{#4}\else
792
- \def\NAT@year{#1#2#3#4}\def\NAT@exlab{{#5}}\fi\fi\fi\fi}
793
- \newcommand\NAT@index{}
794
- \let\NAT@makeindex=\makeindex
795
- \renewcommand\makeindex{\NAT@makeindex
796
- \renewcommand\NAT@index{\@bsphack\begingroup
797
- \def~{\string~}\@wrindex{\NAT@idxtxt}}}
798
- \newcommand\NAT@idxtxt{\NAT@name\NAT@spacechar\NAT@open\NAT@date\NAT@close}
799
- \@ifxundefined\@indexfile{}{\let\NAT@makeindex\relax\makeindex}
800
- \newif\ifciteindex \citeindexfalse
801
- \newcommand\citeindextype{default}
802
- \newcommand\NAT@index@alt{{\let\protect=\noexpand\let~\relax
803
- \xdef\NAT@temp{\NAT@idxtxt}}\expandafter\NAT@exp\NAT@temp\@nil}
804
- \newcommand\NAT@exp{}
805
- \def\NAT@exp#1\@nil{\index[\citeindextype]{#1}}
806
-
807
- \AtBeginDocument{%
808
- \@ifpackageloaded{index}{\let\NAT@index=\NAT@index@alt}{}}
809
- \newcommand\NAT@ifcmd{\futurelet\NAT@temp\NAT@ifxcmd}
810
- \newcommand\NAT@ifxcmd{\ifx\NAT@temp\relax\else\expandafter\NAT@bare\fi}
811
- \def\NAT@bare#1(#2)#3(@)#4\@nil#5{%
812
- \if @#2
813
- \expandafter\NAT@apalk#1, , \@nil{#5}%
814
- \else
815
- \NAT@wrout{\the\c@NAT@ctr}{#2}{#1}{#3}{#5}%
816
- \fi
817
- }
818
- \newcommand\NAT@wrout[5]{%
819
- \if@filesw
820
- {\let\protect\noexpand\let~\relax
821
- \immediate
822
- \write\@auxout{\string\bibcite{#5}{{#1}{#2}{{#3}}{{#4}}}}}\fi
823
- \ignorespaces}
824
- \def\NAT@noname{{}}
825
- \renewcommand\bibitem{\@ifnextchar[{\@lbibitem}{\@lbibitem[]}}%
826
- \let\NAT@bibitem@first@sw\@secondoftwo
827
- \def\@lbibitem[#1]#2{%
828
- \if\relax\@extra@b@citeb\relax\else
829
- \@ifundefined{br@#2\@extra@b@citeb}{}{%
830
- \@namedef{br@#2}{\@nameuse{br@#2\@extra@b@citeb}}%
831
- }%
832
- \fi
833
- \@ifundefined{b@#2\@extra@b@citeb}{%
834
- \def\NAT@num{}%
835
- }{%
836
- \NAT@parse{#2}%
837
- }%
838
- \def\NAT@tmp{#1}%
839
- \expandafter\let\expandafter\bibitemOpen\csname NAT@b@open@#2\endcsname
840
- \expandafter\let\expandafter\bibitemShut\csname NAT@b@shut@#2\endcsname
841
- \@ifnum{\NAT@merge>\@ne}{%
842
- \NAT@bibitem@first@sw{%
843
- \@firstoftwo
844
- }{%
845
- \@ifundefined{NAT@b*@#2}{%
846
- \@firstoftwo
847
- }{%
848
- \expandafter\def\expandafter\NAT@num\expandafter{\the\c@NAT@ctr}%
849
- \@secondoftwo
850
- }%
851
- }%
852
- }{%
853
- \@firstoftwo
854
- }%
855
- {%
856
- \global\advance\c@NAT@ctr\@ne
857
- \@ifx{\NAT@tmp\@empty}{\@firstoftwo}{%
858
- \@secondoftwo
859
- }%
860
- {%
861
- \expandafter\def\expandafter\NAT@num\expandafter{\the\c@NAT@ctr}%
862
- \global\NAT@stdbsttrue
863
- }{}%
864
- \bibitem@fin
865
- \item[\hfil\NAT@anchor{#2}{\NAT@num}]%
866
- \global\let\NAT@bibitem@first@sw\@secondoftwo
867
- \NAT@bibitem@init
868
- }%
869
- {%
870
- \NAT@anchor{#2}{}%
871
- \NAT@bibitem@cont
872
- \bibitem@fin
873
- }%
874
- \@ifx{\NAT@tmp\@empty}{%
875
- \NAT@wrout{\the\c@NAT@ctr}{}{}{}{#2}%
876
- }{%
877
- \expandafter\NAT@ifcmd\NAT@tmp(@)(@)\@nil{#2}%
878
- }%
879
- }%
880
- \def\bibitem@fin{%
881
- \@ifxundefined\@bibstop{}{\csname bibitem@\@bibstop\endcsname}%
882
- }%
883
- \def\NAT@bibitem@init{%
884
- \let\@bibstop\@undefined
885
- }%
886
- \def\NAT@bibitem@cont{%
887
- \let\bibitem@Stop\bibitemStop
888
- \let\bibitem@NoStop\bibitemContinue
889
- }%
890
- \def\BibitemOpen{%
891
- \bibitemOpen
892
- }%
893
- \def\BibitemShut#1{%
894
- \bibitemShut
895
- \def\@bibstop{#1}%
896
- \let\bibitem@Stop\bibitemStop
897
- \let\bibitem@NoStop\bibitemNoStop
898
- }%
899
- \def\bibitemStop{}%
900
- \def\bibitemNoStop{.\spacefactor\@mmm\space}%
901
- \def\bibitemContinue{\spacefactor\@mmm\space}%
902
- \mathchardef\@mmm=3000 %
903
- \providecommand{\bibAnnote}[3]{%
904
- \BibitemShut{#1}%
905
- \def\@tempa{#3}\@ifx{\@tempa\@empty}{}{%
906
- \begin{quotation}\noindent
907
- \textsc{Key:}\ #2\\\textsc{Annotation:}\ \@tempa
908
- \end{quotation}%
909
- }%
910
- }%
911
- \providecommand{\bibAnnoteFile}[2]{%
912
- \IfFileExists{#2}{%
913
- \bibAnnote{#1}{#2}{\input{#2}}%
914
- }{%
915
- \bibAnnote{#1}{#2}{}%
916
- }%
917
- }%
918
- \let\bibitemOpen\relax
919
- \let\bibitemShut\relax
920
- \def\bibfield{\@ifnum{\NAT@merge>\tw@}{\@bibfield}{\@secondoftwo}}%
921
- \def\@bibfield#1#2{%
922
- \begingroup
923
- \let\Doi\@gobble
924
- \let\bibinfo\relax
925
- \let\restore@protect\@empty
926
- \protected@edef\@tempa{#2}%
927
- \aftergroup\def\aftergroup\@tempa
928
- \expandafter\endgroup\expandafter{\@tempa}%
929
- \expandafter\@ifx\expandafter{\csname @bib#1\endcsname\@tempa}{%
930
- \expandafter\let\expandafter\@tempa\csname @bib@X#1\endcsname
931
- }{%
932
- \expandafter\let\csname @bib#1\endcsname\@tempa
933
- \expandafter\let\expandafter\@tempa\csname @bib@Y#1\endcsname
934
- }%
935
- \@ifx{\@tempa\relax}{\let\@tempa\@firstofone}{}%
936
- \@tempa{#2}%
937
- }%
938
- \def\bibinfo#1{%
939
- \expandafter\let\expandafter\@tempa\csname bibinfo@X@#1\endcsname
940
- \@ifx{\@tempa\relax}{\@firstofone}{\@tempa}%
941
- }%
942
- \def\@bib@Xauthor#1{\let\@bib@Xjournal\@gobble}%
943
- \def\@bib@Xjournal#1{\begingroup\let\bibinfo@X@journal\@bib@Z@journal#1\endgroup}%
944
- \def\@bibibid@#1{\textit{ibid}.}%
945
- \appdef\NAT@bibitem@init{%
946
- \let\@bibauthor \@empty
947
- \let\@bibjournal \@empty
948
- \let\@bib@Z@journal\@bibibid@
949
- }%
950
- \ifx\SK@lbibitem\@undefined\else
951
- \let\SK@lbibitem\@lbibitem
952
- \def\@lbibitem[#1]#2{%
953
- \SK@lbibitem[#1]{#2}\SK@\SK@@label{#2}\ignorespaces}\fi
954
- \newif\ifNAT@stdbst \NAT@stdbstfalse
955
-
956
- \AtEndDocument{%
957
- \ifNAT@stdbst\if@filesw
958
- \immediate\write\@auxout{%
959
- \string\providecommand\string\NAT@force@numbers{}%
960
- \string\NAT@force@numbers
961
- }%
962
- \fi\fi
963
- }
964
- \newcommand\NAT@force@numbers{%
965
- \ifNAT@numbers\else
966
- \PackageError{natbib}{Bibliography not compatible with author-year
967
- citations.\MessageBreak
968
- Press <return> to continue in numerical citation style}
969
- {Check the bibliography entries for non-compliant syntax,\MessageBreak
970
- or select author-year BibTeX style, e.g. plainnat}%
971
- \global\NAT@numberstrue\fi}
972
-
973
- \providecommand\bibcite{}
974
- \renewcommand\bibcite[2]{%
975
- \@ifundefined{b@#1\@extra@binfo}{\relax}{%
976
- \NAT@citemultiple
977
- \PackageWarningNoLine{natbib}{Citation `#1' multiply defined}%
978
- }%
979
- \global\@namedef{b@#1\@extra@binfo}{#2}%
980
- }%
981
- \AtEndDocument{\NAT@swatrue\let\bibcite\NAT@testdef}
982
- \newcommand\NAT@testdef[2]{%
983
- \def\NAT@temp{#2}%
984
- \expandafter \ifx \csname b@#1\@extra@binfo\endcsname\NAT@temp
985
- \else
986
- \ifNAT@swa \NAT@swafalse
987
- \PackageWarningNoLine{natbib}{%
988
- Citation(s) may have changed.\MessageBreak
989
- Rerun to get citations correct%
990
- }%
991
- \fi
992
- \fi
993
- }%
994
- \newcommand\NAT@apalk{}
995
- \def\NAT@apalk#1, #2, #3\@nil#4{%
996
- \if\relax#2\relax
997
- \global\NAT@stdbsttrue
998
- \NAT@wrout{#1}{}{}{}{#4}%
999
- \else
1000
- \NAT@wrout{\the\c@NAT@ctr}{#2}{#1}{}{#4}%
1001
- \fi
1002
- }%
1003
- \newcommand\citeauthoryear{}
1004
- \def\citeauthoryear#1#2#3(@)(@)\@nil#4{%
1005
- \if\relax#3\relax
1006
- \NAT@wrout{\the\c@NAT@ctr}{#2}{#1}{}{#4}%
1007
- \else
1008
- \NAT@wrout{\the\c@NAT@ctr}{#3}{#2}{#1}{#4}%
1009
- \fi
1010
- }%
1011
- \newcommand\citestarts{\NAT@open}%
1012
- \newcommand\citeends{\NAT@close}%
1013
- \newcommand\betweenauthors{and}%
1014
- \newcommand\astroncite{}
1015
- \def\astroncite#1#2(@)(@)\@nil#3{%
1016
- \NAT@wrout{\the\c@NAT@ctr}{#2}{#1}{}{#3}%
1017
- }%
1018
- \newcommand\citename{}
1019
- \def\citename#1#2(@)(@)\@nil#3{\expandafter\NAT@apalk#1#2, \@nil{#3}}
1020
- \newcommand\harvarditem[4][]{%
1021
- \if\relax#1\relax
1022
- \bibitem[#2(#3)]{#4}%
1023
- \else
1024
- \bibitem[#1(#3)#2]{#4}%
1025
- \fi
1026
- }%
1027
- \newcommand\harvardleft{\NAT@open}
1028
- \newcommand\harvardright{\NAT@close}
1029
- \newcommand\harvardyearleft{\NAT@open}
1030
- \newcommand\harvardyearright{\NAT@close}
1031
- \AtBeginDocument{\providecommand{\harvardand}{and}}
1032
- \newcommand\harvardurl[1]{\textbf{URL:} \textit{#1}}
1033
- \providecommand\bibsection{}
1034
- \@ifundefined{chapter}{%
1035
- \renewcommand\bibsection{%
1036
- \section*{\refname\@mkboth{\MakeUppercase{\refname}}{\MakeUppercase{\refname}}}%
1037
- }%
1038
- }{%
1039
- \@ifxundefined\NAT@sectionbib{%
1040
- \renewcommand\bibsection{%
1041
- \chapter*{\bibname\@mkboth{\MakeUppercase{\bibname}}{\MakeUppercase{\bibname}}}%
1042
- }%
1043
- }{%
1044
- \renewcommand\bibsection{%
1045
- \section*{\bibname\ifx\@mkboth\@gobbletwo\else\markright{\MakeUppercase{\bibname}}\fi}%
1046
- }%
1047
- }%
1048
- }%
1049
- \@ifclassloaded{amsart}{\renewcommand\bibsection{\section*{\refname}}}{}%
1050
- \@ifclassloaded{amsbook}{\renewcommand\bibsection{\chapter*{\bibname}}}{}%
1051
- \@ifxundefined\bib@heading{}{\let\bibsection\bib@heading}%
1052
- \newcounter{NAT@ctr}
1053
- \renewenvironment{thebibliography}[1]{%
1054
- \bibsection
1055
- \parindent\z@
1056
- \bibpreamble
1057
- \bibfont
1058
- \list{\@biblabel{\the\c@NAT@ctr}}{\@bibsetup{#1}\global\c@NAT@ctr\z@}%
1059
- \ifNAT@openbib
1060
- \renewcommand\newblock{\par}%
1061
- \else
1062
- \renewcommand\newblock{\hskip .11em \@plus.33em \@minus.07em}%
1063
- \fi
1064
- \sloppy\clubpenalty4000\widowpenalty4000
1065
- \sfcode`\.\@m
1066
- \let\NAT@bibitem@first@sw\@firstoftwo
1067
- \let\citeN\cite \let\shortcite\cite
1068
- \let\citeasnoun\cite
1069
- }{%
1070
- \bibitem@fin
1071
- \bibpostamble
1072
- \def\@noitemerr{%
1073
- \PackageWarning{natbib}{Empty `thebibliography' environment}%
1074
- }%
1075
- \endlist
1076
- \bibcleanup
1077
- }%
1078
- \let\bibfont\@empty
1079
- \let\bibpreamble\@empty
1080
- \let\bibpostamble\@empty
1081
- \def\bibcleanup{\vskip-\lastskip}%
1082
- \providecommand\reset@font{\relax}
1083
- \providecommand\bibname{Bibliography}
1084
- \providecommand\refname{References}
1085
- \newcommand\NAT@citeundefined{\gdef \NAT@undefined {%
1086
- \PackageWarningNoLine{natbib}{There were undefined citations}}}
1087
- \let \NAT@undefined \relax
1088
- \newcommand\NAT@citemultiple{\gdef \NAT@multiple {%
1089
- \PackageWarningNoLine{natbib}{There were multiply defined citations}}}
1090
- \let \NAT@multiple \relax
1091
- \AtEndDocument{\NAT@undefined\NAT@multiple}
1092
- \providecommand\@mkboth[2]{}
1093
- \providecommand\MakeUppercase{\uppercase}
1094
- \providecommand{\@extra@b@citeb}{}
1095
- \gdef\@extra@binfo{}
1096
- \def\NAT@anchor#1#2{%
1097
- \hyper@natanchorstart{#1\@extra@b@citeb}%
1098
- \def\@tempa{#2}\@ifx{\@tempa\@empty}{}{\@biblabel{#2}}%
1099
- \hyper@natanchorend
1100
- }%
1101
- \providecommand\hyper@natanchorstart[1]{}%
1102
- \providecommand\hyper@natanchorend{}%
1103
- \providecommand\hyper@natlinkstart[1]{}%
1104
- \providecommand\hyper@natlinkend{}%
1105
- \providecommand\hyper@natlinkbreak[2]{#1}%
1106
- \AtBeginDocument{%
1107
- \@ifpackageloaded{babel}{%
1108
- \let\org@@citex\@citex}{}}
1109
- \providecommand\@safe@activestrue{}%
1110
- \providecommand\@safe@activesfalse{}%
1111
-
1112
- \newcommand\NAT@sort@cites[1]{%
1113
- \let\NAT@cite@list\@empty
1114
- \@for\@citeb:=#1\do{\expandafter\NAT@star@cite\@citeb\@@}%
1115
- \if@filesw
1116
- \expandafter\immediate\expandafter\write\expandafter\@auxout
1117
- \expandafter{\expandafter\string\expandafter\citation\expandafter{\NAT@cite@list}}%
1118
- \fi
1119
- \@ifnum{\NAT@sort>\z@}{%
1120
- \expandafter\NAT@sort@cites@\expandafter{\NAT@cite@list}%
1121
- }{}%
1122
- }%
1123
- \def\NAT@star@cite{%
1124
- \let\NAT@star@sw\@secondoftwo
1125
- \@ifnum{\NAT@merge>\z@}{%
1126
- \@ifnextchar*{%
1127
- \let\NAT@star@sw\@firstoftwo
1128
- \NAT@star@cite@star
1129
- }{%
1130
- \NAT@star@cite@nostar
1131
- }%
1132
- }{%
1133
- \NAT@star@cite@noextension
1134
- }%
1135
- }%
1136
- \def\NAT@star@cite@star*{%
1137
- \NAT@star@cite@nostar
1138
- }%
1139
- \def\NAT@star@cite@nostar{%
1140
- \let\nat@keyopt@open\@empty
1141
- \let\nat@keyopt@shut\@empty
1142
- \@ifnextchar[{\NAT@star@cite@pre}{\NAT@star@cite@pre[]}%
1143
- }%
1144
- \def\NAT@star@cite@pre[#1]{%
1145
- \def\nat@keyopt@open{#1}%
1146
- \@ifnextchar[{\NAT@star@cite@post}{\NAT@star@cite@post[]}%
1147
- }%
1148
- \def\NAT@star@cite@post[#1]#2\@@{%
1149
- \def\nat@keyopt@shut{#1}%
1150
- \NAT@star@sw{\expandafter\global\expandafter\let\csname NAT@b*@#2\endcsname\@empty}{}%
1151
- \NAT@cite@list@append{#2}%
1152
- }%
1153
- \def\NAT@star@cite@noextension#1\@@{%
1154
- \let\nat@keyopt@open\@empty
1155
- \let\nat@keyopt@shut\@empty
1156
- \NAT@cite@list@append{#1}%
1157
- }%
1158
- \def\NAT@cite@list@append#1{%
1159
- \edef\@citeb{\@firstofone#1\@empty}%
1160
- \if@filesw\@ifxundefined\@cprwrite{}{\expandafter\@cprwrite\@citeb=}\fi
1161
- \if\relax\nat@keyopt@open\relax\else
1162
- \global\expandafter\let\csname NAT@b@open@\@citeb\endcsname\nat@keyopt@open
1163
- \fi
1164
- \if\relax\nat@keyopt@shut\relax\else
1165
- \global\expandafter\let\csname NAT@b@shut@\@citeb\endcsname\nat@keyopt@shut
1166
- \fi
1167
- \toks@\expandafter{\NAT@cite@list}%
1168
- \ifx\NAT@cite@list\@empty
1169
- \@temptokena\expandafter{\@citeb}%
1170
- \else
1171
- \@temptokena\expandafter{\expandafter,\@citeb}%
1172
- \fi
1173
- \edef\NAT@cite@list{\the\toks@\the\@temptokena}%
1174
- }%
1175
- \newcommand\NAT@sort@cites@[1]{%
1176
- \count@\z@
1177
- \@tempcntb\m@ne
1178
- \let\@celt\delimiter
1179
- \def\NAT@num@list{}%
1180
- \let\NAT@cite@list\@empty
1181
- \let\NAT@nonsort@list\@empty
1182
- \@for \@citeb:=#1\do{\NAT@make@cite@list}%
1183
- \ifx\NAT@nonsort@list\@empty\else
1184
- \protected@edef\NAT@cite@list{\NAT@cite@list\NAT@nonsort@list}%
1185
- \fi
1186
- \ifx\NAT@cite@list\@empty\else
1187
- \protected@edef\NAT@cite@list{\expandafter\NAT@xcom\NAT@cite@list @@}%
1188
- \fi
1189
- }%
1190
- \def\NAT@make@cite@list{%
1191
- \advance\count@\@ne
1192
- \@safe@activestrue
1193
- \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
1194
- \@safe@activesfalse
1195
- \@ifundefined{b@\@citeb\@extra@b@citeb}%
1196
- {\def\NAT@num{A}}%
1197
- {\NAT@parse{\@citeb}}%
1198
- \NAT@ifcat@num\NAT@num
1199
- {\@tempcnta\NAT@num \relax
1200
- \@ifnum{\@tempcnta<\@tempcntb}{%
1201
- \let\NAT@@cite@list=\NAT@cite@list
1202
- \let\NAT@cite@list\@empty
1203
- \begingroup\let\@celt=\NAT@celt\NAT@num@list\endgroup
1204
- \protected@edef\NAT@num@list{%
1205
- \expandafter\NAT@num@celt \NAT@num@list \@gobble @%
1206
- }%
1207
- }{%
1208
- \protected@edef\NAT@num@list{\NAT@num@list \@celt{\NAT@num}}%
1209
- \protected@edef\NAT@cite@list{\NAT@cite@list\@citeb,}%
1210
- \@tempcntb\@tempcnta
1211
- }%
1212
- }%
1213
- {\protected@edef\NAT@nonsort@list{\NAT@nonsort@list\@citeb,}}%
1214
- }%
1215
- \def\NAT@celt#1{%
1216
- \@ifnum{#1>\@tempcnta}{%
1217
- \xdef\NAT@cite@list{\NAT@cite@list\@citeb,\NAT@@cite@list}%
1218
- \let\@celt\@gobble
1219
- }{%
1220
- \expandafter\def@NAT@cite@lists\NAT@@cite@list\@@
1221
- }%
1222
- }%
1223
- \def\NAT@num@celt#1#2{%
1224
- \ifx#1\@celt
1225
- \@ifnum{#2>\@tempcnta}{%
1226
- \@celt{\number\@tempcnta}%
1227
- \@celt{#2}%
1228
- }{%
1229
- \@celt{#2}%
1230
- \expandafter\NAT@num@celt
1231
- }%
1232
- \fi
1233
- }%
1234
- \def\def@NAT@cite@lists#1,#2\@@{%
1235
- \xdef\NAT@cite@list{\NAT@cite@list#1,}%
1236
- \xdef\NAT@@cite@list{#2}%
1237
- }%
1238
- \def\NAT@nextc#1,#2@@{#1,}
1239
- \def\NAT@restc#1,#2{#2}
1240
- \def\NAT@xcom#1,@@{#1}
1241
- \InputIfFileExists{natbib.cfg}
1242
- {\typeout{Local config file natbib.cfg used}}{}
1243
- %%
1244
- %% <<<<< End of generated file <<<<<<
1245
- %%
1246
- %% End of file `natbib.sty'.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
latex_templates/Default/template.tex DELETED
@@ -1,45 +0,0 @@
1
- \documentclass{article} % For LaTeX2e
2
- \UseRawInputEncoding
3
- \usepackage{graphicx}
4
- \usepackage{booktabs}
5
- \usepackage{times}
6
- \usepackage{eso-pic} % used by \AddToShipoutPicture
7
- \RequirePackage{fancyhdr}
8
- \RequirePackage{natbib}
9
- \usepackage{fullpage}
10
-
11
- \input{math_commands.tex}
12
- \usepackage{hyperref}
13
- \usepackage{url}
14
- \usepackage{algorithm}
15
- \usepackage{algpseudocode}
16
-
17
- \newlength\tindent
18
- \setlength{\tindent}{\parindent}
19
- \setlength{\parindent}{0pt}
20
- \renewcommand{\indent}{\hspace*{\tindent}}
21
-
22
- \title{TITLE}
23
- \author{GPT-4}
24
-
25
- \newcommand{\fix}{\marginpar{FIX}}
26
- \newcommand{\new}{\marginpar{NEW}}
27
-
28
- \begin{document}
29
- \maketitle
30
- \input{abstract.tex}
31
- \input{introduction.tex}
32
- \input{related works.tex}
33
- \input{backgrounds.tex}
34
- \input{methodology.tex}
35
- \input{experiments.tex}
36
- \input{conclusion.tex}
37
-
38
- \bibliography{ref}
39
- \bibliographystyle{iclr2022_conference}
40
-
41
- %\appendix
42
- %\section{Appendix}
43
- %You may include other additional sections here.
44
-
45
- \end{document}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
latex_templates/ICLR2022/fig.png DELETED
Binary file (13 kB)
 
latex_templates/ICLR2022/template.tex DELETED
@@ -1,35 +0,0 @@
1
- \documentclass{article} % For LaTeX2e
2
- \UseRawInputEncoding
3
- \usepackage{graphicx}
4
- \usepackage{booktabs}
5
- \usepackage{iclr2022_conference, times}
6
- \input{math_commands.tex}
7
- \usepackage{hyperref}
8
- \usepackage{url}
9
- \usepackage{algorithm}
10
- \usepackage{algpseudocode}
11
-
12
- \title{TITLE}
13
- \author{GPT-4}
14
-
15
- \newcommand{\fix}{\marginpar{FIX}}
16
- \newcommand{\new}{\marginpar{NEW}}
17
-
18
- \begin{document}
19
- \maketitle
20
- \input{abstract.tex}
21
- \input{introduction.tex}
22
- \input{related works.tex}
23
- \input{backgrounds.tex}
24
- \input{methodology.tex}
25
- \input{experiments.tex}
26
- \input{conclusion.tex}
27
-
28
- \bibliography{ref}
29
- \bibliographystyle{iclr2022_conference}
30
-
31
- %\appendix
32
- %\section{Appendix}
33
- %You may include other additional sections here.
34
-
35
- \end{document}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
utils/gpt_interaction.py CHANGED
@@ -1,70 +1,18 @@
1
- import openai
2
- import re
3
  import os
4
- import json
5
- import logging
6
- log = logging.getLogger(__name__)
7
-
8
- # todo: 将api_key通过函数传入; 需要改很多地方
9
- # openai.api_key = os.environ['OPENAI_API_KEY']
10
-
11
- def extract_responses(assistant_message):
12
- # pattern = re.compile(r"f\.write\(r'{1,3}(.*?)'{0,3}\){0,1}$", re.DOTALL)
13
- pattern = re.compile(r"f\.write\(r['\"]{1,3}(.*?)['\"]{0,3}\){0,1}$", re.DOTALL)
14
- match = re.search(pattern, assistant_message)
15
- if match:
16
- return match.group(1)
17
- else:
18
- log.info("Responses are not put in Python codes. Directly return assistant_message.\n")
19
- log.info(f"assistant_message: {assistant_message}")
20
- return assistant_message
21
-
22
- def extract_keywords(assistant_message, default_keywords=None):
23
- if default_keywords is None:
24
- default_keywords = {"machine learning":5}
25
-
26
- try:
27
- keywords = json.loads(assistant_message)
28
- except ValueError:
29
- log.info("Responses are not in json format. Return the default dictionary.\n ")
30
- log.info(f"assistant_message: {assistant_message}")
31
- return default_keywords
32
- return keywords
33
-
34
- def extract_section_name(assistant_message, default_section_name=""):
35
- try:
36
- keywords = json.loads(assistant_message)
37
- except ValueError:
38
- log.info("Responses are not in json format. Return None.\n ")
39
- log.info(f"assistant_message: {assistant_message}")
40
- return default_section_name
41
- return keywords
42
-
43
-
44
- def extract_json(assistant_message, default_output=None):
45
- if default_output is None:
46
- default_keys = ["Method 1", "Method 2"]
47
- else:
48
- default_keys = default_output
49
- try:
50
- dict = json.loads(assistant_message)
51
- except:
52
- log.info("Responses are not in json format. Return the default keys.\n ")
53
- log.info(f"assistant_message: {assistant_message}")
54
- return default_keys
55
- return dict.keys()
56
 
 
 
 
 
57
 
58
- def get_responses(user_message, model="gpt-4", temperature=0.4, openai_key = None):
59
- if openai.api_key is None and openai_key is None:
60
- raise ValueError("OpenAI API key must be provided.")
61
- if openai_key is not None:
62
- openai.api_key = openai_key
63
 
 
64
  conversation_history = [
65
- {"role": "system", "content": "You are an assistant in writing machine learning papers."}
 
66
  ]
67
- conversation_history.append({"role": "user", "content": user_message})
68
  response = openai.ChatCompletion.create(
69
  model=model,
70
  messages=conversation_history,
@@ -77,17 +25,98 @@ def get_responses(user_message, model="gpt-4", temperature=0.4, openai_key = Non
77
  return assistant_message, usage
78
 
79
 
80
- if __name__ == "__main__":
81
- test_strings = [r"f.write(r'hello world')", r"f.write(r'''hello world''')", r"f.write(r'''hello world",
82
- r"f.write(r'''hello world'", r'f.write(r"hello world")', r'f.write(r"""hello world""")',
83
- r'f.write(r"""hello world"', r'f.write(r"""hello world']
84
- for input_string in test_strings:
85
- print("input_string: ", input_string)
86
- pattern = re.compile(r"f\.write\(r['\"]{1,3}(.*?)['\"]{0,3}\){0,1}$", re.DOTALL)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
87
 
88
- match = re.search(pattern, input_string)
89
- if match:
90
- extracted_string = match.group(1)
91
- print("Extracted string:", extracted_string)
92
- else:
93
- print("No match found")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import os
2
+ import time
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
 
4
+ import openai
5
+ import logging
6
+ import requests
7
+ import json
8
 
9
+ log = logging.getLogger(__name__)
 
 
 
 
10
 
11
+ def get_gpt_responses(systems, prompts, model="gpt-4", temperature=0.4):
12
  conversation_history = [
13
+ {"role": "system", "content": systems},
14
+ {"role": "user", "content": prompts}
15
  ]
 
16
  response = openai.ChatCompletion.create(
17
  model=model,
18
  messages=conversation_history,
 
25
  return assistant_message, usage
26
 
27
 
28
+ class GPTModel_API2D_SUPPORT:
29
+ def __init__(self, model="gpt-4", temperature=0, presence_penalty=0,
30
+ frequency_penalty=0, url=None, key=None, max_attempts=1, delay=20):
31
+ if url is None:
32
+ url = "https://api.openai.com/v1/chat/completions"
33
+ if key is None:
34
+ key = os.getenv("OPENAI_API_KEY")
35
+
36
+ self.model = model
37
+ self.temperature = temperature
38
+ self.url = url
39
+ self.key = key
40
+ self.presence_penalty = presence_penalty
41
+ self.frequency_penalty = frequency_penalty
42
+ self.max_attempts = max_attempts
43
+ self.delay = delay
44
+
45
+ def __call__(self, systems, prompts, return_json=False):
46
+ headers = {
47
+ "Content-Type": "application/json",
48
+ "Authorization": f"Bearer {self.key}",
49
+ }
50
+
51
+ data = {
52
+ "model": f"{self.model}",
53
+ "messages": [
54
+ {"role": "system", "content": systems},
55
+ {"role": "user", "content": prompts}],
56
+ "temperature": self.temperature,
57
+ "n": 1,
58
+ "stream": False,
59
+ "presence_penalty": self.presence_penalty,
60
+ "frequency_penalty": self.frequency_penalty
61
+ }
62
+ for _ in range(self.max_attempts):
63
+ try:
64
+ # todo: in some cases, UnicodeEncodeError is raised:
65
+ # 'gbk' codec can't encode character '\xdf' in position 1898: illegal multibyte sequence
66
+ response = requests.post(self.url, headers=headers, data=json.dumps(data))
67
+ response = response.json()
68
+ assistant_message = response['choices'][0]["message"]["content"]
69
+ usage = response['usage']
70
+ log.info(assistant_message)
71
+ if return_json:
72
+ assistant_message = json.loads(assistant_message)
73
+ return assistant_message, usage
74
+ except Exception as e:
75
+ print(f"Failed to get response. Error: {e}")
76
+ time.sleep(self.delay)
77
+ raise RuntimeError("Failed to get response from OpenAI.")
78
 
79
+
80
+ class GPTModel:
81
+ def __init__(self, model="gpt-4", temperature=0.9, presence_penalty=0,
82
+ frequency_penalty=0, max_attempts=1, delay=20):
83
+ self.model = model
84
+ self.temperature = temperature
85
+ self.presence_penalty = presence_penalty
86
+ self.frequency_penalty = frequency_penalty
87
+ self.max_attempts = max_attempts
88
+ self.delay = delay
89
+
90
+ def __call__(self, systems, prompts, return_json=False):
91
+ conversation_history = [
92
+ {"role": "system", "content": systems},
93
+ {"role": "user", "content": prompts}
94
+ ]
95
+ for _ in range(self.max_attempts):
96
+ try:
97
+ response = openai.ChatCompletion.create(
98
+ model=self.model,
99
+ messages=conversation_history,
100
+ n=1,
101
+ temperature=self.temperature,
102
+ presence_penalty=self.presence_penalty,
103
+ frequency_penalty=self.frequency_penalty,
104
+ stream=False
105
+ )
106
+ assistant_message = response['choices'][0]["message"]["content"]
107
+ usage = response['usage']
108
+ log.info(assistant_message)
109
+ if return_json:
110
+ assistant_message = json.loads(assistant_message)
111
+ return assistant_message, usage
112
+ except Exception as e:
113
+ print(f"Failed to get response. Error: {e}")
114
+ time.sleep(self.delay)
115
+ raise RuntimeError("Failed to get response from OpenAI.")
116
+
117
+
118
+
119
+ if __name__ == "__main__":
120
+ bot = GPTModel()
121
+ r = bot("You are an assistant.", "Hello.")
122
+ print(r)