You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2432 lines
61 KiB

  1. %%
  2. %% IEEEtran.bst
  3. %% BibTeX Bibliography Style file for IEEE Journals and Conferences (unsorted)
  4. %% Version 1.13 (2008/09/30)
  5. %%
  6. %% Copyright (c) 2003-2008 Michael Shell
  7. %%
  8. %% Original starting code base and algorithms obtained from the output of
  9. %% Patrick W. Daly's makebst package as well as from prior versions of
  10. %% IEEE BibTeX styles:
  11. %%
  12. %% 1. Howard Trickey and Oren Patashnik's ieeetr.bst (1985/1988)
  13. %% 2. Silvano Balemi and Richard H. Roy's IEEEbib.bst (1993)
  14. %%
  15. %% Support sites:
  16. %% http://www.michaelshell.org/tex/ieeetran/
  17. %% http://www.ctan.org/tex-archive/macros/latex/contrib/IEEEtran/
  18. %% and/or
  19. %% http://www.ieee.org/
  20. %%
  21. %% For use with BibTeX version 0.99a or later
  22. %%
  23. %% This is a numerical citation style.
  24. %%
  25. %%*************************************************************************
  26. %% Legal Notice:
  27. %% This code is offered as-is without any warranty either expressed or
  28. %% implied; without even the implied warranty of MERCHANTABILITY or
  29. %% FITNESS FOR A PARTICULAR PURPOSE!
  30. %% User assumes all risk.
  31. %% In no event shall IEEE or any contributor to this code be liable for
  32. %% any damages or losses, including, but not limited to, incidental,
  33. %% consequential, or any other damages, resulting from the use or misuse
  34. %% of any information contained here.
  35. %%
  36. %% All comments are the opinions of their respective authors and are not
  37. %% necessarily endorsed by the IEEE.
  38. %%
  39. %% This work is distributed under the LaTeX Project Public License (LPPL)
  40. %% ( http://www.latex-project.org/ ) version 1.3, and may be freely used,
  41. %% distributed and modified. A copy of the LPPL, version 1.3, is included
  42. %% in the base LaTeX documentation of all distributions of LaTeX released
  43. %% 2003/12/01 or later.
  44. %% Retain all contribution notices and credits.
  45. %% ** Modified files should be clearly indicated as such, including **
  46. %% ** renaming them and changing author support contact information. **
  47. %%
  48. %% File list of work: IEEEabrv.bib, IEEEfull.bib, IEEEexample.bib,
  49. %% IEEEtran.bst, IEEEtranS.bst, IEEEtranSA.bst,
  50. %% IEEEtranN.bst, IEEEtranSN.bst, IEEEtran_bst_HOWTO.pdf
  51. %%*************************************************************************
  52. %
  53. %
  54. % Changelog:
  55. %
  56. % 1.00 (2002/08/13) Initial release
  57. %
  58. % 1.10 (2002/09/27)
  59. % 1. Corrected minor bug for improperly formed warning message when a
  60. % book was not given a title. Thanks to Ming Kin Lai for reporting this.
  61. % 2. Added support for CTLname_format_string and CTLname_latex_cmd fields
  62. % in the BST control entry type.
  63. %
  64. % 1.11 (2003/04/02)
  65. % 1. Fixed bug with URLs containing underscores when using url.sty. Thanks
  66. % to Ming Kin Lai for reporting this.
  67. %
  68. % 1.12 (2007/01/11)
  69. % 1. Fixed bug with unwanted comma before "et al." when an entry contained
  70. % more than two author names. Thanks to Pallav Gupta for reporting this.
  71. % 2. Fixed bug with anomalous closing quote in tech reports that have a
  72. % type, but without a number or address. Thanks to Mehrdad Mirreza for
  73. % reporting this.
  74. % 3. Use braces in \providecommand in begin.bib to better support
  75. % latex2html. TeX style length assignments OK with recent versions
  76. % of latex2html - 1.71 (2002/2/1) or later is strongly recommended.
  77. % Use of the language field still causes trouble with latex2html.
  78. % Thanks to Federico Beffa for reporting this.
  79. % 4. Added IEEEtran.bst ID and version comment string to .bbl output.
  80. % 5. Provide a \BIBdecl hook that allows the user to execute commands
  81. % just prior to the first entry.
  82. % 6. Use default urlstyle (is using url.sty) of "same" rather than rm to
  83. % better work with a wider variety of bibliography styles.
  84. % 7. Changed month abbreviations from Sept., July and June to Sep., Jul.,
  85. % and Jun., respectively, as IEEE now does. Thanks to Moritz Borgmann
  86. % for reporting this.
  87. % 8. Control entry types should not be considered when calculating longest
  88. % label width.
  89. % 9. Added alias www for electronic/online.
  90. % 10. Added CTLname_url_prefix control entry type.
  91. %
  92. % 1.13 (2008/09/30)
  93. % 1. Fixed bug with edition number to ordinal conversion. Thanks to
  94. % Michael Roland for reporting this and correcting the algorithm.
  95. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  96. %% DEFAULTS FOR THE CONTROLS OF THE BST STYLE %%
  97. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  98. % These are the defaults for the user adjustable controls. The values used
  99. % here can be overridden by the user via IEEEtranBSTCTL entry type.
  100. % NOTE: The recommended LaTeX command to invoke a control entry type is:
  101. %
  102. %\makeatletter
  103. %\def\bstctlcite{\@ifnextchar[{\@bstctlcite}{\@bstctlcite[@auxout]}}
  104. %\def\@bstctlcite[#1]#2{\@bsphack
  105. % \@for\@citeb:=#2\do{%
  106. % \edef\@citeb{\expandafter\@firstofone\@citeb}%
  107. % \if@filesw\immediate\write\csname #1\endcsname{\string\citation{\@citeb}}\fi}%
  108. % \@esphack}
  109. %\makeatother
  110. %
  111. % It is called at the start of the document, before the first \cite, like:
  112. % \bstctlcite{IEEEexample:BSTcontrol}
  113. %
  114. % IEEEtran.cls V1.6 and later does provide this command.
  115. % #0 turns off the display of the number for articles.
  116. % #1 enables
  117. FUNCTION {default.is.use.number.for.article} { #1 }
  118. % #0 turns off the display of the paper and type fields in @inproceedings.
  119. % #1 enables
  120. FUNCTION {default.is.use.paper} { #1 }
  121. % #0 turns off the forced use of "et al."
  122. % #1 enables
  123. FUNCTION {default.is.forced.et.al} { #1 }
  124. % The maximum number of names that can be present beyond which an "et al."
  125. % usage is forced. Be sure that num.names.shown.with.forced.et.al (below)
  126. % is not greater than this value!
  127. % Note: There are many instances of references in IEEE journals which have
  128. % a very large number of authors as well as instances in which "et al." is
  129. % used profusely.
  130. FUNCTION {default.max.num.names.before.forced.et.al} { #5 }
  131. % The number of names that will be shown with a forced "et al.".
  132. % Must be less than or equal to max.num.names.before.forced.et.al
  133. FUNCTION {default.num.names.shown.with.forced.et.al} { #1 }
  134. % #0 turns off the alternate interword spacing for entries with URLs.
  135. % #1 enables
  136. FUNCTION {default.is.use.alt.interword.spacing} { #1 }
  137. % If alternate interword spacing for entries with URLs is enabled, this is
  138. % the interword spacing stretch factor that will be used. For example, the
  139. % default "4" here means that the interword spacing in entries with URLs can
  140. % stretch to four times normal. Does not have to be an integer. Note that
  141. % the value specified here can be overridden by the user in their LaTeX
  142. % code via a command such as:
  143. % "\providecommand\BIBentryALTinterwordstretchfactor{1.5}" in addition to
  144. % that via the IEEEtranBSTCTL entry type.
  145. FUNCTION {default.ALTinterwordstretchfactor} { "4" }
  146. % #0 turns off the "dashification" of repeated (i.e., identical to those
  147. % of the previous entry) names. IEEE normally does this.
  148. % #1 enables
  149. FUNCTION {default.is.dash.repeated.names} { #1 }
  150. % The default name format control string.
  151. FUNCTION {default.name.format.string}{ "{f.~}{vv~}{ll}{, jj}" }
  152. % The default LaTeX font command for the names.
  153. FUNCTION {default.name.latex.cmd}{ "" }
  154. % The default URL prefix.
  155. FUNCTION {default.name.url.prefix}{ "[Online]. Available:" }
  156. % Other controls that cannot be accessed via IEEEtranBSTCTL entry type.
  157. % #0 turns off the terminal startup banner/completed message so as to
  158. % operate more quietly.
  159. % #1 enables
  160. FUNCTION {is.print.banners.to.terminal} { #1 }
  161. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  162. %% FILE VERSION AND BANNER %%
  163. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  164. FUNCTION{bst.file.version} { "1.13" }
  165. FUNCTION{bst.file.date} { "2008/09/30" }
  166. FUNCTION{bst.file.website} { "http://www.michaelshell.org/tex/ieeetran/bibtex/" }
  167. FUNCTION {banner.message}
  168. { is.print.banners.to.terminal
  169. { "-- IEEEtran.bst version" " " * bst.file.version *
  170. " (" * bst.file.date * ") " * "by Michael Shell." *
  171. top$
  172. "-- " bst.file.website *
  173. top$
  174. "-- See the " quote$ * "IEEEtran_bst_HOWTO.pdf" * quote$ * " manual for usage information." *
  175. top$
  176. }
  177. { skip$ }
  178. if$
  179. }
  180. FUNCTION {completed.message}
  181. { is.print.banners.to.terminal
  182. { ""
  183. top$
  184. "Done."
  185. top$
  186. }
  187. { skip$ }
  188. if$
  189. }
  190. %%%%%%%%%%%%%%%%%%%%%%
  191. %% STRING CONSTANTS %%
  192. %%%%%%%%%%%%%%%%%%%%%%
  193. FUNCTION {bbl.and}{ "and" }
  194. FUNCTION {bbl.etal}{ "et~al." }
  195. FUNCTION {bbl.editors}{ "eds." }
  196. FUNCTION {bbl.editor}{ "ed." }
  197. FUNCTION {bbl.edition}{ "ed." }
  198. FUNCTION {bbl.volume}{ "vol." }
  199. FUNCTION {bbl.of}{ "of" }
  200. FUNCTION {bbl.number}{ "no." }
  201. FUNCTION {bbl.in}{ "in" }
  202. FUNCTION {bbl.pages}{ "pp." }
  203. FUNCTION {bbl.page}{ "p." }
  204. FUNCTION {bbl.chapter}{ "ch." }
  205. FUNCTION {bbl.paper}{ "paper" }
  206. FUNCTION {bbl.part}{ "pt." }
  207. FUNCTION {bbl.patent}{ "Patent" }
  208. FUNCTION {bbl.patentUS}{ "U.S." }
  209. FUNCTION {bbl.revision}{ "Rev." }
  210. FUNCTION {bbl.series}{ "ser." }
  211. FUNCTION {bbl.standard}{ "Std." }
  212. FUNCTION {bbl.techrep}{ "Tech. Rep." }
  213. FUNCTION {bbl.mthesis}{ "Master's thesis" }
  214. FUNCTION {bbl.phdthesis}{ "Ph.D. dissertation" }
  215. FUNCTION {bbl.st}{ "st" }
  216. FUNCTION {bbl.nd}{ "nd" }
  217. FUNCTION {bbl.rd}{ "rd" }
  218. FUNCTION {bbl.th}{ "th" }
  219. % This is the LaTeX spacer that is used when a larger than normal space
  220. % is called for (such as just before the address:publisher).
  221. FUNCTION {large.space} { "\hskip 1em plus 0.5em minus 0.4em\relax " }
  222. % The LaTeX code for dashes that are used to represent repeated names.
  223. % Note: Some older IEEE journals used something like
  224. % "\rule{0.275in}{0.5pt}\," which is fairly thick and runs right along
  225. % the baseline. However, IEEE now uses a thinner, above baseline,
  226. % six dash long sequence.
  227. FUNCTION {repeated.name.dashes} { "------" }
  228. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  229. %% PREDEFINED STRING MACROS %%
  230. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  231. MACRO {jan} {"Jan."}
  232. MACRO {feb} {"Feb."}
  233. MACRO {mar} {"Mar."}
  234. MACRO {apr} {"Apr."}
  235. MACRO {may} {"May"}
  236. MACRO {jun} {"Jun."}
  237. MACRO {jul} {"Jul."}
  238. MACRO {aug} {"Aug."}
  239. MACRO {sep} {"Sep."}
  240. MACRO {oct} {"Oct."}
  241. MACRO {nov} {"Nov."}
  242. MACRO {dec} {"Dec."}
  243. %%%%%%%%%%%%%%%%%%
  244. %% ENTRY FIELDS %%
  245. %%%%%%%%%%%%%%%%%%
  246. ENTRY
  247. { address
  248. assignee
  249. author
  250. booktitle
  251. chapter
  252. day
  253. dayfiled
  254. edition
  255. editor
  256. howpublished
  257. institution
  258. intype
  259. journal
  260. key
  261. language
  262. month
  263. monthfiled
  264. nationality
  265. note
  266. number
  267. organization
  268. pages
  269. paper
  270. publisher
  271. school
  272. series
  273. revision
  274. title
  275. type
  276. url
  277. volume
  278. year
  279. yearfiled
  280. CTLuse_article_number
  281. CTLuse_paper
  282. CTLuse_forced_etal
  283. CTLmax_names_forced_etal
  284. CTLnames_show_etal
  285. CTLuse_alt_spacing
  286. CTLalt_stretch_factor
  287. CTLdash_repeated_names
  288. CTLname_format_string
  289. CTLname_latex_cmd
  290. CTLname_url_prefix
  291. }
  292. {}
  293. { label }
  294. %%%%%%%%%%%%%%%%%%%%%%%
  295. %% INTEGER VARIABLES %%
  296. %%%%%%%%%%%%%%%%%%%%%%%
  297. INTEGERS { prev.status.punct this.status.punct punct.std
  298. punct.no punct.comma punct.period
  299. prev.status.space this.status.space space.std
  300. space.no space.normal space.large
  301. prev.status.quote this.status.quote quote.std
  302. quote.no quote.close
  303. prev.status.nline this.status.nline nline.std
  304. nline.no nline.newblock
  305. status.cap cap.std
  306. cap.no cap.yes}
  307. INTEGERS { longest.label.width multiresult nameptr namesleft number.label numnames }
  308. INTEGERS { is.use.number.for.article
  309. is.use.paper
  310. is.forced.et.al
  311. max.num.names.before.forced.et.al
  312. num.names.shown.with.forced.et.al
  313. is.use.alt.interword.spacing
  314. is.dash.repeated.names}
  315. %%%%%%%%%%%%%%%%%%%%%%
  316. %% STRING VARIABLES %%
  317. %%%%%%%%%%%%%%%%%%%%%%
  318. STRINGS { bibinfo
  319. longest.label
  320. oldname
  321. s
  322. t
  323. ALTinterwordstretchfactor
  324. name.format.string
  325. name.latex.cmd
  326. name.url.prefix}
  327. %%%%%%%%%%%%%%%%%%%%%%%%%
  328. %% LOW LEVEL FUNCTIONS %%
  329. %%%%%%%%%%%%%%%%%%%%%%%%%
  330. FUNCTION {initialize.controls}
  331. { default.is.use.number.for.article 'is.use.number.for.article :=
  332. default.is.use.paper 'is.use.paper :=
  333. default.is.forced.et.al 'is.forced.et.al :=
  334. default.max.num.names.before.forced.et.al 'max.num.names.before.forced.et.al :=
  335. default.num.names.shown.with.forced.et.al 'num.names.shown.with.forced.et.al :=
  336. default.is.use.alt.interword.spacing 'is.use.alt.interword.spacing :=
  337. default.is.dash.repeated.names 'is.dash.repeated.names :=
  338. default.ALTinterwordstretchfactor 'ALTinterwordstretchfactor :=
  339. default.name.format.string 'name.format.string :=
  340. default.name.latex.cmd 'name.latex.cmd :=
  341. default.name.url.prefix 'name.url.prefix :=
  342. }
  343. % This IEEEtran.bst features a very powerful and flexible mechanism for
  344. % controlling the capitalization, punctuation, spacing, quotation, and
  345. % newlines of the formatted entry fields. (Note: IEEEtran.bst does not need
  346. % or use the newline/newblock feature, but it has been implemented for
  347. % possible future use.) The output states of IEEEtran.bst consist of
  348. % multiple independent attributes and, as such, can be thought of as being
  349. % vectors, rather than the simple scalar values ("before.all",
  350. % "mid.sentence", etc.) used in most other .bst files.
  351. %
  352. % The more flexible and complex design used here was motivated in part by
  353. % IEEE's rather unusual bibliography style. For example, IEEE ends the
  354. % previous field item with a period and large space prior to the publisher
  355. % address; the @electronic entry types use periods as inter-item punctuation
  356. % rather than the commas used by the other entry types; and URLs are never
  357. % followed by periods even though they are the last item in the entry.
  358. % Although it is possible to accommodate these features with the conventional
  359. % output state system, the seemingly endless exceptions make for convoluted,
  360. % unreliable and difficult to maintain code.
  361. %
  362. % IEEEtran.bst's output state system can be easily understood via a simple
  363. % illustration of two most recently formatted entry fields (on the stack):
  364. %
  365. % CURRENT_ITEM
  366. % "PREVIOUS_ITEM
  367. %
  368. % which, in this example, is to eventually appear in the bibliography as:
  369. %
  370. % "PREVIOUS_ITEM," CURRENT_ITEM
  371. %
  372. % It is the job of the output routine to take the previous item off of the
  373. % stack (while leaving the current item at the top of the stack), apply its
  374. % trailing punctuation (including closing quote marks) and spacing, and then
  375. % to write the result to BibTeX's output buffer:
  376. %
  377. % "PREVIOUS_ITEM,"
  378. %
  379. % Punctuation (and spacing) between items is often determined by both of the
  380. % items rather than just the first one. The presence of quotation marks
  381. % further complicates the situation because, in standard English, trailing
  382. % punctuation marks are supposed to be contained within the quotes.
  383. %
  384. % IEEEtran.bst maintains two output state (aka "status") vectors which
  385. % correspond to the previous and current (aka "this") items. Each vector
  386. % consists of several independent attributes which track punctuation,
  387. % spacing, quotation, and newlines. Capitalization status is handled by a
  388. % separate scalar because the format routines, not the output routine,
  389. % handle capitalization and, therefore, there is no need to maintain the
  390. % capitalization attribute for both the "previous" and "this" items.
  391. %
  392. % When a format routine adds a new item, it copies the current output status
  393. % vector to the previous output status vector and (usually) resets the
  394. % current (this) output status vector to a "standard status" vector. Using a
  395. % "standard status" vector in this way allows us to redefine what we mean by
  396. % "standard status" at the start of each entry handler and reuse the same
  397. % format routines under the various inter-item separation schemes. For
  398. % example, the standard status vector for the @book entry type may use
  399. % commas for item separators, while the @electronic type may use periods,
  400. % yet both entry handlers exploit many of the exact same format routines.
  401. %
  402. % Because format routines have write access to the output status vector of
  403. % the previous item, they can override the punctuation choices of the
  404. % previous format routine! Therefore, it becomes trivial to implement rules
  405. % such as "Always use a period and a large space before the publisher." By
  406. % pushing the generation of the closing quote mark to the output routine, we
  407. % avoid all the problems caused by having to close a quote before having all
  408. % the information required to determine what the punctuation should be.
  409. %
  410. % The IEEEtran.bst output state system can easily be expanded if needed.
  411. % For instance, it is easy to add a "space.tie" attribute value if the
  412. % bibliography rules mandate that two items have to be joined with an
  413. % unbreakable space.
  414. FUNCTION {initialize.status.constants}
  415. { #0 'punct.no :=
  416. #1 'punct.comma :=
  417. #2 'punct.period :=
  418. #0 'space.no :=
  419. #1 'space.normal :=
  420. #2 'space.large :=
  421. #0 'quote.no :=
  422. #1 'quote.close :=
  423. #0 'cap.no :=
  424. #1 'cap.yes :=
  425. #0 'nline.no :=
  426. #1 'nline.newblock :=
  427. }
  428. FUNCTION {std.status.using.comma}
  429. { punct.comma 'punct.std :=
  430. space.normal 'space.std :=
  431. quote.no 'quote.std :=
  432. nline.no 'nline.std :=
  433. cap.no 'cap.std :=
  434. }
  435. FUNCTION {std.status.using.period}
  436. { punct.period 'punct.std :=
  437. space.normal 'space.std :=
  438. quote.no 'quote.std :=
  439. nline.no 'nline.std :=
  440. cap.yes 'cap.std :=
  441. }
  442. FUNCTION {initialize.prev.this.status}
  443. { punct.no 'prev.status.punct :=
  444. space.no 'prev.status.space :=
  445. quote.no 'prev.status.quote :=
  446. nline.no 'prev.status.nline :=
  447. punct.no 'this.status.punct :=
  448. space.no 'this.status.space :=
  449. quote.no 'this.status.quote :=
  450. nline.no 'this.status.nline :=
  451. cap.yes 'status.cap :=
  452. }
  453. FUNCTION {this.status.std}
  454. { punct.std 'this.status.punct :=
  455. space.std 'this.status.space :=
  456. quote.std 'this.status.quote :=
  457. nline.std 'this.status.nline :=
  458. }
  459. FUNCTION {cap.status.std}{ cap.std 'status.cap := }
  460. FUNCTION {this.to.prev.status}
  461. { this.status.punct 'prev.status.punct :=
  462. this.status.space 'prev.status.space :=
  463. this.status.quote 'prev.status.quote :=
  464. this.status.nline 'prev.status.nline :=
  465. }
  466. FUNCTION {not}
  467. { { #0 }
  468. { #1 }
  469. if$
  470. }
  471. FUNCTION {and}
  472. { { skip$ }
  473. { pop$ #0 }
  474. if$
  475. }
  476. FUNCTION {or}
  477. { { pop$ #1 }
  478. { skip$ }
  479. if$
  480. }
  481. % convert the strings "yes" or "no" to #1 or #0 respectively
  482. FUNCTION {yes.no.to.int}
  483. { "l" change.case$ duplicate$
  484. "yes" =
  485. { pop$ #1 }
  486. { duplicate$ "no" =
  487. { pop$ #0 }
  488. { "unknown boolean " quote$ * swap$ * quote$ *
  489. " in " * cite$ * warning$
  490. #0
  491. }
  492. if$
  493. }
  494. if$
  495. }
  496. % pushes true if the single char string on the stack is in the
  497. % range of "0" to "9"
  498. FUNCTION {is.num}
  499. { chr.to.int$
  500. duplicate$ "0" chr.to.int$ < not
  501. swap$ "9" chr.to.int$ > not and
  502. }
  503. % multiplies the integer on the stack by a factor of 10
  504. FUNCTION {bump.int.mag}
  505. { #0 'multiresult :=
  506. { duplicate$ #0 > }
  507. { #1 -
  508. multiresult #10 +
  509. 'multiresult :=
  510. }
  511. while$
  512. pop$
  513. multiresult
  514. }
  515. % converts a single character string on the stack to an integer
  516. FUNCTION {char.to.integer}
  517. { duplicate$
  518. is.num
  519. { chr.to.int$ "0" chr.to.int$ - }
  520. {"noninteger character " quote$ * swap$ * quote$ *
  521. " in integer field of " * cite$ * warning$
  522. #0
  523. }
  524. if$
  525. }
  526. % converts a string on the stack to an integer
  527. FUNCTION {string.to.integer}
  528. { duplicate$ text.length$ 'namesleft :=
  529. #1 'nameptr :=
  530. #0 'numnames :=
  531. { nameptr namesleft > not }
  532. { duplicate$ nameptr #1 substring$
  533. char.to.integer numnames bump.int.mag +
  534. 'numnames :=
  535. nameptr #1 +
  536. 'nameptr :=
  537. }
  538. while$
  539. pop$
  540. numnames
  541. }
  542. % The output routines write out the *next* to the top (previous) item on the
  543. % stack, adding punctuation and such as needed. Since IEEEtran.bst maintains
  544. % the output status for the top two items on the stack, these output
  545. % routines have to consider the previous output status (which corresponds to
  546. % the item that is being output). Full independent control of punctuation,
  547. % closing quote marks, spacing, and newblock is provided.
  548. %
  549. % "output.nonnull" does not check for the presence of a previous empty
  550. % item.
  551. %
  552. % "output" does check for the presence of a previous empty item and will
  553. % remove an empty item rather than outputing it.
  554. %
  555. % "output.warn" is like "output", but will issue a warning if it detects
  556. % an empty item.
  557. FUNCTION {output.nonnull}
  558. { swap$
  559. prev.status.punct punct.comma =
  560. { "," * }
  561. { skip$ }
  562. if$
  563. prev.status.punct punct.period =
  564. { add.period$ }
  565. { skip$ }
  566. if$
  567. prev.status.quote quote.close =
  568. { "''" * }
  569. { skip$ }
  570. if$
  571. prev.status.space space.normal =
  572. { " " * }
  573. { skip$ }
  574. if$
  575. prev.status.space space.large =
  576. { large.space * }
  577. { skip$ }
  578. if$
  579. write$
  580. prev.status.nline nline.newblock =
  581. { newline$ "\newblock " write$ }
  582. { skip$ }
  583. if$
  584. }
  585. FUNCTION {output}
  586. { duplicate$ empty$
  587. 'pop$
  588. 'output.nonnull
  589. if$
  590. }
  591. FUNCTION {output.warn}
  592. { 't :=
  593. duplicate$ empty$
  594. { pop$ "empty " t * " in " * cite$ * warning$ }
  595. 'output.nonnull
  596. if$
  597. }
  598. % "fin.entry" is the output routine that handles the last item of the entry
  599. % (which will be on the top of the stack when "fin.entry" is called).
  600. FUNCTION {fin.entry}
  601. { this.status.punct punct.no =
  602. { skip$ }
  603. { add.period$ }
  604. if$
  605. this.status.quote quote.close =
  606. { "''" * }
  607. { skip$ }
  608. if$
  609. write$
  610. newline$
  611. }
  612. FUNCTION {is.last.char.not.punct}
  613. { duplicate$
  614. "}" * add.period$
  615. #-1 #1 substring$ "." =
  616. }
  617. FUNCTION {is.multiple.pages}
  618. { 't :=
  619. #0 'multiresult :=
  620. { multiresult not
  621. t empty$ not
  622. and
  623. }
  624. { t #1 #1 substring$
  625. duplicate$ "-" =
  626. swap$ duplicate$ "," =
  627. swap$ "+" =
  628. or or
  629. { #1 'multiresult := }
  630. { t #2 global.max$ substring$ 't := }
  631. if$
  632. }
  633. while$
  634. multiresult
  635. }
  636. FUNCTION {capitalize}{ "u" change.case$ "t" change.case$ }
  637. FUNCTION {emphasize}
  638. { duplicate$ empty$
  639. { pop$ "" }
  640. %% Turned off for MESH2013
  641. % { "\emph{" swap$ * "}" * }
  642. { skip$ }
  643. %%
  644. if$
  645. }
  646. FUNCTION {do.name.latex.cmd}
  647. { name.latex.cmd
  648. empty$
  649. { skip$ }
  650. { name.latex.cmd "{" * swap$ * "}" * }
  651. if$
  652. }
  653. % IEEEtran.bst uses its own \BIBforeignlanguage command which directly
  654. % invokes the TeX hyphenation patterns without the need of the Babel
  655. % package. Babel does a lot more than switch hyphenation patterns and
  656. % its loading can cause unintended effects in many class files (such as
  657. % IEEEtran.cls).
  658. FUNCTION {select.language}
  659. { duplicate$ empty$ 'pop$
  660. { language empty$ 'skip$
  661. { "\BIBforeignlanguage{" language * "}{" * swap$ * "}" * }
  662. if$
  663. }
  664. if$
  665. }
  666. FUNCTION {tie.or.space.prefix}
  667. { duplicate$ text.length$ #3 <
  668. { "~" }
  669. { " " }
  670. if$
  671. swap$
  672. }
  673. FUNCTION {get.bbl.editor}
  674. { editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }
  675. FUNCTION {space.word}{ " " swap$ * " " * }
  676. % Field Conditioners, Converters, Checkers and External Interfaces
  677. FUNCTION {empty.field.to.null.string}
  678. { duplicate$ empty$
  679. { pop$ "" }
  680. { skip$ }
  681. if$
  682. }
  683. FUNCTION {either.or.check}
  684. { empty$
  685. { pop$ }
  686. { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  687. if$
  688. }
  689. FUNCTION {empty.entry.warn}
  690. { author empty$ title empty$ howpublished empty$
  691. month empty$ year empty$ note empty$ url empty$
  692. and and and and and and
  693. { "all relevant fields are empty in " cite$ * warning$ }
  694. 'skip$
  695. if$
  696. }
  697. % The bibinfo system provides a way for the electronic parsing/acquisition
  698. % of a bibliography's contents as is done by ReVTeX. For example, a field
  699. % could be entered into the bibliography as:
  700. % \bibinfo{volume}{2}
  701. % Only the "2" would show up in the document, but the LaTeX \bibinfo command
  702. % could do additional things with the information. IEEEtran.bst does provide
  703. % a \bibinfo command via "\providecommand{\bibinfo}[2]{#2}". However, it is
  704. % currently not used as the bogus bibinfo functions defined here output the
  705. % entry values directly without the \bibinfo wrapper. The bibinfo functions
  706. % themselves (and the calls to them) are retained for possible future use.
  707. %
  708. % bibinfo.check avoids acting on missing fields while bibinfo.warn will
  709. % issue a warning message if a missing field is detected. Prior to calling
  710. % the bibinfo functions, the user should push the field value and then its
  711. % name string, in that order.
  712. FUNCTION {bibinfo.check}
  713. { swap$ duplicate$ missing$
  714. { pop$ pop$ "" }
  715. { duplicate$ empty$
  716. { swap$ pop$ }
  717. { swap$ pop$ }
  718. if$
  719. }
  720. if$
  721. }
  722. FUNCTION {bibinfo.warn}
  723. { swap$ duplicate$ missing$
  724. { swap$ "missing " swap$ * " in " * cite$ * warning$ pop$ "" }
  725. { duplicate$ empty$
  726. { swap$ "empty " swap$ * " in " * cite$ * warning$ }
  727. { swap$ pop$ }
  728. if$
  729. }
  730. if$
  731. }
  732. % IEEE separates large numbers with more than 4 digits into groups of
  733. % three. IEEE uses a small space to separate these number groups.
  734. % Typical applications include patent and page numbers.
  735. % number of consecutive digits required to trigger the group separation.
  736. FUNCTION {large.number.trigger}{ #5 }
  737. % For numbers longer than the trigger, this is the blocksize of the groups.
  738. % The blocksize must be less than the trigger threshold, and 2 * blocksize
  739. % must be greater than the trigger threshold (can't do more than one
  740. % separation on the initial trigger).
  741. FUNCTION {large.number.blocksize}{ #3 }
  742. % What is actually inserted between the number groups.
  743. FUNCTION {large.number.separator}{ "\," }
  744. % So as to save on integer variables by reusing existing ones, numnames
  745. % holds the current number of consecutive digits read and nameptr holds
  746. % the number that will trigger an inserted space.
  747. FUNCTION {large.number.separate}
  748. { 't :=
  749. ""
  750. #0 'numnames :=
  751. large.number.trigger 'nameptr :=
  752. { t empty$ not }
  753. { t #-1 #1 substring$ is.num
  754. { numnames #1 + 'numnames := }
  755. { #0 'numnames :=
  756. large.number.trigger 'nameptr :=
  757. }
  758. if$
  759. t #-1 #1 substring$ swap$ *
  760. t #-2 global.max$ substring$ 't :=
  761. numnames nameptr =
  762. { duplicate$ #1 nameptr large.number.blocksize - substring$ swap$
  763. nameptr large.number.blocksize - #1 + global.max$ substring$
  764. large.number.separator swap$ * *
  765. nameptr large.number.blocksize - 'numnames :=
  766. large.number.blocksize #1 + 'nameptr :=
  767. }
  768. { skip$ }
  769. if$
  770. }
  771. while$
  772. }
  773. % Converts all single dashes "-" to double dashes "--".
  774. FUNCTION {n.dashify}
  775. { large.number.separate
  776. 't :=
  777. ""
  778. { t empty$ not }
  779. { t #1 #1 substring$ "-" =
  780. { t #1 #2 substring$ "--" = not
  781. { "--" *
  782. t #2 global.max$ substring$ 't :=
  783. }
  784. { { t #1 #1 substring$ "-" = }
  785. { "-" *
  786. t #2 global.max$ substring$ 't :=
  787. }
  788. while$
  789. }
  790. if$
  791. }
  792. { t #1 #1 substring$ *
  793. t #2 global.max$ substring$ 't :=
  794. }
  795. if$
  796. }
  797. while$
  798. }
  799. % This function detects entries with names that are identical to that of
  800. % the previous entry and replaces the repeated names with dashes (if the
  801. % "is.dash.repeated.names" user control is nonzero).
  802. FUNCTION {name.or.dash}
  803. { 's :=
  804. oldname empty$
  805. { s 'oldname := s }
  806. { s oldname =
  807. { is.dash.repeated.names
  808. { repeated.name.dashes }
  809. { s 'oldname := s }
  810. if$
  811. }
  812. { s 'oldname := s }
  813. if$
  814. }
  815. if$
  816. }
  817. % Converts the number string on the top of the stack to
  818. % "numerical ordinal form" (e.g., "7" to "7th"). There is
  819. % no artificial limit to the upper bound of the numbers as the
  820. % two least significant digits determine the ordinal form.
  821. FUNCTION {num.to.ordinal}
  822. { duplicate$ #-2 #1 substring$ "1" =
  823. { bbl.th * }
  824. { duplicate$ #-1 #1 substring$ "1" =
  825. { bbl.st * }
  826. { duplicate$ #-1 #1 substring$ "2" =
  827. { bbl.nd * }
  828. { duplicate$ #-1 #1 substring$ "3" =
  829. { bbl.rd * }
  830. { bbl.th * }
  831. if$
  832. }
  833. if$
  834. }
  835. if$
  836. }
  837. if$
  838. }
  839. % If the string on the top of the stack begins with a number,
  840. % (e.g., 11th) then replace the string with the leading number
  841. % it contains. Otherwise retain the string as-is. s holds the
  842. % extracted number, t holds the part of the string that remains
  843. % to be scanned.
  844. FUNCTION {extract.num}
  845. { duplicate$ 't :=
  846. "" 's :=
  847. { t empty$ not }
  848. { t #1 #1 substring$
  849. t #2 global.max$ substring$ 't :=
  850. duplicate$ is.num
  851. { s swap$ * 's := }
  852. { pop$ "" 't := }
  853. if$
  854. }
  855. while$
  856. s empty$
  857. 'skip$
  858. { pop$ s }
  859. if$
  860. }
  861. % Converts the word number string on the top of the stack to
  862. % Arabic string form. Will be successful up to "tenth".
  863. FUNCTION {word.to.num}
  864. { duplicate$ "l" change.case$ 's :=
  865. s "first" =
  866. { pop$ "1" }
  867. { skip$ }
  868. if$
  869. s "second" =
  870. { pop$ "2" }
  871. { skip$ }
  872. if$
  873. s "third" =
  874. { pop$ "3" }
  875. { skip$ }
  876. if$
  877. s "fourth" =
  878. { pop$ "4" }
  879. { skip$ }
  880. if$
  881. s "fifth" =
  882. { pop$ "5" }
  883. { skip$ }
  884. if$
  885. s "sixth" =
  886. { pop$ "6" }
  887. { skip$ }
  888. if$
  889. s "seventh" =
  890. { pop$ "7" }
  891. { skip$ }
  892. if$
  893. s "eighth" =
  894. { pop$ "8" }
  895. { skip$ }
  896. if$
  897. s "ninth" =
  898. { pop$ "9" }
  899. { skip$ }
  900. if$
  901. s "tenth" =
  902. { pop$ "10" }
  903. { skip$ }
  904. if$
  905. }
  906. % Converts the string on the top of the stack to numerical
  907. % ordinal (e.g., "11th") form.
  908. FUNCTION {convert.edition}
  909. { duplicate$ empty$ 'skip$
  910. { duplicate$ #1 #1 substring$ is.num
  911. { extract.num
  912. num.to.ordinal
  913. }
  914. { word.to.num
  915. duplicate$ #1 #1 substring$ is.num
  916. { num.to.ordinal }
  917. { "edition ordinal word " quote$ * edition * quote$ *
  918. " may be too high (or improper) for conversion" * " in " * cite$ * warning$
  919. }
  920. if$
  921. }
  922. if$
  923. }
  924. if$
  925. }
  926. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  927. %% LATEX BIBLIOGRAPHY CODE %%
  928. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  929. FUNCTION {start.entry}
  930. { newline$
  931. "\bibitem{" write$
  932. cite$ write$
  933. "}" write$
  934. newline$
  935. ""
  936. initialize.prev.this.status
  937. }
  938. % Here we write out all the LaTeX code that we will need. The most involved
  939. % code sequences are those that control the alternate interword spacing and
  940. % foreign language hyphenation patterns. The heavy use of \providecommand
  941. % gives users a way to override the defaults. Special thanks to Javier Bezos,
  942. % Johannes Braams, Robin Fairbairns, Heiko Oberdiek, Donald Arseneau and all
  943. % the other gurus on comp.text.tex for their help and advice on the topic of
  944. % \selectlanguage, Babel and BibTeX.
  945. FUNCTION {begin.bib}
  946. { "% Generated by IEEEtran.bst, version: " bst.file.version * " (" * bst.file.date * ")" *
  947. write$ newline$
  948. preamble$ empty$ 'skip$
  949. { preamble$ write$ newline$ }
  950. if$
  951. "\begin{thebibliography}{" longest.label * "}" *
  952. write$ newline$
  953. "\providecommand{\url}[1]{#1}"
  954. write$ newline$
  955. "\csname url@samestyle\endcsname"
  956. write$ newline$
  957. "\providecommand{\newblock}{\relax}"
  958. write$ newline$
  959. "\providecommand{\bibinfo}[2]{#2}"
  960. write$ newline$
  961. "\providecommand{\BIBentrySTDinterwordspacing}{\spaceskip=0pt\relax}"
  962. write$ newline$
  963. "\providecommand{\BIBentryALTinterwordstretchfactor}{"
  964. ALTinterwordstretchfactor * "}" *
  965. write$ newline$
  966. "\providecommand{\BIBentryALTinterwordspacing}{\spaceskip=\fontdimen2\font plus "
  967. write$ newline$
  968. "\BIBentryALTinterwordstretchfactor\fontdimen3\font minus \fontdimen4\font\relax}"
  969. write$ newline$
  970. "\providecommand{\BIBforeignlanguage}[2]{{%"
  971. write$ newline$
  972. "\expandafter\ifx\csname l@#1\endcsname\relax"
  973. write$ newline$
  974. "\typeout{** WARNING: IEEEtran.bst: No hyphenation pattern has been}%"
  975. write$ newline$
  976. "\typeout{** loaded for the language `#1'. Using the pattern for}%"
  977. write$ newline$
  978. "\typeout{** the default language instead.}%"
  979. write$ newline$
  980. "\else"
  981. write$ newline$
  982. "\language=\csname l@#1\endcsname"
  983. write$ newline$
  984. "\fi"
  985. write$ newline$
  986. "#2}}"
  987. write$ newline$
  988. "\providecommand{\BIBdecl}{\relax}"
  989. write$ newline$
  990. "\BIBdecl"
  991. write$ newline$
  992. }
  993. FUNCTION {end.bib}
  994. { newline$ "\end{thebibliography}" write$ newline$ }
  995. FUNCTION {if.url.alt.interword.spacing}
  996. { is.use.alt.interword.spacing
  997. {url empty$ 'skip$ {"\BIBentryALTinterwordspacing" write$ newline$} if$}
  998. { skip$ }
  999. if$
  1000. }
  1001. FUNCTION {if.url.std.interword.spacing}
  1002. { is.use.alt.interword.spacing
  1003. {url empty$ 'skip$ {"\BIBentrySTDinterwordspacing" write$ newline$} if$}
  1004. { skip$ }
  1005. if$
  1006. }
  1007. %%%%%%%%%%%%%%%%%%%%%%%%
  1008. %% LONGEST LABEL PASS %%
  1009. %%%%%%%%%%%%%%%%%%%%%%%%
  1010. FUNCTION {initialize.longest.label}
  1011. { "" 'longest.label :=
  1012. #1 'number.label :=
  1013. #0 'longest.label.width :=
  1014. }
  1015. FUNCTION {longest.label.pass}
  1016. { type$ "ieeetranbstctl" =
  1017. { skip$ }
  1018. { number.label int.to.str$ 'label :=
  1019. number.label #1 + 'number.label :=
  1020. label width$ longest.label.width >
  1021. { label 'longest.label :=
  1022. label width$ 'longest.label.width :=
  1023. }
  1024. { skip$ }
  1025. if$
  1026. }
  1027. if$
  1028. }
  1029. %%%%%%%%%%%%%%%%%%%%%
  1030. %% FORMAT HANDLERS %%
  1031. %%%%%%%%%%%%%%%%%%%%%
  1032. %% Lower Level Formats (used by higher level formats)
  1033. FUNCTION {format.address.org.or.pub.date}
  1034. { 't :=
  1035. ""
  1036. year empty$
  1037. { "empty year in " cite$ * warning$ }
  1038. { skip$ }
  1039. if$
  1040. address empty$ t empty$ and
  1041. year empty$ and month empty$ and
  1042. { skip$ }
  1043. { this.to.prev.status
  1044. this.status.std
  1045. cap.status.std
  1046. address "address" bibinfo.check *
  1047. t empty$
  1048. { skip$ }
  1049. { punct.period 'prev.status.punct :=
  1050. space.large 'prev.status.space :=
  1051. address empty$
  1052. { skip$ }
  1053. { ": " * }
  1054. if$
  1055. t *
  1056. }
  1057. if$
  1058. year empty$ month empty$ and
  1059. { skip$ }
  1060. { t empty$ address empty$ and
  1061. { skip$ }
  1062. { ", " * }
  1063. if$
  1064. month empty$
  1065. { year empty$
  1066. { skip$ }
  1067. { year "year" bibinfo.check * }
  1068. if$
  1069. }
  1070. { month "month" bibinfo.check *
  1071. year empty$
  1072. { skip$ }
  1073. { " " * year "year" bibinfo.check * }
  1074. if$
  1075. }
  1076. if$
  1077. }
  1078. if$
  1079. }
  1080. if$
  1081. }
  1082. FUNCTION {format.names}
  1083. { 'bibinfo :=
  1084. duplicate$ empty$ 'skip$ {
  1085. this.to.prev.status
  1086. this.status.std
  1087. 's :=
  1088. "" 't :=
  1089. #1 'nameptr :=
  1090. s num.names$ 'numnames :=
  1091. numnames 'namesleft :=
  1092. { namesleft #0 > }
  1093. { s nameptr
  1094. name.format.string
  1095. format.name$
  1096. bibinfo bibinfo.check
  1097. 't :=
  1098. nameptr #1 >
  1099. { nameptr num.names.shown.with.forced.et.al #1 + =
  1100. numnames max.num.names.before.forced.et.al >
  1101. is.forced.et.al and and
  1102. { "others" 't :=
  1103. #1 'namesleft :=
  1104. }
  1105. { skip$ }
  1106. if$
  1107. namesleft #1 >
  1108. { ", " * t do.name.latex.cmd * }
  1109. { s nameptr "{ll}" format.name$ duplicate$ "others" =
  1110. { 't := }
  1111. { pop$ }
  1112. if$
  1113. t "others" =
  1114. { " " * bbl.etal emphasize * }
  1115. { numnames #2 >
  1116. { "," * }
  1117. { skip$ }
  1118. if$
  1119. bbl.and
  1120. space.word * t do.name.latex.cmd *
  1121. }
  1122. if$
  1123. }
  1124. if$
  1125. }
  1126. { t do.name.latex.cmd }
  1127. if$
  1128. nameptr #1 + 'nameptr :=
  1129. namesleft #1 - 'namesleft :=
  1130. }
  1131. while$
  1132. cap.status.std
  1133. } if$
  1134. }
  1135. %% Higher Level Formats
  1136. %% addresses/locations
  1137. FUNCTION {format.address}
  1138. { address duplicate$ empty$ 'skip$
  1139. { this.to.prev.status
  1140. this.status.std
  1141. cap.status.std
  1142. }
  1143. if$
  1144. }
  1145. %% author/editor names
  1146. FUNCTION {format.authors}{ author "author" format.names }
  1147. FUNCTION {format.editors}
  1148. { editor "editor" format.names duplicate$ empty$ 'skip$
  1149. { ", " *
  1150. get.bbl.editor
  1151. capitalize
  1152. *
  1153. }
  1154. if$
  1155. }
  1156. %% date
  1157. FUNCTION {format.date}
  1158. {
  1159. month "month" bibinfo.check duplicate$ empty$
  1160. year "year" bibinfo.check duplicate$ empty$
  1161. { swap$ 'skip$
  1162. { this.to.prev.status
  1163. this.status.std
  1164. cap.status.std
  1165. "there's a month but no year in " cite$ * warning$ }
  1166. if$
  1167. *
  1168. }
  1169. { this.to.prev.status
  1170. this.status.std
  1171. cap.status.std
  1172. swap$ 'skip$
  1173. {
  1174. swap$
  1175. " " * swap$
  1176. }
  1177. if$
  1178. *
  1179. }
  1180. if$
  1181. }
  1182. % WARNING: This function was modified to adhere to the formatting rules
  1183. % of MESH2013 conference for entries with both month and year specified.
  1184. % It will not work properly otherwise.
  1185. FUNCTION {format.date.electronic}
  1186. { year "year" bibinfo.check duplicate$ empty$
  1187. month "month" bibinfo.check duplicate$ empty$
  1188. { swap$
  1189. { pop$ }
  1190. { "there's a month but no year in " cite$ * warning$
  1191. pop$ ")" * "(" swap$ *
  1192. this.to.prev.status
  1193. punct.no 'this.status.punct :=
  1194. space.normal 'this.status.space :=
  1195. quote.no 'this.status.quote :=
  1196. cap.yes 'status.cap :=
  1197. }
  1198. if$
  1199. }
  1200. { swap$
  1201. { swap$ pop$ ")" * "(" swap$ * }
  1202. { "[retrieved: " swap$ * ", " * swap$ * "]" * }
  1203. if$
  1204. this.to.prev.status
  1205. punct.no 'this.status.punct :=
  1206. space.normal 'this.status.space :=
  1207. quote.no 'this.status.quote :=
  1208. cap.yes 'status.cap :=
  1209. }
  1210. if$
  1211. }
  1212. %% edition/title
  1213. % Note: IEEE considers the edition to be closely associated with
  1214. % the title of a book. So, in IEEEtran.bst the edition is normally handled
  1215. % within the formatting of the title. The format.edition function is
  1216. % retained here for possible future use.
  1217. FUNCTION {format.edition}
  1218. { edition duplicate$ empty$ 'skip$
  1219. { this.to.prev.status
  1220. this.status.std
  1221. convert.edition
  1222. status.cap
  1223. { "t" }
  1224. { "l" }
  1225. if$ change.case$
  1226. "edition" bibinfo.check
  1227. "~" * bbl.edition *
  1228. cap.status.std
  1229. }
  1230. if$
  1231. }
  1232. % This is used to format the booktitle of a conference proceedings.
  1233. % Here we use the "intype" field to provide the user a way to
  1234. % override the word "in" (e.g., with things like "presented at")
  1235. % Use of intype stops the emphasis of the booktitle to indicate that
  1236. % we no longer mean the written conference proceedings, but the
  1237. % conference itself.
  1238. FUNCTION {format.in.booktitle}
  1239. { booktitle "booktitle" bibinfo.check duplicate$ empty$ 'skip$
  1240. { this.to.prev.status
  1241. this.status.std
  1242. select.language
  1243. intype missing$
  1244. { emphasize
  1245. bbl.in " " *
  1246. }
  1247. { intype " " * }
  1248. if$
  1249. swap$ *
  1250. cap.status.std
  1251. }
  1252. if$
  1253. }
  1254. % This is used to format the booktitle of collection.
  1255. % Here the "intype" field is not supported, but "edition" is.
  1256. FUNCTION {format.in.booktitle.edition}
  1257. { booktitle "booktitle" bibinfo.check duplicate$ empty$ 'skip$
  1258. { this.to.prev.status
  1259. this.status.std
  1260. select.language
  1261. emphasize
  1262. edition empty$ 'skip$
  1263. { ", " *
  1264. edition
  1265. convert.edition
  1266. "l" change.case$
  1267. * "~" * bbl.edition *
  1268. }
  1269. if$
  1270. bbl.in " " * swap$ *
  1271. cap.status.std
  1272. }
  1273. if$
  1274. }
  1275. FUNCTION {format.article.title}
  1276. { title duplicate$ empty$ 'skip$
  1277. { this.to.prev.status
  1278. this.status.std
  1279. "t" change.case$
  1280. }
  1281. if$
  1282. "title" bibinfo.check
  1283. duplicate$ empty$ 'skip$
  1284. { quote.close 'this.status.quote :=
  1285. is.last.char.not.punct
  1286. { punct.std 'this.status.punct := }
  1287. { punct.no 'this.status.punct := }
  1288. if$
  1289. select.language
  1290. "``" swap$ *
  1291. cap.status.std
  1292. }
  1293. if$
  1294. }
  1295. FUNCTION {format.article.title.electronic}
  1296. { title duplicate$ empty$ 'skip$
  1297. { this.to.prev.status
  1298. this.status.std
  1299. cap.status.std
  1300. "t" change.case$
  1301. }
  1302. if$
  1303. "title" bibinfo.check
  1304. duplicate$ empty$
  1305. { skip$ }
  1306. { select.language }
  1307. if$
  1308. }
  1309. FUNCTION {format.book.title.edition}
  1310. { title "title" bibinfo.check
  1311. duplicate$ empty$
  1312. { "empty title in " cite$ * warning$ }
  1313. { this.to.prev.status
  1314. this.status.std
  1315. select.language
  1316. emphasize
  1317. edition empty$ 'skip$
  1318. { ", " *
  1319. edition
  1320. convert.edition
  1321. status.cap
  1322. { "t" }
  1323. { "l" }
  1324. if$
  1325. change.case$
  1326. * "~" * bbl.edition *
  1327. }
  1328. if$
  1329. cap.status.std
  1330. }
  1331. if$
  1332. }
  1333. FUNCTION {format.book.title}
  1334. { title "title" bibinfo.check
  1335. duplicate$ empty$ 'skip$
  1336. { this.to.prev.status
  1337. this.status.std
  1338. cap.status.std
  1339. select.language
  1340. emphasize
  1341. }
  1342. if$
  1343. }
  1344. %% journal
  1345. FUNCTION {format.journal}
  1346. { journal duplicate$ empty$ 'skip$
  1347. { this.to.prev.status
  1348. this.status.std
  1349. cap.status.std
  1350. select.language
  1351. emphasize
  1352. }
  1353. if$
  1354. }
  1355. %% how published
  1356. FUNCTION {format.howpublished}
  1357. { howpublished duplicate$ empty$ 'skip$
  1358. { this.to.prev.status
  1359. this.status.std
  1360. cap.status.std
  1361. }
  1362. if$
  1363. }
  1364. %% institutions/organization/publishers/school
  1365. FUNCTION {format.institution}
  1366. { institution duplicate$ empty$ 'skip$
  1367. { this.to.prev.status
  1368. this.status.std
  1369. cap.status.std
  1370. }
  1371. if$
  1372. }
  1373. FUNCTION {format.organization}
  1374. { organization duplicate$ empty$ 'skip$
  1375. { this.to.prev.status
  1376. this.status.std
  1377. cap.status.std
  1378. }
  1379. if$
  1380. }
  1381. FUNCTION {format.address.publisher.date}
  1382. { publisher "publisher" bibinfo.warn format.address.org.or.pub.date }
  1383. FUNCTION {format.address.publisher.date.nowarn}
  1384. { publisher "publisher" bibinfo.check format.address.org.or.pub.date }
  1385. FUNCTION {format.address.organization.date}
  1386. { organization "organization" bibinfo.check format.address.org.or.pub.date }
  1387. FUNCTION {format.school}
  1388. { school duplicate$ empty$ 'skip$
  1389. { this.to.prev.status
  1390. this.status.std
  1391. cap.status.std
  1392. }
  1393. if$
  1394. }
  1395. %% volume/number/series/chapter/pages
  1396. FUNCTION {format.volume}
  1397. { volume empty.field.to.null.string
  1398. duplicate$ empty$ 'skip$
  1399. { this.to.prev.status
  1400. this.status.std
  1401. bbl.volume
  1402. status.cap
  1403. { capitalize }
  1404. { skip$ }
  1405. if$
  1406. swap$ tie.or.space.prefix
  1407. "volume" bibinfo.check
  1408. * *
  1409. cap.status.std
  1410. }
  1411. if$
  1412. }
  1413. FUNCTION {format.number}
  1414. { number empty.field.to.null.string
  1415. duplicate$ empty$ 'skip$
  1416. { this.to.prev.status
  1417. this.status.std
  1418. status.cap
  1419. { bbl.number capitalize }
  1420. { bbl.number }
  1421. if$
  1422. swap$ tie.or.space.prefix
  1423. "number" bibinfo.check
  1424. * *
  1425. cap.status.std
  1426. }
  1427. if$
  1428. }
  1429. FUNCTION {format.number.if.use.for.article}
  1430. { is.use.number.for.article
  1431. { format.number }
  1432. { "" }
  1433. if$
  1434. }
  1435. % IEEE does not seem to tie the series so closely with the volume
  1436. % and number as is done in other bibliography styles. Instead the
  1437. % series is treated somewhat like an extension of the title.
  1438. FUNCTION {format.series}
  1439. { series empty$
  1440. { "" }
  1441. { this.to.prev.status
  1442. this.status.std
  1443. bbl.series " " *
  1444. series "series" bibinfo.check *
  1445. cap.status.std
  1446. }
  1447. if$
  1448. }
  1449. FUNCTION {format.chapter}
  1450. { chapter empty$
  1451. { "" }
  1452. { this.to.prev.status
  1453. this.status.std
  1454. type empty$
  1455. { bbl.chapter }
  1456. { type "l" change.case$
  1457. "type" bibinfo.check
  1458. }
  1459. if$
  1460. chapter tie.or.space.prefix
  1461. "chapter" bibinfo.check
  1462. * *
  1463. cap.status.std
  1464. }
  1465. if$
  1466. }
  1467. % The intended use of format.paper is for paper numbers of inproceedings.
  1468. % The paper type can be overridden via the type field.
  1469. % We allow the type to be displayed even if the paper number is absent
  1470. % for things like "postdeadline paper"
  1471. FUNCTION {format.paper}
  1472. { is.use.paper
  1473. { paper empty$
  1474. { type empty$
  1475. { "" }
  1476. { this.to.prev.status
  1477. this.status.std
  1478. type "type" bibinfo.check
  1479. cap.status.std
  1480. }
  1481. if$
  1482. }
  1483. { this.to.prev.status
  1484. this.status.std
  1485. type empty$
  1486. { bbl.paper }
  1487. { type "type" bibinfo.check }
  1488. if$
  1489. " " * paper
  1490. "paper" bibinfo.check
  1491. *
  1492. cap.status.std
  1493. }
  1494. if$
  1495. }
  1496. { "" }
  1497. if$
  1498. }
  1499. FUNCTION {format.pages}
  1500. { pages duplicate$ empty$ 'skip$
  1501. { this.to.prev.status
  1502. this.status.std
  1503. duplicate$ is.multiple.pages
  1504. {
  1505. bbl.pages swap$
  1506. n.dashify
  1507. }
  1508. {
  1509. bbl.page swap$
  1510. }
  1511. if$
  1512. tie.or.space.prefix
  1513. "pages" bibinfo.check
  1514. * *
  1515. cap.status.std
  1516. }
  1517. if$
  1518. }
  1519. %% technical report number
  1520. FUNCTION {format.tech.report.number}
  1521. { number "number" bibinfo.check
  1522. this.to.prev.status
  1523. this.status.std
  1524. cap.status.std
  1525. type duplicate$ empty$
  1526. { pop$
  1527. bbl.techrep
  1528. }
  1529. { skip$ }
  1530. if$
  1531. "type" bibinfo.check
  1532. swap$ duplicate$ empty$
  1533. { pop$ }
  1534. { tie.or.space.prefix * * }
  1535. if$
  1536. }
  1537. %% note
  1538. FUNCTION {format.note}
  1539. { note empty$
  1540. { "" }
  1541. { this.to.prev.status
  1542. this.status.std
  1543. punct.period 'this.status.punct :=
  1544. note #1 #1 substring$
  1545. duplicate$ "{" =
  1546. { skip$ }
  1547. { status.cap
  1548. { "u" }
  1549. { "l" }
  1550. if$
  1551. change.case$
  1552. }
  1553. if$
  1554. note #2 global.max$ substring$ * "note" bibinfo.check
  1555. cap.yes 'status.cap :=
  1556. }
  1557. if$
  1558. }
  1559. %% patent
  1560. FUNCTION {format.patent.date}
  1561. { this.to.prev.status
  1562. this.status.std
  1563. year empty$
  1564. { monthfiled duplicate$ empty$
  1565. { "monthfiled" bibinfo.check pop$ "" }
  1566. { "monthfiled" bibinfo.check }
  1567. if$
  1568. dayfiled duplicate$ empty$
  1569. { "dayfiled" bibinfo.check pop$ "" * }
  1570. { "dayfiled" bibinfo.check
  1571. monthfiled empty$
  1572. { "dayfiled without a monthfiled in " cite$ * warning$
  1573. *
  1574. }
  1575. { " " swap$ * * }
  1576. if$
  1577. }
  1578. if$
  1579. yearfiled empty$
  1580. { "no year or yearfiled in " cite$ * warning$ }
  1581. { yearfiled "yearfiled" bibinfo.check
  1582. swap$
  1583. duplicate$ empty$
  1584. { pop$ }
  1585. { ", " * swap$ * }
  1586. if$
  1587. }
  1588. if$
  1589. }
  1590. { month duplicate$ empty$
  1591. { "month" bibinfo.check pop$ "" }
  1592. { "month" bibinfo.check }
  1593. if$
  1594. day duplicate$ empty$
  1595. { "day" bibinfo.check pop$ "" * }
  1596. { "day" bibinfo.check
  1597. month empty$
  1598. { "day without a month in " cite$ * warning$
  1599. *
  1600. }
  1601. { " " swap$ * * }
  1602. if$
  1603. }
  1604. if$
  1605. year "year" bibinfo.check
  1606. swap$
  1607. duplicate$ empty$
  1608. { pop$ }
  1609. { ", " * swap$ * }
  1610. if$
  1611. }
  1612. if$
  1613. cap.status.std
  1614. }
  1615. FUNCTION {format.patent.nationality.type.number}
  1616. { this.to.prev.status
  1617. this.status.std
  1618. nationality duplicate$ empty$
  1619. { "nationality" bibinfo.warn pop$ "" }
  1620. { "nationality" bibinfo.check
  1621. duplicate$ "l" change.case$ "united states" =
  1622. { pop$ bbl.patentUS }
  1623. { skip$ }
  1624. if$
  1625. " " *
  1626. }
  1627. if$
  1628. type empty$
  1629. { bbl.patent "type" bibinfo.check }
  1630. { type "type" bibinfo.check }
  1631. if$
  1632. *
  1633. number duplicate$ empty$
  1634. { "number" bibinfo.warn pop$ }
  1635. { "number" bibinfo.check
  1636. large.number.separate
  1637. swap$ " " * swap$ *
  1638. }
  1639. if$
  1640. cap.status.std
  1641. }
  1642. %% standard
  1643. FUNCTION {format.organization.institution.standard.type.number}
  1644. { this.to.prev.status
  1645. this.status.std
  1646. organization duplicate$ empty$
  1647. { pop$
  1648. institution duplicate$ empty$
  1649. { "institution" bibinfo.warn }
  1650. { "institution" bibinfo.warn " " * }
  1651. if$
  1652. }
  1653. { "organization" bibinfo.warn " " * }
  1654. if$
  1655. type empty$
  1656. { bbl.standard "type" bibinfo.check }
  1657. { type "type" bibinfo.check }
  1658. if$
  1659. *
  1660. number duplicate$ empty$
  1661. { "number" bibinfo.check pop$ }
  1662. { "number" bibinfo.check
  1663. large.number.separate
  1664. swap$ " " * swap$ *
  1665. }
  1666. if$
  1667. cap.status.std
  1668. }
  1669. FUNCTION {format.revision}
  1670. { revision empty$
  1671. { "" }
  1672. { this.to.prev.status
  1673. this.status.std
  1674. bbl.revision
  1675. revision tie.or.space.prefix
  1676. "revision" bibinfo.check
  1677. * *
  1678. cap.status.std
  1679. }
  1680. if$
  1681. }
  1682. %% thesis
  1683. FUNCTION {format.master.thesis.type}
  1684. { this.to.prev.status
  1685. this.status.std
  1686. type empty$
  1687. {
  1688. bbl.mthesis
  1689. }
  1690. {
  1691. type "type" bibinfo.check
  1692. }
  1693. if$
  1694. cap.status.std
  1695. }
  1696. FUNCTION {format.phd.thesis.type}
  1697. { this.to.prev.status
  1698. this.status.std
  1699. type empty$
  1700. {
  1701. bbl.phdthesis
  1702. }
  1703. {
  1704. type "type" bibinfo.check
  1705. }
  1706. if$
  1707. cap.status.std
  1708. }
  1709. %% URL
  1710. FUNCTION {format.url}
  1711. { url empty$
  1712. { "" }
  1713. { this.to.prev.status
  1714. this.status.std
  1715. cap.yes 'status.cap :=
  1716. name.url.prefix " " *
  1717. "\url{" * url * "}" *
  1718. punct.no 'this.status.punct :=
  1719. punct.period 'prev.status.punct :=
  1720. space.normal 'this.status.space :=
  1721. space.normal 'prev.status.space :=
  1722. quote.no 'this.status.quote :=
  1723. }
  1724. if$
  1725. }
  1726. %%%%%%%%%%%%%%%%%%%%
  1727. %% ENTRY HANDLERS %%
  1728. %%%%%%%%%%%%%%%%%%%%
  1729. % Note: In many journals, IEEE (or the authors) tend not to show the number
  1730. % for articles, so the display of the number is controlled here by the
  1731. % switch "is.use.number.for.article"
  1732. FUNCTION {article}
  1733. { std.status.using.comma
  1734. start.entry
  1735. if.url.alt.interword.spacing
  1736. format.authors "author" output.warn
  1737. name.or.dash
  1738. format.article.title "title" output.warn
  1739. format.journal "journal" bibinfo.check "journal" output.warn
  1740. format.volume output
  1741. format.number.if.use.for.article output
  1742. format.date "year" output.warn
  1743. format.pages output
  1744. format.note output
  1745. format.url output
  1746. fin.entry
  1747. if.url.std.interword.spacing
  1748. }
  1749. FUNCTION {book}
  1750. { std.status.using.comma
  1751. start.entry
  1752. if.url.alt.interword.spacing
  1753. author empty$
  1754. { format.editors "author and editor" output.warn }
  1755. { format.authors output.nonnull }
  1756. if$
  1757. name.or.dash
  1758. format.book.title.edition output
  1759. format.series output
  1760. author empty$
  1761. { skip$ }
  1762. { format.editors output }
  1763. if$
  1764. format.address.publisher.date output
  1765. format.volume output
  1766. format.number output
  1767. format.note output
  1768. format.url output
  1769. fin.entry
  1770. if.url.std.interword.spacing
  1771. }
  1772. FUNCTION {booklet}
  1773. { std.status.using.comma
  1774. start.entry
  1775. if.url.alt.interword.spacing
  1776. format.authors output
  1777. name.or.dash
  1778. format.article.title "title" output.warn
  1779. format.howpublished "howpublished" bibinfo.check output
  1780. format.organization "organization" bibinfo.check output
  1781. format.address "address" bibinfo.check output
  1782. format.date output
  1783. format.note output
  1784. format.url output
  1785. fin.entry
  1786. if.url.std.interword.spacing
  1787. }
  1788. FUNCTION {electronic}
  1789. { std.status.using.period
  1790. start.entry
  1791. if.url.alt.interword.spacing
  1792. format.authors output
  1793. name.or.dash
  1794. format.article.title.electronic output
  1795. format.howpublished "howpublished" bibinfo.check output
  1796. format.organization "organization" bibinfo.check output
  1797. format.address "address" bibinfo.check output
  1798. format.note output
  1799. format.url output
  1800. format.date.electronic output
  1801. fin.entry
  1802. empty.entry.warn
  1803. if.url.std.interword.spacing
  1804. }
  1805. FUNCTION {inbook}
  1806. { std.status.using.comma
  1807. start.entry
  1808. if.url.alt.interword.spacing
  1809. author empty$
  1810. { format.editors "author and editor" output.warn }
  1811. { format.authors output.nonnull }
  1812. if$
  1813. name.or.dash
  1814. format.book.title.edition output
  1815. format.series output
  1816. format.address.publisher.date output
  1817. format.volume output
  1818. format.number output
  1819. format.chapter output
  1820. format.pages output
  1821. format.note output
  1822. format.url output
  1823. fin.entry
  1824. if.url.std.interword.spacing
  1825. }
  1826. FUNCTION {incollection}
  1827. { std.status.using.comma
  1828. start.entry
  1829. if.url.alt.interword.spacing
  1830. format.authors "author" output.warn
  1831. name.or.dash
  1832. format.article.title "title" output.warn
  1833. format.in.booktitle.edition "booktitle" output.warn
  1834. format.series output
  1835. format.editors output
  1836. format.address.publisher.date.nowarn output
  1837. format.volume output
  1838. format.number output
  1839. format.chapter output
  1840. format.pages output
  1841. format.note output
  1842. format.url output
  1843. fin.entry
  1844. if.url.std.interword.spacing
  1845. }
  1846. FUNCTION {inproceedings}
  1847. { std.status.using.comma
  1848. start.entry
  1849. if.url.alt.interword.spacing
  1850. format.authors "author" output.warn
  1851. name.or.dash
  1852. format.article.title "title" output.warn
  1853. format.in.booktitle "booktitle" output.warn
  1854. format.series output
  1855. format.editors output
  1856. format.volume output
  1857. format.number output
  1858. publisher empty$
  1859. { format.address.organization.date output }
  1860. { format.organization "organization" bibinfo.check output
  1861. format.address.publisher.date output
  1862. }
  1863. if$
  1864. format.paper output
  1865. format.pages output
  1866. format.note output
  1867. format.url output
  1868. fin.entry
  1869. if.url.std.interword.spacing
  1870. }
  1871. FUNCTION {manual}
  1872. { std.status.using.comma
  1873. start.entry
  1874. if.url.alt.interword.spacing
  1875. format.authors output
  1876. name.or.dash
  1877. format.book.title.edition "title" output.warn
  1878. format.howpublished "howpublished" bibinfo.check output
  1879. format.organization "organization" bibinfo.check output
  1880. format.address "address" bibinfo.check output
  1881. format.date output
  1882. format.note output
  1883. format.url output
  1884. fin.entry
  1885. if.url.std.interword.spacing
  1886. }
  1887. FUNCTION {mastersthesis}
  1888. { std.status.using.comma
  1889. start.entry
  1890. if.url.alt.interword.spacing
  1891. format.authors "author" output.warn
  1892. name.or.dash
  1893. format.article.title "title" output.warn
  1894. format.master.thesis.type output.nonnull
  1895. format.school "school" bibinfo.warn output
  1896. format.address "address" bibinfo.check output
  1897. format.date "year" output.warn
  1898. format.note output
  1899. format.url output
  1900. fin.entry
  1901. if.url.std.interword.spacing
  1902. }
  1903. FUNCTION {misc}
  1904. { std.status.using.comma
  1905. start.entry
  1906. if.url.alt.interword.spacing
  1907. format.authors output
  1908. name.or.dash
  1909. format.article.title output
  1910. format.howpublished "howpublished" bibinfo.check output
  1911. format.organization "organization" bibinfo.check output
  1912. format.address "address" bibinfo.check output
  1913. format.pages output
  1914. format.date output
  1915. format.note output
  1916. format.url output
  1917. fin.entry
  1918. empty.entry.warn
  1919. if.url.std.interword.spacing
  1920. }
  1921. FUNCTION {patent}
  1922. { std.status.using.comma
  1923. start.entry
  1924. if.url.alt.interword.spacing
  1925. format.authors output
  1926. name.or.dash
  1927. format.article.title output
  1928. format.patent.nationality.type.number output
  1929. format.patent.date output
  1930. format.note output
  1931. format.url output
  1932. fin.entry
  1933. empty.entry.warn
  1934. if.url.std.interword.spacing
  1935. }
  1936. FUNCTION {periodical}
  1937. { std.status.using.comma
  1938. start.entry
  1939. if.url.alt.interword.spacing
  1940. format.editors output
  1941. name.or.dash
  1942. format.book.title "title" output.warn
  1943. format.series output
  1944. format.volume output
  1945. format.number output
  1946. format.organization "organization" bibinfo.check output
  1947. format.date "year" output.warn
  1948. format.note output
  1949. format.url output
  1950. fin.entry
  1951. if.url.std.interword.spacing
  1952. }
  1953. FUNCTION {phdthesis}
  1954. { std.status.using.comma
  1955. start.entry
  1956. if.url.alt.interword.spacing
  1957. format.authors "author" output.warn
  1958. name.or.dash
  1959. format.article.title "title" output.warn
  1960. format.phd.thesis.type output.nonnull
  1961. format.school "school" bibinfo.warn output
  1962. format.address "address" bibinfo.check output
  1963. format.date "year" output.warn
  1964. format.note output
  1965. format.url output
  1966. fin.entry
  1967. if.url.std.interword.spacing
  1968. }
  1969. FUNCTION {proceedings}
  1970. { std.status.using.comma
  1971. start.entry
  1972. if.url.alt.interword.spacing
  1973. format.editors output
  1974. name.or.dash
  1975. format.book.title "title" output.warn
  1976. format.series output
  1977. format.volume output
  1978. format.number output
  1979. publisher empty$
  1980. { format.address.organization.date output }
  1981. { format.organization "organization" bibinfo.check output
  1982. format.address.publisher.date output
  1983. }
  1984. if$
  1985. format.note output
  1986. format.url output
  1987. fin.entry
  1988. if.url.std.interword.spacing
  1989. }
  1990. FUNCTION {standard}
  1991. { std.status.using.comma
  1992. start.entry
  1993. if.url.alt.interword.spacing
  1994. format.authors output
  1995. name.or.dash
  1996. format.book.title "title" output.warn
  1997. format.howpublished "howpublished" bibinfo.check output
  1998. format.organization.institution.standard.type.number output
  1999. format.revision output
  2000. format.date output
  2001. format.note output
  2002. format.url output
  2003. fin.entry
  2004. if.url.std.interword.spacing
  2005. }
  2006. FUNCTION {techreport}
  2007. { std.status.using.comma
  2008. start.entry
  2009. if.url.alt.interword.spacing
  2010. format.authors "author" output.warn
  2011. name.or.dash
  2012. format.article.title "title" output.warn
  2013. format.howpublished "howpublished" bibinfo.check output
  2014. format.institution "institution" bibinfo.warn output
  2015. format.address "address" bibinfo.check output
  2016. format.tech.report.number output.nonnull
  2017. format.date "year" output.warn
  2018. format.note output
  2019. format.url output
  2020. fin.entry
  2021. if.url.std.interword.spacing
  2022. }
  2023. FUNCTION {unpublished}
  2024. { std.status.using.comma
  2025. start.entry
  2026. if.url.alt.interword.spacing
  2027. format.authors "author" output.warn
  2028. name.or.dash
  2029. format.article.title "title" output.warn
  2030. format.date output
  2031. format.note "note" output.warn
  2032. format.url output
  2033. fin.entry
  2034. if.url.std.interword.spacing
  2035. }
  2036. % The special entry type which provides the user interface to the
  2037. % BST controls
  2038. FUNCTION {IEEEtranBSTCTL}
  2039. { is.print.banners.to.terminal
  2040. { "** IEEEtran BST control entry " quote$ * cite$ * quote$ * " detected." *
  2041. top$
  2042. }
  2043. { skip$ }
  2044. if$
  2045. CTLuse_article_number
  2046. empty$
  2047. { skip$ }
  2048. { CTLuse_article_number
  2049. yes.no.to.int
  2050. 'is.use.number.for.article :=
  2051. }
  2052. if$
  2053. CTLuse_paper
  2054. empty$
  2055. { skip$ }
  2056. { CTLuse_paper
  2057. yes.no.to.int
  2058. 'is.use.paper :=
  2059. }
  2060. if$
  2061. CTLuse_forced_etal
  2062. empty$
  2063. { skip$ }
  2064. { CTLuse_forced_etal
  2065. yes.no.to.int
  2066. 'is.forced.et.al :=
  2067. }
  2068. if$
  2069. CTLmax_names_forced_etal
  2070. empty$
  2071. { skip$ }
  2072. { CTLmax_names_forced_etal
  2073. string.to.integer
  2074. 'max.num.names.before.forced.et.al :=
  2075. }
  2076. if$
  2077. CTLnames_show_etal
  2078. empty$
  2079. { skip$ }
  2080. { CTLnames_show_etal
  2081. string.to.integer
  2082. 'num.names.shown.with.forced.et.al :=
  2083. }
  2084. if$
  2085. CTLuse_alt_spacing
  2086. empty$
  2087. { skip$ }
  2088. { CTLuse_alt_spacing
  2089. yes.no.to.int
  2090. 'is.use.alt.interword.spacing :=
  2091. }
  2092. if$
  2093. CTLalt_stretch_factor
  2094. empty$
  2095. { skip$ }
  2096. { CTLalt_stretch_factor
  2097. 'ALTinterwordstretchfactor :=
  2098. "\renewcommand{\BIBentryALTinterwordstretchfactor}{"
  2099. ALTinterwordstretchfactor * "}" *
  2100. write$ newline$
  2101. }
  2102. if$
  2103. CTLdash_repeated_names
  2104. empty$
  2105. { skip$ }
  2106. { CTLdash_repeated_names
  2107. yes.no.to.int
  2108. 'is.dash.repeated.names :=
  2109. }
  2110. if$
  2111. CTLname_format_string
  2112. empty$
  2113. { skip$ }
  2114. { CTLname_format_string
  2115. 'name.format.string :=
  2116. }
  2117. if$
  2118. CTLname_latex_cmd
  2119. empty$
  2120. { skip$ }
  2121. { CTLname_latex_cmd
  2122. 'name.latex.cmd :=
  2123. }
  2124. if$
  2125. CTLname_url_prefix
  2126. missing$
  2127. { skip$ }
  2128. { CTLname_url_prefix
  2129. 'name.url.prefix :=
  2130. }
  2131. if$
  2132. num.names.shown.with.forced.et.al max.num.names.before.forced.et.al >
  2133. { "CTLnames_show_etal cannot be greater than CTLmax_names_forced_etal in " cite$ * warning$
  2134. max.num.names.before.forced.et.al 'num.names.shown.with.forced.et.al :=
  2135. }
  2136. { skip$ }
  2137. if$
  2138. }
  2139. %%%%%%%%%%%%%%%%%%%
  2140. %% ENTRY ALIASES %%
  2141. %%%%%%%%%%%%%%%%%%%
  2142. FUNCTION {conference}{inproceedings}
  2143. FUNCTION {online}{electronic}
  2144. FUNCTION {internet}{electronic}
  2145. FUNCTION {webpage}{electronic}
  2146. FUNCTION {www}{electronic}
  2147. FUNCTION {default.type}{misc}
  2148. %%%%%%%%%%%%%%%%%%
  2149. %% MAIN PROGRAM %%
  2150. %%%%%%%%%%%%%%%%%%
  2151. READ
  2152. EXECUTE {initialize.controls}
  2153. EXECUTE {initialize.status.constants}
  2154. EXECUTE {banner.message}
  2155. EXECUTE {initialize.longest.label}
  2156. ITERATE {longest.label.pass}
  2157. EXECUTE {begin.bib}
  2158. ITERATE {call.type$}
  2159. EXECUTE {end.bib}
  2160. EXECUTE{completed.message}
  2161. %% That's all folks, mds.