From 1a4e53b30ae3d3a430d52b4d70156d683aa1ed50 Mon Sep 17 00:00:00 2001 From: Tom Date: Fri, 24 Jul 2026 17:33:59 +0200 Subject: [PATCH] final presentation, restructure of the repository, updated code to have weighted probabilities and more --- code/Dockerfile | 8 +- code/main.py | 298 +- code/simulator.py | 225 +- .../Boolean Network & Update Schemes.pptx | Bin 0 -> 202050 bytes diff.pdf => finished-docs/diff.pdf | Bin paper.pdf => finished-docs/paper.pdf | Bin 4bit BN.png => paper-source/4bit BN.png | Bin .../IEEE-conference-template.pdf | Bin IEEEabrv.bib => paper-source/IEEEabrv.bib | 894 +-- IEEEtran.bst => paper-source/IEEEtran.bst | 4834 ++++++++--------- IEEEtran.cls => paper-source/IEEEtran.cls | 0 .../IEEEtran_HOWTO.pdf | Bin .../bn_example_table.png | Bin .../bn_repressilator.png | Bin diff.tex => paper-source/diff.tex | 0 .../edge_vs_hyperedge.png | Bin paper.tex => paper-source/paper.tex | 0 references.bib => paper-source/references.bib | 0 .../repressilator_async.pdf | Bin .../repressilator_prob025.pdf | Bin 20 files changed, 3290 insertions(+), 2969 deletions(-) create mode 100644 finished-docs/Boolean Network & Update Schemes.pptx rename diff.pdf => finished-docs/diff.pdf (100%) rename paper.pdf => finished-docs/paper.pdf (100%) rename 4bit BN.png => paper-source/4bit BN.png (100%) rename IEEE-conference-template.pdf => paper-source/IEEE-conference-template.pdf (100%) mode change 100755 => 100644 rename IEEEabrv.bib => paper-source/IEEEabrv.bib (97%) rename IEEEtran.bst => paper-source/IEEEtran.bst (96%) rename IEEEtran.cls => paper-source/IEEEtran.cls (100%) rename IEEEtran_HOWTO.pdf => paper-source/IEEEtran_HOWTO.pdf (100%) rename bn_example_table.png => paper-source/bn_example_table.png (100%) rename bn_repressilator.png => paper-source/bn_repressilator.png (100%) rename diff.tex => paper-source/diff.tex (100%) rename edge_vs_hyperedge.png => paper-source/edge_vs_hyperedge.png (100%) rename paper.tex => paper-source/paper.tex (100%) rename references.bib => paper-source/references.bib (100%) rename repressilator_async.pdf => paper-source/repressilator_async.pdf (100%) rename repressilator_prob025.pdf => paper-source/repressilator_prob025.pdf (100%) diff --git a/code/Dockerfile b/code/Dockerfile index 6df9a97..ce7276c 100644 --- a/code/Dockerfile +++ b/code/Dockerfile @@ -2,10 +2,10 @@ FROM python:3.14-slim WORKDIR /app -COPY ./main.py /app -COPY ./simulator.py /app -COPY ./requirements.txt /app +COPY requirements.txt /app/ -RUN pip install -r requirements.txt +RUN pip install --no-cache-dir -r requirements.txt + +COPY main.py simulator.py /app/ CMD ["python", "main.py"] diff --git a/code/main.py b/code/main.py index 5e47ca1..8e8e42b 100644 --- a/code/main.py +++ b/code/main.py @@ -30,18 +30,6 @@ def Continue(title="") -> None: print() -# def MainMenu() -> None: -# global currentFunction -# options = ["Simulator", "Calculator", "Quit"] -# actions: list[Callable[[], None]] = [SimulatorMenu, StopApplication] - -# selectedIndex = ShowMenu( -# options, title="Boolean Network Simulator\nby Tom Zuidberg" -# ) - -# currentFunction = actions[selectedIndex] - - def StopApplication() -> None: quit() @@ -151,11 +139,14 @@ def BooleanNetworkMenu( functionStrings: list = [None for _ in range(3)] functionsDirtyFlag = False current_highlight = 0 + functions_highlight = 0 + probFunctionStrings: list[list[str]] = [[] for _ in range(3)] if bn is not None and funcStrings is not None and funcs is not None: boolNetwork = bn functions = funcs functionStrings = funcStrings + probFunctionStrings = [[] for _ in range(boolNetwork.size)] def Menu() -> None: nonlocal current_highlight @@ -164,10 +155,7 @@ def BooleanNetworkMenu( f"Set size (current: {boolNetwork.size}) WARNING: this will reset all other options!", f"Set state (current: {str(boolNetwork)[-boolNetwork.size :]})", f"Set update scheme (current: {boolNetwork.updateScheme})", - *[ - f"Set update function of node x{i} (current: {functionStrings[i - 1]})" - for i in range(1, boolNetwork.size + 1) - ], + "Edit update functions", None, "Update once (hold ENTER for continuous updates)", "Update multiple times", @@ -182,7 +170,7 @@ def BooleanNetworkMenu( SetSizeHelper, SetStateHelper, SetUpdateSchemeHelper, - *[partial(SetFunctionHelper, i) for i in range(boolNetwork.size)], + FunctionsMenu, None, UpdateHelper, MultiUpdateHelper, @@ -204,7 +192,7 @@ def BooleanNetworkMenu( actions[selectedIndex]() def SetSizeHelper() -> None: - nonlocal boolNetwork, functions, functionStrings + nonlocal boolNetwork, functions, functionStrings, probFunctionStrings while True: size = input("Set new size (Leave empty to cancel):\n").strip() if size == "": @@ -219,6 +207,7 @@ def BooleanNetworkMenu( boolNetwork = BooleanNetwork(size) functions = [None for _ in range(size)] functionStrings = [None for _ in range(size)] + probFunctionStrings = [[] for _ in range(size)] return def SetStateHelper() -> None: @@ -237,9 +226,32 @@ def BooleanNetworkMenu( print("Invalid input:", e) def SetUpdateSchemeHelper() -> None: - nonlocal boolNetwork + nonlocal boolNetwork, functions, functionStrings, functionsDirtyFlag + + def AdoptFromProbabilistic() -> None: + nonlocal functionsDirtyFlag + + for i in range(boolNetwork.size): + if probFunctionStrings[i]: + funcString = probFunctionStrings[i][0] + func = eval( + "lambda " + + ",".join(f"x{j}" for j in range(1, boolNetwork.size + 1)) + + ":" + + funcString + ) + functions[i] = func + functionStrings[i] = funcString + functionsDirtyFlag = True + + def SwitchToSynchronous() -> None: + wasProbabilistic = boolNetwork.updateScheme == "probabilistic" + boolNetwork.UseSynchronousScheme() + if wasProbabilistic: + AdoptFromProbabilistic() def SetSequentialHelper() -> None: + wasProbabilistic = boolNetwork.updateScheme == "probabilistic" while True: seq = input( "Set sequence. (Leave empty to cancel)\nFormat example: '1,4,3,2'\n" @@ -252,26 +264,24 @@ def BooleanNetworkMenu( try: seq = [int(i) for i in seq] boolNetwork.UseSequentialScheme(seq) + if wasProbabilistic: + AdoptFromProbabilistic() return except Exception as e: print("Invalid input:", e) - def SetProbabilisticHelper() -> None: - while True: - chance = input( - "Set flip chance as float between 0.0 and 1.0. (Leave empty to cancel)\n" - ).strip() - if chance == "": - print("Cancelled") - return + def SwitchToAsyncRandom() -> None: + wasProbabilistic = boolNetwork.updateScheme == "probabilistic" + boolNetwork.UseAsynchronousRandomScheme() + if wasProbabilistic: + AdoptFromProbabilistic() - try: - chance = float(chance) - boolNetwork.UseProbabilisticScheme(chance) - return - - except Exception as e: - print("Invalid input:", e) + def SwitchToProbabilistic() -> None: + for i in range(boolNetwork.size): + if not probFunctionStrings[i] and functions[i] is not None: + boolNetwork.AddProbabilisticFunction(i, functions[i], 1.0) + probFunctionStrings[i].append(functionStrings[i]) + boolNetwork.UseProbabilisticScheme() title = "Select update scheme:" options = [ @@ -282,15 +292,120 @@ def BooleanNetworkMenu( "Cancel", ] actions = [ - lambda: boolNetwork.UseSynchronousScheme(), + SwitchToSynchronous, SetSequentialHelper, - SetProbabilisticHelper, - lambda: boolNetwork.UseAsynchronousRandomScheme(), + SwitchToProbabilistic, + SwitchToAsyncRandom, lambda: None, ] actions[ShowMenu(options=options, title=title)]() + def FunctionsMenu() -> None: + nonlocal functions_highlight + done: bool = False + + def Menu() -> None: + nonlocal functions_highlight + title = "Edit update functions:" + deleteTargets: list = [] + + if boolNetwork.updateScheme in ("synchronous", "sequential", None): + options = [ + *[ + f"Set update function of node x{i} (current: {functionStrings[i - 1]})" + for i in range(1, boolNetwork.size + 1) + ], + None, + "Return", + ] + actions = [ + *[partial(SetFunctionHelper, i) for i in range(boolNetwork.size)], + None, + ReturnHelper, + ] + elif boolNetwork.updateScheme == "asynchronous_random": + options = [ + *[ + f"Set update function of node x{i} (current: {functionStrings[i - 1]})" + for i in range(1, boolNetwork.size + 1) + ], + None, + *[ + f"Set selection weight of node x{i} (current: {boolNetwork.node_selection_weights[i - 1]})" + for i in range(1, boolNetwork.size + 1) + ], + None, + "Return", + ] + actions = [ + *[partial(SetFunctionHelper, i) for i in range(boolNetwork.size)], + None, + *[partial(SetNodeWeightHelper, i) for i in range(boolNetwork.size)], + None, + ReturnHelper, + ] + else: # probabilistic + title = "Edit update functions:\n(highlight a function entry and press 'd' to delete it)" + options = [] + actions = [] + for i in range(boolNetwork.size): + for j in range(len(probFunctionStrings[i])): + options.append( + f"Set update function #{j + 1} of node x{i + 1} (current: {probFunctionStrings[i][j]})" + ) + actions.append(partial(EditProbFunctionHelper, i, j)) + deleteTargets.append((i, j)) + options.append( + f"Set weight of function #{j + 1} of node x{i + 1} (current: {boolNetwork.probabilistic_weights[i][j]})" + ) + actions.append(partial(EditProbWeightHelper, i, j)) + deleteTargets.append(None) + options.append(f"Add new function for node x{i + 1}") + actions.append(partial(AddProbFunctionHelper, i)) + deleteTargets.append(None) + options.append(None) + actions.append(None) + deleteTargets.append(None) + options.append("Return") + actions.append(ReturnHelper) + deleteTargets.append(None) + + if boolNetwork.updateScheme == "probabilistic": + menu = TerminalMenu( + menu_entries=options, + title=title, + multi_select=False, + cursor_index=functions_highlight, + accept_keys=("enter", "d"), + ) + selectedIndex = menu.show() + if selectedIndex is None: + selectedIndex = len(options) - 1 + acceptKey = "enter" + else: + acceptKey = menu.chosen_accept_key + functions_highlight = selectedIndex + + if acceptKey == "d" and deleteTargets[selectedIndex] is not None: + DeleteProbFunctionHelper(*deleteTargets[selectedIndex]) + else: + actions[selectedIndex]() + return + + selectedIndex = ShowMenu( + options=options, title=title, highlight_entry=functions_highlight + ) + functions_highlight = selectedIndex + actions[selectedIndex]() + + def ReturnHelper() -> None: + nonlocal done + done = True + + while not done: + Menu() + def UpdateHelper() -> None: nonlocal functions, boolNetwork, functionsDirtyFlag if functionsDirtyFlag: @@ -377,6 +492,115 @@ def BooleanNetworkMenu( except Exception as e: print("Error while parsing function:", e) + def SetNodeWeightHelper(index: int) -> None: + nonlocal boolNetwork + while True: + weight = input( + f"Set new selection weight for node x{index + 1}. Must be a positive number. (Leave empty to cancel)\n" + ).strip() + if weight == "": + print("Cancelled") + return + try: + weight = float(weight) + boolNetwork.SetNodeSelectionWeight(index, weight) + return + except Exception as e: + print("Invalid input:", e) + + def AddProbFunctionHelper(index: int) -> None: + nonlocal boolNetwork, probFunctionStrings + while True: + funcString = input( + f"Set new function for node x{index + 1}. The function will receive all nodes in form of x1, x2, ..., x[size]. (Leave empty to cancel)\n" + ) + if funcString == "": + print("Cancelled") + return + try: + func = ( + "lambda " + + ",".join(f"x{i}" for i in range(1, boolNetwork.size + 1)) + + ":" + + funcString + ) + func = eval(func) + if not isinstance(func, FunctionType): + print("Please enter a valid function. Got: " + func) + continue + except Exception as e: + print("Error while parsing function:", e) + continue + + weight = 1.0 + weightInput = input( + "Set weight for this function. Must be a positive number. (Leave empty for default 1.0)\n" + ).strip() + if weightInput != "": + try: + weight = float(weightInput) + except ValueError: + print("Invalid weight, using default 1.0") + weight = 1.0 + + try: + boolNetwork.AddProbabilisticFunction(index, func, weight) + probFunctionStrings[index].append(funcString) + return + except Exception as e: + print("Error while adding function:", e) + + def EditProbFunctionHelper(index: int, function_index: int) -> None: + nonlocal boolNetwork, probFunctionStrings + while True: + funcString = input( + f"Set new function for node x{index + 1}, function #{function_index + 1}. (Leave empty to cancel)\n" + ) + if funcString == "": + print("Cancelled") + return + try: + func = ( + "lambda " + + ",".join(f"x{i}" for i in range(1, boolNetwork.size + 1)) + + ":" + + funcString + ) + func = eval(func) + if not isinstance(func, FunctionType): + print("Please enter a valid function. Got: " + func) + continue + boolNetwork.SetProbabilisticFunction(index, function_index, func) + probFunctionStrings[index][function_index] = funcString + return + except Exception as e: + print("Error while parsing function:", e) + + def EditProbWeightHelper(index: int, function_index: int) -> None: + nonlocal boolNetwork + while True: + weight = input( + f"Set new weight for node x{index + 1}, function #{function_index + 1}. Must be a positive number. (Leave empty to cancel)\n" + ).strip() + if weight == "": + print("Cancelled") + return + try: + weight = float(weight) + boolNetwork.SetProbabilisticFunctionWeight(index, function_index, weight) + return + except Exception as e: + print("Invalid input:", e) + + def DeleteProbFunctionHelper(index: int, function_index: int) -> None: + nonlocal boolNetwork, probFunctionStrings + try: + boolNetwork.RemoveProbabilisticFunction(index, function_index) + del probFunctionStrings[index][function_index] + except Exception as e: + print("Error while deleting function:", e) + Continue() + def ToggleWriteToFileHelper(): nonlocal writeToFile writeToFile = not writeToFile diff --git a/code/simulator.py b/code/simulator.py index 3b6717b..1fb327b 100644 --- a/code/simulator.py +++ b/code/simulator.py @@ -7,6 +7,19 @@ import numpy as np import scipy.linalg +def _wrap_bool_function( + function: Callable[Concatenate[bool, ...], bool], +) -> Callable[Concatenate[bool, ...], bool]: + def wrap(*args, **kwargs) -> bool: + result = function(*args, **kwargs) + assert type(result) is bool, ( + f"Function error: Boolean network functions must always return a bool, however got type {type(result)}, {result=}" + ) + return result + + return wrap + + class BooleanNetwork: def __init__(self, size: int) -> None: assert type(size) is int and size > 0, ( @@ -17,8 +30,7 @@ class BooleanNetwork: self.__has_update_functions = False self.__has_update_scheme = False self.__has_sequence = False - self.__has_flip_chance = False - self.flip_chance: float = 0 + self.__has_probabilistic_functions = False self.sequence: list[int] = list() self.seed: int | None = None self.time_step = 0 @@ -29,21 +41,23 @@ class BooleanNetwork: lambda x: x for _ in range(size) ] + # asynchronous_random: relative likelihood that node i is the one picked + # to update on a given time step. Doesn't need to sum to 1 - it is + # normalised (weight_i / sum(weights)) whenever it is used. + self.node_selection_weights: list[float] = [1.0 for _ in range(size)] + + # probabilistic: each node may have any number of candidate update + # functions. On every update, one candidate per node is drawn + # according to its weight (again normalised at use-time, not + # required to sum to 1) and applied synchronously. + self.probabilistic_functions: list[ + list[Callable[Concatenate[bool, ...], bool]] + ] = [list() for _ in range(size)] + self.probabilistic_weights: list[list[float]] = [list() for _ in range(size)] + def SetFunctions( self, functions: Iterable[Callable[Concatenate[bool, ...], bool]] ) -> Self: - def wrapper( - function: Callable[Concatenate[bool, ...], bool], - ) -> Callable[Concatenate[bool, ...], bool]: - def wrap(*args, **kwargs) -> bool: - result = function(*args, **kwargs) - assert type(result) is bool, ( - f"Function error: Boolean network functions must always return a bool, however got type {type(result)}, {result=}" - ) - return result - - return wrap - funcs: list[Callable[Concatenate[bool, ...], bool]] = list(functions) assert len(funcs) == self.size, ( @@ -56,7 +70,7 @@ class BooleanNetwork: f"Function error: Function arg amount mismatch. Given function takes {len(inspect.signature(func).parameters)} arguments, expected {self.size}" ) - self.functions[i] = wrapper(func) + self.functions[i] = _wrap_bool_function(func) self.__has_update_functions = True return self @@ -64,22 +78,101 @@ class BooleanNetwork: def SetFunction( self, index: int, function: Callable[Concatenate[bool, ...], bool] ) -> Self: - def wrapper( - function: Callable[Concatenate[bool, ...], bool], - ) -> Callable[Concatenate[bool, ...], bool]: - def wrap(*args, **kwargs) -> bool: - result = function(*args, **kwargs) - assert type(result) is bool, ( - f"Function error: Boolean network functions must always return a bool, however got type {type(result)}, {result=}" - ) - return result - - return wrap - assert 0 <= index < self.size, ( f"Function error: cannot set function at index {index} - out of bound." ) - self.functions[index] = wrapper(function) + assert len(inspect.signature(function).parameters) == self.size, ( + f"Function error: Function arg amount mismatch. Given function takes {len(inspect.signature(function).parameters)} arguments, expected {self.size}" + ) + self.functions[index] = _wrap_bool_function(function) + return self + + def SetNodeSelectionWeight(self, index: int, weight: float) -> Self: + assert 0 <= index < self.size, ( + f"Weight error: cannot set selection weight at index {index} - out of bound." + ) + assert type(weight) is float and weight > 0, ( + f"Weight error: weight must be a positive float. got {weight=}" + ) + self.node_selection_weights[index] = weight + return self + + def AddProbabilisticFunction( + self, + index: int, + function: Callable[Concatenate[bool, ...], bool], + weight: float = 1.0, + ) -> Self: + assert 0 <= index < self.size, ( + f"Function error: cannot add function at index {index} - out of bound." + ) + assert len(inspect.signature(function).parameters) == self.size, ( + f"Function error: Function arg amount mismatch. Given function takes {len(inspect.signature(function).parameters)} arguments, expected {self.size}" + ) + assert type(weight) is float and weight > 0, ( + f"Weight error: weight must be a positive float. got {weight=}" + ) + + self.probabilistic_functions[index].append(_wrap_bool_function(function)) + self.probabilistic_weights[index].append(weight) + self.__has_probabilistic_functions = all( + len(functions) > 0 for functions in self.probabilistic_functions + ) + return self + + def SetProbabilisticFunction( + self, + index: int, + function_index: int, + function: Callable[Concatenate[bool, ...], bool], + ) -> Self: + assert 0 <= index < self.size, ( + f"Function error: cannot set function at index {index} - out of bound." + ) + assert 0 <= function_index < len(self.probabilistic_functions[index]), ( + f"Function error: node {index} has no function at position {function_index}." + ) + assert len(inspect.signature(function).parameters) == self.size, ( + f"Function error: Function arg amount mismatch. Given function takes {len(inspect.signature(function).parameters)} arguments, expected {self.size}" + ) + + self.probabilistic_functions[index][function_index] = _wrap_bool_function( + function + ) + return self + + def SetProbabilisticFunctionWeight( + self, index: int, function_index: int, weight: float + ) -> Self: + assert 0 <= index < self.size, ( + f"Weight error: cannot set weight at index {index} - out of bound." + ) + assert 0 <= function_index < len(self.probabilistic_weights[index]), ( + f"Weight error: node {index} has no function at position {function_index}." + ) + assert type(weight) is float and weight > 0, ( + f"Weight error: weight must be a positive float. got {weight=}" + ) + + self.probabilistic_weights[index][function_index] = weight + return self + + def RemoveProbabilisticFunction(self, index: int, function_index: int) -> Self: + assert 0 <= index < self.size, ( + f"Function error: cannot remove function at index {index} - out of bound." + ) + assert 0 <= function_index < len(self.probabilistic_functions[index]), ( + f"Function error: node {index} has no function at position {function_index}." + ) + assert len(self.probabilistic_functions[index]) > 1, ( + f"Function error: node {index} must keep at least one probabilistic function." + ) + + del self.probabilistic_functions[index][function_index] + del self.probabilistic_weights[index][function_index] + self.__has_probabilistic_functions = all( + len(functions) > 0 for functions in self.probabilistic_functions + ) return self def UseSynchronousScheme(self) -> Self: @@ -127,16 +220,9 @@ class BooleanNetwork: self.__has_update_scheme = True return self - def UseProbabilisticScheme(self, flip_chance: float) -> Self: - if flip_chance is not None: - assert type(flip_chance) is float, ( - f"Probabilistic error: given flip_chance is not a float: got {flip_chance}" - ) - self.flip_chance = flip_chance - + def UseProbabilisticScheme(self) -> Self: self.updateScheme = "probabilistic" self.__has_update_scheme = True - self.__has_flip_chance = True return self def __synchronous_update(self) -> None: @@ -150,15 +236,21 @@ class BooleanNetwork: self.nodes[i] = self.functions[i](*self.nodes) def __asynchronous_random_update(self) -> None: - index = random.randrange(0, self.size) + index = random.choices( + range(self.size), weights=self.node_selection_weights, k=1 + )[0] self.nodes[index] = self.functions[index](*self.nodes) def __probabilistic_update(self) -> None: - self.__synchronous_update() + temp = list() for i in range(self.size): - rng = random.random() - if rng <= self.flip_chance: - self.nodes[i] = not self.nodes[i] + chosen = random.choices( + self.probabilistic_functions[i], + weights=self.probabilistic_weights[i], + k=1, + )[0] + temp.append(chosen(*self.nodes)) + self.nodes = temp def SetState(self, state: str | list[bool] | tuple[bool, ...]) -> Self: assert isinstance(state, (str, list, tuple)), ( @@ -192,7 +284,9 @@ class BooleanNetwork: assert type(n) is int and n >= 0, ( f"Update error: amount of updates must be an integer and positive. got {n=}" ) - assert self.__has_update_functions, "Update error: no update functions defined" + assert self.updateScheme == "probabilistic" or self.__has_update_functions, ( + "Update error: no update functions defined" + ) assert self.__has_update_scheme, "Update error: no update scheme defined" assert type(verbose) is bool, "Update error: verbose must be a bool" assert type(writeToFile) is bool, "Update error: writeToFile must be a bool" @@ -208,7 +302,9 @@ class BooleanNetwork: case "asynchronous_random": selected_update = self.__asynchronous_random_update case "probabilistic": - assert self.__has_flip_chance, "Update error: no flip_chance defined" + assert self.__has_probabilistic_functions, ( + "Update error: no probabilistic functions defined for every node" + ) selected_update = self.__probabilistic_update case _: raise Exception("Update error: update scheme selection went wrong") @@ -261,36 +357,37 @@ class BooleanNetwork: matrix: np.ndarray = np.zeros((dimension, dimension)) if self.updateScheme == "probabilistic": - flipChance = self.flip_chance - self.UseSynchronousScheme() for i, state in enumerate(product((False, True), repeat=self.size)): - self.SetState(state) - self.Update() - for flips in product((False, True), repeat=self.size): - flipped = int( - "".join( - str( - int( - self.nodes[j] if not flips[j] else not self.nodes[j] - ) - ) - for j in range(self.size) - ), - 2, - ) + choice_ranges = [ + range(len(self.probabilistic_functions[n])) + for n in range(self.size) + ] + for combo in product(*choice_ranges): prob = np.float64(1) - for flip in flips: - prob *= flipChance if flip else 1 - flipChance - matrix[i][flipped] = prob - self.UseProbabilisticScheme(flipChance) + result: list[bool] = [] + for n in range(self.size): + weights = self.probabilistic_weights[n] + total_weight = sum(weights) + chosen_index = combo[n] + prob *= weights[chosen_index] / total_weight + result.append( + self.probabilistic_functions[n][chosen_index](*state) + ) + result_index = int( + "".join(str(int(b)) for b in result), 2 + ) + matrix[i][result_index] += prob return matrix if self.updateScheme == "asynchronous_random": + total_weight = sum(self.node_selection_weights) for i, state in enumerate(product((False, True), repeat=self.size)): for j in range(self.size): self.SetState(state) self.nodes[j] = self.functions[j](*self.nodes) - matrix[i][int(self.state, 2)] += np.float64(1) / self.size + matrix[i][int(self.state, 2)] += ( + np.float64(self.node_selection_weights[j]) / total_weight + ) return matrix for i, state in enumerate(product((False, True), repeat=self.size)): diff --git a/finished-docs/Boolean Network & Update Schemes.pptx b/finished-docs/Boolean Network & Update Schemes.pptx new file mode 100644 index 0000000000000000000000000000000000000000..70e7d06a3d23df1af5d52b2be452a11592883ef9 GIT binary patch literal 202050 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Ȓ(?hqRK37HWsZ{-6)nd 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 literal 0 HcmV?d00001 diff --git a/diff.pdf b/finished-docs/diff.pdf similarity index 100% rename from diff.pdf rename to finished-docs/diff.pdf diff --git a/paper.pdf b/finished-docs/paper.pdf similarity index 100% rename from paper.pdf rename to finished-docs/paper.pdf diff --git a/4bit BN.png b/paper-source/4bit BN.png similarity index 100% rename from 4bit BN.png rename to paper-source/4bit BN.png diff --git a/IEEE-conference-template.pdf b/paper-source/IEEE-conference-template.pdf old mode 100755 new mode 100644 similarity index 100% rename from IEEE-conference-template.pdf rename to paper-source/IEEE-conference-template.pdf diff --git a/IEEEabrv.bib b/paper-source/IEEEabrv.bib similarity index 97% rename from IEEEabrv.bib rename to paper-source/IEEEabrv.bib index f2ea7ba..56cae65 100644 --- a/IEEEabrv.bib +++ b/paper-source/IEEEabrv.bib @@ -1,447 +1,447 @@ - -IEEEabrv.bib -V1.12 (2007/01/11) -Copyright (c) 2002-2007 by Michael Shell -See: http://www.michaelshell.org/ -for current contact information. - -BibTeX bibliography string definitions of the ABBREVIATED titles of -IEEE journals and magazines and online publications. - -This file is designed for bibliography styles that require -abbreviated titles and is not for use in bibliographies that -require full-length titles. - -Support sites: -http://www.michaelshell.org/tex/ieeetran/ -http://www.ctan.org/tex-archive/macros/latex/contrib/IEEEtran/ -and/or -http://www.ieee.org/ - -Special thanks to Laura Hyslop and ken Rawson of IEEE for their help -in obtaining the information needed to compile this file. Also, -Volker Kuhlmann and Moritz Borgmann kindly provided some corrections -and additions. - -************************************************************************* -Legal Notice: -This code is offered as-is without any warranty either expressed or -implied; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE! -User assumes all risk. -In no event shall IEEE or any contributor to this code be liable for -any damages or losses, including, but not limited to, incidental, -consequential, or any other damages, resulting from the use or misuse -of any information contained here. - -All comments are the opinions of their respective authors and are not -necessarily endorsed by the IEEE. - -This work is distributed under the LaTeX Project Public License (LPPL) -( http://www.latex-project.org/ ) version 1.3, and may be freely used, -distributed and modified. A copy of the LPPL, version 1.3, is included -in the base LaTeX documentation of all distributions of LaTeX released -2003/12/01 or later. -Retain all contribution notices and credits. -** Modified files should be clearly indicated as such, including ** -** renaming them and changing author support contact information. ** - -File list of work: IEEEabrv.bib, IEEEfull.bib, IEEEexample.bib, - IEEEtran.bst, IEEEtranS.bst, IEEEtranSA.bst, - IEEEtranN.bst, IEEEtranSN.bst, IEEEtran_bst_HOWTO.pdf -************************************************************************* - - -USAGE: - -\bibliographystyle{mybstfile} -\bibliography{IEEEabrv,mybibfile} - -where the IEEE titles in the .bib database entries use the strings -defined here. e.g., - - - journal = IEEE_J_AC, - - -to yield "{IEEE} Trans. Automat. Contr." - - -IEEE uses abbreviated journal titles in their bibliographies - -this file is suitable for work that is to be submitted to the IEEE. - - -For work that requires full-length titles, you should use the full -titles provided in the companion file, IEEEfull.bib. - - -** NOTES ** - - 1. Journals have been grouped according to subject in order to make it - easier to locate and extract the definitions for related journals - - as most works use references that are confined to a single topic. - Magazines are listed in straight alphabetical order. - - 2. String names are closely based on IEEE's own internal acronyms. - - 3. Abbreviations follow IEEE's style. - - 4. Older, out-of-print IEEE titles are included (but not including titles - dating prior to IEEE's formation from the IRE and AIEE in 1963). - - 5. The following NEW/current journal definitions have been disabled because - their abbreviations have not yet been verified: - - STRING{IEEE_J_CBB = "{IEEE/ACM} Trans. Comput. Biology Bioinformatics"} - STRING{IEEE_J_CJECE = "Canadian J. Elect. Comput. Eng."} - STRING{IEEE_J_DSC = "{IEEE} Trans. Dependable Secure Comput."} - STRING{IEEE_O_DSO = "{IEEE} Distrib. Syst. Online"} - - 6. The following OLD journal definitions have been disabled because - their abbreviations have not yet been found/verified: - - STRING{IEEE_J_BCTV = "{IEEE} Trans. Broadcast Television Receivers"} - STRING{IEEE_J_EWS = "{IEEE} Trans. Eng. Writing Speech"} - -If you know what the proper abbreviation is for a string in #5 or #6 above, -email me and I will correct them in the next release. - - - - - -IEEE Journals - - - -aerospace and military -@STRING{IEEE_J_AES = "{IEEE} Trans. Aerosp. Electron. Syst."} -@STRING{IEEE_J_ANE = "{IEEE} Trans. Aerosp. Navig. Electron."} -@STRING{IEEE_J_ANNE = "{IEEE} Trans. Aeronaut. Navig. Electron."} -@STRING{IEEE_J_AS = "{IEEE} Trans. Aerosp."} -@STRING{IEEE_J_AIRE = "{IEEE} Trans. Airborne Electron."} -@STRING{IEEE_J_MIL = "{IEEE} Trans. Mil. Electron."} - - - -autos, transportation and vehicles (non-aerospace) -@STRING{IEEE_J_ITS = "{IEEE} Trans. Intell. Transp. Syst."} -@STRING{IEEE_J_VT = "{IEEE} Trans. Veh. Technol."} -@STRING{IEEE_J_VC = "{IEEE} Trans. Veh. Commun."} - - - -circuits, signals, systems, audio and controls -@STRING{IEEE_J_SPL = "{IEEE} Signal Process. Lett."} -@STRING{IEEE_J_ASSP = "{IEEE} Trans. Acoust., Speech, Signal Process."} -@STRING{IEEE_J_AU = "{IEEE} Trans. Audio"} -@STRING{IEEE_J_AUEA = "{IEEE} Trans. Audio Electroacoust."} -@STRING{IEEE_J_AC = "{IEEE} Trans. Autom. Control"} -@STRING{IEEE_J_CAS = "{IEEE} Trans. Circuits Syst."} -@STRING{IEEE_J_CASVT = "{IEEE} Trans. Circuits Syst. Video Technol."} -@STRING{IEEE_J_CASI = "{IEEE} Trans. Circuits Syst. {I}"} -@STRING{IEEE_J_CASII = "{IEEE} Trans. Circuits Syst. {II}"} -in 2004 CASI and CASII renamed part title to CASI_RP and CASII_EB, respectively. -@STRING{IEEE_J_CASI_RP = "{IEEE} Trans. Circuits Syst. {I}"} -@STRING{IEEE_J_CASII_EB = "{IEEE} Trans. Circuits Syst. {II}"} -@STRING{IEEE_J_CT = "{IEEE} Trans. Circuit Theory"} -@STRING{IEEE_J_CST = "{IEEE} Trans. Control Syst. Technol."} -@STRING{IEEE_J_SP = "{IEEE} Trans. Signal Process."} -@STRING{IEEE_J_SU = "{IEEE} Trans. Sonics Ultrason."} -@STRING{IEEE_J_SAP = "{IEEE} Trans. Speech Audio Process."} -@STRING{IEEE_J_UE = "{IEEE} Trans. Ultrason. Eng."} -@STRING{IEEE_J_UFFC = "{IEEE} Trans. Ultrason., Ferroelectr., Freq. Control"} - - - -communications -@STRING{IEEE_J_COML = "{IEEE} Commun. Lett."} -@STRING{IEEE_J_JSAC = "{IEEE} J. Sel. Areas Commun."} -@STRING{IEEE_J_COM = "{IEEE} Trans. Commun."} -@STRING{IEEE_J_COMT = "{IEEE} Trans. Commun. Technol."} -@STRING{IEEE_J_WCOM = "{IEEE} Trans. Wireless Commun."} - - - -components, packaging and manufacturing -@STRING{IEEE_J_ADVP = "{IEEE} Trans. Adv. Packag."} -@STRING{IEEE_J_CHMT = "{IEEE} Trans. Compon., Hybrids, Manuf. Technol."} -@STRING{IEEE_J_CPMTA = "{IEEE} Trans. Compon., Packag., Manuf. Technol. {A}"} -@STRING{IEEE_J_CPMTB = "{IEEE} Trans. Compon., Packag., Manuf. Technol. {B}"} -@STRING{IEEE_J_CPMTC = "{IEEE} Trans. Compon., Packag., Manuf. Technol. {C}"} -@STRING{IEEE_J_CAPT = "{IEEE} Trans. Compon. Packag. Technol."} -@STRING{IEEE_J_CAPTS = "{IEEE} Trans. Compon. Packag. Technol."} -@STRING{IEEE_J_CPART = "{IEEE} Trans. Compon. Parts"} -@STRING{IEEE_J_EPM = "{IEEE} Trans. Electron. Packag. Manuf."} -@STRING{IEEE_J_MFT = "{IEEE} Trans. Manuf. Technol."} -@STRING{IEEE_J_PHP = "{IEEE} Trans. Parts, Hybrids, Packag."} -@STRING{IEEE_J_PMP = "{IEEE} Trans. Parts, Mater., Packag."} - - - -CAD -@STRING{IEEE_J_TCAD = "{IEEE} J. Technol. Comput. Aided Design"} -@STRING{IEEE_J_CAD = "{IEEE} Trans. Comput.-Aided Design Integr. Circuits Syst."} - - - -coding, data, information, knowledge -@STRING{IEEE_J_IT = "{IEEE} Trans. Inf. Theory"} -@STRING{IEEE_J_KDE = "{IEEE} Trans. Knowl. Data Eng."} - - - -computers, computation, networking and software -@STRING{IEEE_J_C = "{IEEE} Trans. Comput."} -@STRING{IEEE_J_CAL = "{IEEE} Comput. Archit. Lett."} -disabled till definition is verified -STRING{IEEE_J_DSC = "{IEEE} Trans. Dependable Secure Comput."} -@STRING{IEEE_J_ECOMP = "{IEEE} Trans. Electron. Comput."} -@STRING{IEEE_J_EVC = "{IEEE} Trans. Evol. Comput."} -@STRING{IEEE_J_FUZZ = "{IEEE} Trans. Fuzzy Syst."} -@STRING{IEEE_J_IFS = "{IEEE} Trans. Inf. Forensics Security"} -@STRING{IEEE_J_MC = "{IEEE} Trans. Mobile Comput."} -@STRING{IEEE_J_NET = "{IEEE/ACM} Trans. Netw."} -@STRING{IEEE_J_NN = "{IEEE} Trans. Neural Netw."} -@STRING{IEEE_J_PDS = "{IEEE} Trans. Parallel Distrib. Syst."} -@STRING{IEEE_J_SE = "{IEEE} Trans. Softw. Eng."} - - - -computer graphics, imaging, and multimedia -@STRING{IEEE_J_JDT = "{IEEE/OSA} J. Display Technol."} -@STRING{IEEE_J_IP = "{IEEE} Trans. Image Process."} -@STRING{IEEE_J_MM = "{IEEE} Trans. Multimedia"} -@STRING{IEEE_J_VCG = "{IEEE} Trans. Vis. Comput. Graphics"} - - - -cybernetics, ergonomics, robots, man-machine, and automation -@STRING{IEEE_J_ASE = "{IEEE} Trans. Autom. Sci. Eng."} -@STRING{IEEE_J_JRA = "{IEEE} J. Robot. Autom."} -@STRING{IEEE_J_HFE = "{IEEE} Trans. Hum. Factors Electron."} -@STRING{IEEE_J_MMS = "{IEEE} Trans. Man-Mach. Syst."} -@STRING{IEEE_J_PAMI = "{IEEE} Trans. Pattern Anal. Mach. Intell."} -in 1989 JRA became RA -in August 2004, RA split into ASE and RO -@STRING{IEEE_J_RA = "{IEEE} Trans. Robot. Autom."} -@STRING{IEEE_J_RO = "{IEEE} Trans. Robot."} -@STRING{IEEE_J_SMC = "{IEEE} Trans. Syst., Man, Cybern."} -@STRING{IEEE_J_SMCA = "{IEEE} Trans. Syst., Man, Cybern. {A}"} -@STRING{IEEE_J_SMCB = "{IEEE} Trans. Syst., Man, Cybern. {B}"} -@STRING{IEEE_J_SMCC = "{IEEE} Trans. Syst., Man, Cybern. {C}"} -@STRING{IEEE_J_SSC = "{IEEE} Trans. Syst. Sci. Cybern."} - - - -earth, wind, fire and water -@STRING{IEEE_J_GE = "{IEEE} Trans. Geosci. Electron."} -@STRING{IEEE_J_GRS = "{IEEE} Trans. Geosci. Remote Sens."} -@STRING{IEEE_J_GRSL = "{IEEE} Geosci. Remote Sens. Lett."} -@STRING{IEEE_J_OE = "{IEEE} J. Ocean. Eng."} - - - -education, engineering, history, IEEE, professional -disabled till definition is verified -STRING{IEEE_J_CJECE = "Canadian J. Elect. Comput. Eng."} -@STRING{IEEE_J_PROC = "Proc. {IEEE}"} -@STRING{IEEE_J_EDU = "{IEEE} Trans. Educ."} -@STRING{IEEE_J_EM = "{IEEE} Trans. Eng. Manag."} -disabled till definition is verified -STRING{IEEE_J_EWS = "{IEEE} Trans. Eng. Writing Speech"} -@STRING{IEEE_J_PC = "{IEEE} Trans. Prof. Commun."} - - - -electromagnetics, antennas, EMI, magnetics and microwave -@STRING{IEEE_J_AWPL = "{IEEE} Antennas Wireless Propag. Lett."} -@STRING{IEEE_J_MGWL = "{IEEE} Microw. Guided Wave Lett."} -IEEE seems to want "Compon." here, not "Comp." -@STRING{IEEE_J_MWCL = "{IEEE} Microw. Wireless Compon. Lett."} -@STRING{IEEE_J_AP = "{IEEE} Trans. Antennas Propag."} -@STRING{IEEE_J_EMC = "{IEEE} Trans. Electromagn. Compat."} -@STRING{IEEE_J_MAG = "{IEEE} Trans. Magn."} -@STRING{IEEE_J_MTT = "{IEEE} Trans. Microw. Theory Tech."} -@STRING{IEEE_J_RFI = "{IEEE} Trans. Radio Freq. Interference"} -@STRING{IEEE_J_TJMJ = "{IEEE} Transl. J. Magn. Jpn."} - - - -energy and power -@STRING{IEEE_J_EC = "{IEEE} Trans. Energy Convers."} -@STRING{IEEE_J_PEL = "{IEEE} Power Electron. Lett."} -@STRING{IEEE_J_PWRAS = "{IEEE} Trans. Power App. Syst."} -@STRING{IEEE_J_PWRD = "{IEEE} Trans. Power Del."} -@STRING{IEEE_J_PWRE = "{IEEE} Trans. Power Electron."} -@STRING{IEEE_J_PWRS = "{IEEE} Trans. Power Syst."} - - - -industrial, commercial and consumer -@STRING{IEEE_J_APPIND = "{IEEE} Trans. Appl. Ind."} -@STRING{IEEE_J_BC = "{IEEE} Trans. Broadcast."} -disabled till definition is verified -STRING{IEEE_J_BCTV = "{IEEE} Trans. Broadcast Television Receivers"} -@STRING{IEEE_J_CE = "{IEEE} Trans. Consum. Electron."} -@STRING{IEEE_J_IE = "{IEEE} Trans. Ind. Electron."} -@STRING{IEEE_J_IECI = "{IEEE} Trans. Ind. Electron. Contr. Instrum."} -@STRING{IEEE_J_IA = "{IEEE} Trans. Ind. Appl."} -@STRING{IEEE_J_IGA = "{IEEE} Trans. Ind. Gen. Appl."} -@STRING{IEEE_J_IINF = "{IEEE} Trans. Ind. Informat."} -@STRING{IEEE_J_PSE = "{IEEE} J. Product Safety Eng."} - - - -instrumentation and measurement -@STRING{IEEE_J_IM = "{IEEE} Trans. Instrum. Meas."} - - - -insulation and materials -@STRING{IEEE_J_JEM = "{IEEE/TMS} J. Electron. Mater."} -@STRING{IEEE_J_DEI = "{IEEE} Trans. Dielectr. Electr. Insul."} -@STRING{IEEE_J_EI = "{IEEE} Trans. Electr. Insul."} - - - -mechanical -@STRING{IEEE_J_MECH = "{IEEE/ASME} Trans. Mechatronics"} -@STRING{IEEE_J_MEMS = "J. Microelectromech. Syst."} - - - -medical and biological -@STRING{IEEE_J_BME = "{IEEE} Trans. Biomed. Eng."} -Note: The B-ME journal later dropped the hyphen and became the BME. -@STRING{IEEE_J_B-ME = "{IEEE} Trans. Bio-Med. Eng."} -@STRING{IEEE_J_BMELC = "{IEEE} Trans. Bio-Med. Electron."} -disabled till definition is verified -STRING{IEEE_J_CBB = "{IEEE/ACM} Trans. Comput. Biology Bioinformatics"} -@STRING{IEEE_J_ITBM = "{IEEE} Trans. Inf. Technol. Biomed."} -@STRING{IEEE_J_ME = "{IEEE} Trans. Med. Electron."} -@STRING{IEEE_J_MI = "{IEEE} Trans. Med. Imag."} -@STRING{IEEE_J_NB = "{IEEE} Trans. Nanobiosci."} -@STRING{IEEE_J_NSRE = "{IEEE} Trans. Neural Syst. Rehabil. Eng."} -@STRING{IEEE_J_RE = "{IEEE} Trans. Rehabil. Eng."} - - - - optics, lightwave and photonics -@STRING{IEEE_J_PTL = "{IEEE} Photon. Technol. Lett."} -@STRING{IEEE_J_JLT = "J. Lightw. Technol."} - - - -physics, electrons, nanotechnology, nuclear and quantum electronics -@STRING{IEEE_J_EDL = "{IEEE} Electron Device Lett."} -@STRING{IEEE_J_JQE = "{IEEE} J. Quantum Electron."} -@STRING{IEEE_J_JSTQE = "{IEEE} J. Sel. Topics Quantum Electron."} -@STRING{IEEE_J_ED = "{IEEE} Trans. Electron Devices"} -@STRING{IEEE_J_NANO = "{IEEE} Trans. Nanotechnol."} -@STRING{IEEE_J_NS = "{IEEE} Trans. Nucl. Sci."} -@STRING{IEEE_J_PS = "{IEEE} Trans. Plasma Sci."} - - - -reliability -IEEE seems to want "Mat." here, not "Mater." -@STRING{IEEE_J_DMR = "{IEEE} Trans. Device Mater. Rel."} -@STRING{IEEE_J_R = "{IEEE} Trans. Rel."} - - - -semiconductors, superconductors, electrochemical and solid state -@STRING{IEEE_J_ESSL = "{IEEE/ECS} Electrochem. Solid-State Lett."} -@STRING{IEEE_J_JSSC = "{IEEE} J. Solid-State Circuits"} -@STRING{IEEE_J_ASC = "{IEEE} Trans. Appl. Supercond."} -@STRING{IEEE_J_SM = "{IEEE} Trans. Semicond. Manuf."} - - - -sensors -@STRING{IEEE_J_SENSOR = "{IEEE} Sensors J."} - - - -VLSI -@STRING{IEEE_J_VLSI = "{IEEE} Trans. {VLSI} Syst."} - - - - - - -IEEE Magazines - - - -@STRING{IEEE_M_AES = "{IEEE} Aerosp. Electron. Syst. Mag."} -@STRING{IEEE_M_HIST = "{IEEE} Ann. Hist. Comput."} -@STRING{IEEE_M_AP = "{IEEE} Antennas Propag. Mag."} -@STRING{IEEE_M_ASSP = "{IEEE} {ASSP} Mag."} -@STRING{IEEE_M_CD = "{IEEE} Circuits Devices Mag."} -@STRING{IEEE_M_CAS = "{IEEE} Circuits Syst. Mag."} -@STRING{IEEE_M_COM = "{IEEE} Commun. Mag."} -@STRING{IEEE_M_COMSOC = "{IEEE} Commun. Soc. Mag."} -@STRING{IEEE_M_CIM = "{IEEE} Comput. Intell. Mag."} -CSEM changed to CSE in 1999 -@STRING{IEEE_M_CSE = "{IEEE} Comput. Sci. Eng."} -@STRING{IEEE_M_CSEM = "{IEEE} Comput. Sci. Eng. Mag."} -@STRING{IEEE_M_C = "{IEEE} Computer"} -@STRING{IEEE_M_CAP = "{IEEE} Comput. Appl. Power"} -@STRING{IEEE_M_CGA = "{IEEE} Comput. Graph. Appl."} -@STRING{IEEE_M_CONC = "{IEEE} Concurrency"} -@STRING{IEEE_M_CS = "{IEEE} Control Syst. Mag."} -@STRING{IEEE_M_DTC = "{IEEE} Des. Test. Comput."} -@STRING{IEEE_M_EI = "{IEEE} Electr. Insul. Mag."} -@STRING{IEEE_M_ETR = "{IEEE} ElectroTechnol. Rev."} -@STRING{IEEE_M_EMB = "{IEEE} Eng. Med. Biol. Mag."} -@STRING{IEEE_M_EMR = "{IEEE} Eng. Manag. Rev."} -@STRING{IEEE_M_EXP = "{IEEE} Expert"} -@STRING{IEEE_M_IA = "{IEEE} Ind. Appl. Mag."} -@STRING{IEEE_M_IM = "{IEEE} Instrum. Meas. Mag."} -@STRING{IEEE_M_IS = "{IEEE} Intell. Syst."} -@STRING{IEEE_M_IC = "{IEEE} Internet Comput."} -@STRING{IEEE_M_ITP = "{IEEE} {IT} Prof."} -@STRING{IEEE_M_MICRO = "{IEEE} Micro"} -@STRING{IEEE_M_MW = "{IEEE} Microw. Mag."} -@STRING{IEEE_M_MM = "{IEEE} Multimedia"} -@STRING{IEEE_M_NET = "{IEEE} Netw."} -IEEE's editorial manual lists "Pers. Commun.", -but "Personal Commun. Mag." seems to be what is used in the journals -@STRING{IEEE_M_PCOM = "{IEEE} Personal Commun. Mag."} -@STRING{IEEE_M_POT = "{IEEE} Potentials"} -CAP and PER merged to form PE in 2003 -@STRING{IEEE_M_PE = "{IEEE} Power Energy Mag."} -@STRING{IEEE_M_PER = "{IEEE} Power Eng. Rev."} -@STRING{IEEE_M_PVC = "{IEEE} Pervasive Comput."} -@STRING{IEEE_M_RA = "{IEEE} Robot. Autom. Mag."} -@STRING{IEEE_M_SAP = "{IEEE} Security Privacy"} -@STRING{IEEE_M_SP = "{IEEE} Signal Process. Mag."} -@STRING{IEEE_M_S = "{IEEE} Softw."} -@STRING{IEEE_M_SPECT = "{IEEE} Spectr."} -@STRING{IEEE_M_TS = "{IEEE} Technol. Soc. Mag."} -@STRING{IEEE_M_VT = "{IEEE} Veh. Technol. Mag."} -@STRING{IEEE_M_WC = "{IEEE} Wireless Commun. Mag."} -@STRING{IEEE_M_TODAY = "Today's Engineer"} - - - - - - -IEEE Online Publications - - - -@STRING{IEEE_O_CSTO = "{IEEE} Commun. Surveys Tuts."} -disabled till definition is verified -STRING{IEEE_O_DSO = "{IEEE} Distrib. Syst. Online"} - - - - - --- -EOF + +IEEEabrv.bib +V1.12 (2007/01/11) +Copyright (c) 2002-2007 by Michael Shell +See: http://www.michaelshell.org/ +for current contact information. + +BibTeX bibliography string definitions of the ABBREVIATED titles of +IEEE journals and magazines and online publications. + +This file is designed for bibliography styles that require +abbreviated titles and is not for use in bibliographies that +require full-length titles. + +Support sites: +http://www.michaelshell.org/tex/ieeetran/ +http://www.ctan.org/tex-archive/macros/latex/contrib/IEEEtran/ +and/or +http://www.ieee.org/ + +Special thanks to Laura Hyslop and ken Rawson of IEEE for their help +in obtaining the information needed to compile this file. Also, +Volker Kuhlmann and Moritz Borgmann kindly provided some corrections +and additions. + +************************************************************************* +Legal Notice: +This code is offered as-is without any warranty either expressed or +implied; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE! +User assumes all risk. +In no event shall IEEE or any contributor to this code be liable for +any damages or losses, including, but not limited to, incidental, +consequential, or any other damages, resulting from the use or misuse +of any information contained here. + +All comments are the opinions of their respective authors and are not +necessarily endorsed by the IEEE. + +This work is distributed under the LaTeX Project Public License (LPPL) +( http://www.latex-project.org/ ) version 1.3, and may be freely used, +distributed and modified. A copy of the LPPL, version 1.3, is included +in the base LaTeX documentation of all distributions of LaTeX released +2003/12/01 or later. +Retain all contribution notices and credits. +** Modified files should be clearly indicated as such, including ** +** renaming them and changing author support contact information. ** + +File list of work: IEEEabrv.bib, IEEEfull.bib, IEEEexample.bib, + IEEEtran.bst, IEEEtranS.bst, IEEEtranSA.bst, + IEEEtranN.bst, IEEEtranSN.bst, IEEEtran_bst_HOWTO.pdf +************************************************************************* + + +USAGE: + +\bibliographystyle{mybstfile} +\bibliography{IEEEabrv,mybibfile} + +where the IEEE titles in the .bib database entries use the strings +defined here. e.g., + + + journal = IEEE_J_AC, + + +to yield "{IEEE} Trans. Automat. Contr." + + +IEEE uses abbreviated journal titles in their bibliographies - +this file is suitable for work that is to be submitted to the IEEE. + + +For work that requires full-length titles, you should use the full +titles provided in the companion file, IEEEfull.bib. + + +** NOTES ** + + 1. Journals have been grouped according to subject in order to make it + easier to locate and extract the definitions for related journals - + as most works use references that are confined to a single topic. + Magazines are listed in straight alphabetical order. + + 2. String names are closely based on IEEE's own internal acronyms. + + 3. Abbreviations follow IEEE's style. + + 4. Older, out-of-print IEEE titles are included (but not including titles + dating prior to IEEE's formation from the IRE and AIEE in 1963). + + 5. The following NEW/current journal definitions have been disabled because + their abbreviations have not yet been verified: + + STRING{IEEE_J_CBB = "{IEEE/ACM} Trans. Comput. Biology Bioinformatics"} + STRING{IEEE_J_CJECE = "Canadian J. Elect. Comput. Eng."} + STRING{IEEE_J_DSC = "{IEEE} Trans. Dependable Secure Comput."} + STRING{IEEE_O_DSO = "{IEEE} Distrib. Syst. Online"} + + 6. The following OLD journal definitions have been disabled because + their abbreviations have not yet been found/verified: + + STRING{IEEE_J_BCTV = "{IEEE} Trans. Broadcast Television Receivers"} + STRING{IEEE_J_EWS = "{IEEE} Trans. Eng. Writing Speech"} + +If you know what the proper abbreviation is for a string in #5 or #6 above, +email me and I will correct them in the next release. + + + + + +IEEE Journals + + + +aerospace and military +@STRING{IEEE_J_AES = "{IEEE} Trans. Aerosp. Electron. Syst."} +@STRING{IEEE_J_ANE = "{IEEE} Trans. Aerosp. Navig. Electron."} +@STRING{IEEE_J_ANNE = "{IEEE} Trans. Aeronaut. Navig. Electron."} +@STRING{IEEE_J_AS = "{IEEE} Trans. Aerosp."} +@STRING{IEEE_J_AIRE = "{IEEE} Trans. Airborne Electron."} +@STRING{IEEE_J_MIL = "{IEEE} Trans. Mil. Electron."} + + + +autos, transportation and vehicles (non-aerospace) +@STRING{IEEE_J_ITS = "{IEEE} Trans. Intell. Transp. Syst."} +@STRING{IEEE_J_VT = "{IEEE} Trans. Veh. Technol."} +@STRING{IEEE_J_VC = "{IEEE} Trans. Veh. Commun."} + + + +circuits, signals, systems, audio and controls +@STRING{IEEE_J_SPL = "{IEEE} Signal Process. Lett."} +@STRING{IEEE_J_ASSP = "{IEEE} Trans. Acoust., Speech, Signal Process."} +@STRING{IEEE_J_AU = "{IEEE} Trans. Audio"} +@STRING{IEEE_J_AUEA = "{IEEE} Trans. Audio Electroacoust."} +@STRING{IEEE_J_AC = "{IEEE} Trans. Autom. Control"} +@STRING{IEEE_J_CAS = "{IEEE} Trans. Circuits Syst."} +@STRING{IEEE_J_CASVT = "{IEEE} Trans. Circuits Syst. Video Technol."} +@STRING{IEEE_J_CASI = "{IEEE} Trans. Circuits Syst. {I}"} +@STRING{IEEE_J_CASII = "{IEEE} Trans. Circuits Syst. {II}"} +in 2004 CASI and CASII renamed part title to CASI_RP and CASII_EB, respectively. +@STRING{IEEE_J_CASI_RP = "{IEEE} Trans. Circuits Syst. {I}"} +@STRING{IEEE_J_CASII_EB = "{IEEE} Trans. Circuits Syst. {II}"} +@STRING{IEEE_J_CT = "{IEEE} Trans. Circuit Theory"} +@STRING{IEEE_J_CST = "{IEEE} Trans. Control Syst. Technol."} +@STRING{IEEE_J_SP = "{IEEE} Trans. Signal Process."} +@STRING{IEEE_J_SU = "{IEEE} Trans. Sonics Ultrason."} +@STRING{IEEE_J_SAP = "{IEEE} Trans. Speech Audio Process."} +@STRING{IEEE_J_UE = "{IEEE} Trans. Ultrason. Eng."} +@STRING{IEEE_J_UFFC = "{IEEE} Trans. Ultrason., Ferroelectr., Freq. Control"} + + + +communications +@STRING{IEEE_J_COML = "{IEEE} Commun. Lett."} +@STRING{IEEE_J_JSAC = "{IEEE} J. Sel. Areas Commun."} +@STRING{IEEE_J_COM = "{IEEE} Trans. Commun."} +@STRING{IEEE_J_COMT = "{IEEE} Trans. Commun. Technol."} +@STRING{IEEE_J_WCOM = "{IEEE} Trans. Wireless Commun."} + + + +components, packaging and manufacturing +@STRING{IEEE_J_ADVP = "{IEEE} Trans. Adv. Packag."} +@STRING{IEEE_J_CHMT = "{IEEE} Trans. Compon., Hybrids, Manuf. Technol."} +@STRING{IEEE_J_CPMTA = "{IEEE} Trans. Compon., Packag., Manuf. Technol. {A}"} +@STRING{IEEE_J_CPMTB = "{IEEE} Trans. Compon., Packag., Manuf. Technol. {B}"} +@STRING{IEEE_J_CPMTC = "{IEEE} Trans. Compon., Packag., Manuf. Technol. {C}"} +@STRING{IEEE_J_CAPT = "{IEEE} Trans. Compon. Packag. Technol."} +@STRING{IEEE_J_CAPTS = "{IEEE} Trans. Compon. Packag. Technol."} +@STRING{IEEE_J_CPART = "{IEEE} Trans. Compon. Parts"} +@STRING{IEEE_J_EPM = "{IEEE} Trans. Electron. Packag. Manuf."} +@STRING{IEEE_J_MFT = "{IEEE} Trans. Manuf. Technol."} +@STRING{IEEE_J_PHP = "{IEEE} Trans. Parts, Hybrids, Packag."} +@STRING{IEEE_J_PMP = "{IEEE} Trans. Parts, Mater., Packag."} + + + +CAD +@STRING{IEEE_J_TCAD = "{IEEE} J. Technol. Comput. Aided Design"} +@STRING{IEEE_J_CAD = "{IEEE} Trans. Comput.-Aided Design Integr. Circuits Syst."} + + + +coding, data, information, knowledge +@STRING{IEEE_J_IT = "{IEEE} Trans. Inf. Theory"} +@STRING{IEEE_J_KDE = "{IEEE} Trans. Knowl. Data Eng."} + + + +computers, computation, networking and software +@STRING{IEEE_J_C = "{IEEE} Trans. Comput."} +@STRING{IEEE_J_CAL = "{IEEE} Comput. Archit. Lett."} +disabled till definition is verified +STRING{IEEE_J_DSC = "{IEEE} Trans. Dependable Secure Comput."} +@STRING{IEEE_J_ECOMP = "{IEEE} Trans. Electron. Comput."} +@STRING{IEEE_J_EVC = "{IEEE} Trans. Evol. Comput."} +@STRING{IEEE_J_FUZZ = "{IEEE} Trans. Fuzzy Syst."} +@STRING{IEEE_J_IFS = "{IEEE} Trans. Inf. Forensics Security"} +@STRING{IEEE_J_MC = "{IEEE} Trans. Mobile Comput."} +@STRING{IEEE_J_NET = "{IEEE/ACM} Trans. Netw."} +@STRING{IEEE_J_NN = "{IEEE} Trans. Neural Netw."} +@STRING{IEEE_J_PDS = "{IEEE} Trans. Parallel Distrib. Syst."} +@STRING{IEEE_J_SE = "{IEEE} Trans. Softw. Eng."} + + + +computer graphics, imaging, and multimedia +@STRING{IEEE_J_JDT = "{IEEE/OSA} J. Display Technol."} +@STRING{IEEE_J_IP = "{IEEE} Trans. Image Process."} +@STRING{IEEE_J_MM = "{IEEE} Trans. Multimedia"} +@STRING{IEEE_J_VCG = "{IEEE} Trans. Vis. Comput. Graphics"} + + + +cybernetics, ergonomics, robots, man-machine, and automation +@STRING{IEEE_J_ASE = "{IEEE} Trans. Autom. Sci. Eng."} +@STRING{IEEE_J_JRA = "{IEEE} J. Robot. Autom."} +@STRING{IEEE_J_HFE = "{IEEE} Trans. Hum. Factors Electron."} +@STRING{IEEE_J_MMS = "{IEEE} Trans. Man-Mach. Syst."} +@STRING{IEEE_J_PAMI = "{IEEE} Trans. Pattern Anal. Mach. Intell."} +in 1989 JRA became RA +in August 2004, RA split into ASE and RO +@STRING{IEEE_J_RA = "{IEEE} Trans. Robot. Autom."} +@STRING{IEEE_J_RO = "{IEEE} Trans. Robot."} +@STRING{IEEE_J_SMC = "{IEEE} Trans. Syst., Man, Cybern."} +@STRING{IEEE_J_SMCA = "{IEEE} Trans. Syst., Man, Cybern. {A}"} +@STRING{IEEE_J_SMCB = "{IEEE} Trans. Syst., Man, Cybern. {B}"} +@STRING{IEEE_J_SMCC = "{IEEE} Trans. Syst., Man, Cybern. {C}"} +@STRING{IEEE_J_SSC = "{IEEE} Trans. Syst. Sci. Cybern."} + + + +earth, wind, fire and water +@STRING{IEEE_J_GE = "{IEEE} Trans. Geosci. Electron."} +@STRING{IEEE_J_GRS = "{IEEE} Trans. Geosci. Remote Sens."} +@STRING{IEEE_J_GRSL = "{IEEE} Geosci. Remote Sens. Lett."} +@STRING{IEEE_J_OE = "{IEEE} J. Ocean. Eng."} + + + +education, engineering, history, IEEE, professional +disabled till definition is verified +STRING{IEEE_J_CJECE = "Canadian J. Elect. Comput. Eng."} +@STRING{IEEE_J_PROC = "Proc. {IEEE}"} +@STRING{IEEE_J_EDU = "{IEEE} Trans. Educ."} +@STRING{IEEE_J_EM = "{IEEE} Trans. Eng. Manag."} +disabled till definition is verified +STRING{IEEE_J_EWS = "{IEEE} Trans. Eng. Writing Speech"} +@STRING{IEEE_J_PC = "{IEEE} Trans. Prof. Commun."} + + + +electromagnetics, antennas, EMI, magnetics and microwave +@STRING{IEEE_J_AWPL = "{IEEE} Antennas Wireless Propag. Lett."} +@STRING{IEEE_J_MGWL = "{IEEE} Microw. Guided Wave Lett."} +IEEE seems to want "Compon." here, not "Comp." +@STRING{IEEE_J_MWCL = "{IEEE} Microw. Wireless Compon. Lett."} +@STRING{IEEE_J_AP = "{IEEE} Trans. Antennas Propag."} +@STRING{IEEE_J_EMC = "{IEEE} Trans. Electromagn. Compat."} +@STRING{IEEE_J_MAG = "{IEEE} Trans. Magn."} +@STRING{IEEE_J_MTT = "{IEEE} Trans. Microw. Theory Tech."} +@STRING{IEEE_J_RFI = "{IEEE} Trans. Radio Freq. Interference"} +@STRING{IEEE_J_TJMJ = "{IEEE} Transl. J. Magn. Jpn."} + + + +energy and power +@STRING{IEEE_J_EC = "{IEEE} Trans. Energy Convers."} +@STRING{IEEE_J_PEL = "{IEEE} Power Electron. Lett."} +@STRING{IEEE_J_PWRAS = "{IEEE} Trans. Power App. Syst."} +@STRING{IEEE_J_PWRD = "{IEEE} Trans. Power Del."} +@STRING{IEEE_J_PWRE = "{IEEE} Trans. Power Electron."} +@STRING{IEEE_J_PWRS = "{IEEE} Trans. Power Syst."} + + + +industrial, commercial and consumer +@STRING{IEEE_J_APPIND = "{IEEE} Trans. Appl. Ind."} +@STRING{IEEE_J_BC = "{IEEE} Trans. Broadcast."} +disabled till definition is verified +STRING{IEEE_J_BCTV = "{IEEE} Trans. Broadcast Television Receivers"} +@STRING{IEEE_J_CE = "{IEEE} Trans. Consum. Electron."} +@STRING{IEEE_J_IE = "{IEEE} Trans. Ind. Electron."} +@STRING{IEEE_J_IECI = "{IEEE} Trans. Ind. Electron. Contr. Instrum."} +@STRING{IEEE_J_IA = "{IEEE} Trans. Ind. Appl."} +@STRING{IEEE_J_IGA = "{IEEE} Trans. Ind. Gen. Appl."} +@STRING{IEEE_J_IINF = "{IEEE} Trans. Ind. Informat."} +@STRING{IEEE_J_PSE = "{IEEE} J. Product Safety Eng."} + + + +instrumentation and measurement +@STRING{IEEE_J_IM = "{IEEE} Trans. Instrum. Meas."} + + + +insulation and materials +@STRING{IEEE_J_JEM = "{IEEE/TMS} J. Electron. Mater."} +@STRING{IEEE_J_DEI = "{IEEE} Trans. Dielectr. Electr. Insul."} +@STRING{IEEE_J_EI = "{IEEE} Trans. Electr. Insul."} + + + +mechanical +@STRING{IEEE_J_MECH = "{IEEE/ASME} Trans. Mechatronics"} +@STRING{IEEE_J_MEMS = "J. Microelectromech. Syst."} + + + +medical and biological +@STRING{IEEE_J_BME = "{IEEE} Trans. Biomed. Eng."} +Note: The B-ME journal later dropped the hyphen and became the BME. +@STRING{IEEE_J_B-ME = "{IEEE} Trans. Bio-Med. Eng."} +@STRING{IEEE_J_BMELC = "{IEEE} Trans. Bio-Med. Electron."} +disabled till definition is verified +STRING{IEEE_J_CBB = "{IEEE/ACM} Trans. Comput. Biology Bioinformatics"} +@STRING{IEEE_J_ITBM = "{IEEE} Trans. Inf. Technol. Biomed."} +@STRING{IEEE_J_ME = "{IEEE} Trans. Med. Electron."} +@STRING{IEEE_J_MI = "{IEEE} Trans. Med. Imag."} +@STRING{IEEE_J_NB = "{IEEE} Trans. Nanobiosci."} +@STRING{IEEE_J_NSRE = "{IEEE} Trans. Neural Syst. Rehabil. Eng."} +@STRING{IEEE_J_RE = "{IEEE} Trans. Rehabil. Eng."} + + + + optics, lightwave and photonics +@STRING{IEEE_J_PTL = "{IEEE} Photon. Technol. Lett."} +@STRING{IEEE_J_JLT = "J. Lightw. Technol."} + + + +physics, electrons, nanotechnology, nuclear and quantum electronics +@STRING{IEEE_J_EDL = "{IEEE} Electron Device Lett."} +@STRING{IEEE_J_JQE = "{IEEE} J. Quantum Electron."} +@STRING{IEEE_J_JSTQE = "{IEEE} J. Sel. Topics Quantum Electron."} +@STRING{IEEE_J_ED = "{IEEE} Trans. Electron Devices"} +@STRING{IEEE_J_NANO = "{IEEE} Trans. Nanotechnol."} +@STRING{IEEE_J_NS = "{IEEE} Trans. Nucl. Sci."} +@STRING{IEEE_J_PS = "{IEEE} Trans. Plasma Sci."} + + + +reliability +IEEE seems to want "Mat." here, not "Mater." +@STRING{IEEE_J_DMR = "{IEEE} Trans. Device Mater. Rel."} +@STRING{IEEE_J_R = "{IEEE} Trans. Rel."} + + + +semiconductors, superconductors, electrochemical and solid state +@STRING{IEEE_J_ESSL = "{IEEE/ECS} Electrochem. Solid-State Lett."} +@STRING{IEEE_J_JSSC = "{IEEE} J. Solid-State Circuits"} +@STRING{IEEE_J_ASC = "{IEEE} Trans. Appl. Supercond."} +@STRING{IEEE_J_SM = "{IEEE} Trans. Semicond. Manuf."} + + + +sensors +@STRING{IEEE_J_SENSOR = "{IEEE} Sensors J."} + + + +VLSI +@STRING{IEEE_J_VLSI = "{IEEE} Trans. {VLSI} Syst."} + + + + + + +IEEE Magazines + + + +@STRING{IEEE_M_AES = "{IEEE} Aerosp. Electron. Syst. Mag."} +@STRING{IEEE_M_HIST = "{IEEE} Ann. Hist. Comput."} +@STRING{IEEE_M_AP = "{IEEE} Antennas Propag. Mag."} +@STRING{IEEE_M_ASSP = "{IEEE} {ASSP} Mag."} +@STRING{IEEE_M_CD = "{IEEE} Circuits Devices Mag."} +@STRING{IEEE_M_CAS = "{IEEE} Circuits Syst. Mag."} +@STRING{IEEE_M_COM = "{IEEE} Commun. Mag."} +@STRING{IEEE_M_COMSOC = "{IEEE} Commun. Soc. Mag."} +@STRING{IEEE_M_CIM = "{IEEE} Comput. Intell. Mag."} +CSEM changed to CSE in 1999 +@STRING{IEEE_M_CSE = "{IEEE} Comput. Sci. Eng."} +@STRING{IEEE_M_CSEM = "{IEEE} Comput. Sci. Eng. Mag."} +@STRING{IEEE_M_C = "{IEEE} Computer"} +@STRING{IEEE_M_CAP = "{IEEE} Comput. Appl. Power"} +@STRING{IEEE_M_CGA = "{IEEE} Comput. Graph. Appl."} +@STRING{IEEE_M_CONC = "{IEEE} Concurrency"} +@STRING{IEEE_M_CS = "{IEEE} Control Syst. Mag."} +@STRING{IEEE_M_DTC = "{IEEE} Des. Test. Comput."} +@STRING{IEEE_M_EI = "{IEEE} Electr. Insul. Mag."} +@STRING{IEEE_M_ETR = "{IEEE} ElectroTechnol. Rev."} +@STRING{IEEE_M_EMB = "{IEEE} Eng. Med. Biol. Mag."} +@STRING{IEEE_M_EMR = "{IEEE} Eng. Manag. Rev."} +@STRING{IEEE_M_EXP = "{IEEE} Expert"} +@STRING{IEEE_M_IA = "{IEEE} Ind. Appl. Mag."} +@STRING{IEEE_M_IM = "{IEEE} Instrum. Meas. Mag."} +@STRING{IEEE_M_IS = "{IEEE} Intell. Syst."} +@STRING{IEEE_M_IC = "{IEEE} Internet Comput."} +@STRING{IEEE_M_ITP = "{IEEE} {IT} Prof."} +@STRING{IEEE_M_MICRO = "{IEEE} Micro"} +@STRING{IEEE_M_MW = "{IEEE} Microw. Mag."} +@STRING{IEEE_M_MM = "{IEEE} Multimedia"} +@STRING{IEEE_M_NET = "{IEEE} Netw."} +IEEE's editorial manual lists "Pers. Commun.", +but "Personal Commun. Mag." seems to be what is used in the journals +@STRING{IEEE_M_PCOM = "{IEEE} Personal Commun. Mag."} +@STRING{IEEE_M_POT = "{IEEE} Potentials"} +CAP and PER merged to form PE in 2003 +@STRING{IEEE_M_PE = "{IEEE} Power Energy Mag."} +@STRING{IEEE_M_PER = "{IEEE} Power Eng. Rev."} +@STRING{IEEE_M_PVC = "{IEEE} Pervasive Comput."} +@STRING{IEEE_M_RA = "{IEEE} Robot. Autom. Mag."} +@STRING{IEEE_M_SAP = "{IEEE} Security Privacy"} +@STRING{IEEE_M_SP = "{IEEE} Signal Process. Mag."} +@STRING{IEEE_M_S = "{IEEE} Softw."} +@STRING{IEEE_M_SPECT = "{IEEE} Spectr."} +@STRING{IEEE_M_TS = "{IEEE} Technol. Soc. Mag."} +@STRING{IEEE_M_VT = "{IEEE} Veh. Technol. Mag."} +@STRING{IEEE_M_WC = "{IEEE} Wireless Commun. Mag."} +@STRING{IEEE_M_TODAY = "Today's Engineer"} + + + + + + +IEEE Online Publications + + + +@STRING{IEEE_O_CSTO = "{IEEE} Commun. Surveys Tuts."} +disabled till definition is verified +STRING{IEEE_O_DSO = "{IEEE} Distrib. Syst. Online"} + + + + + +-- +EOF diff --git a/IEEEtran.bst b/paper-source/IEEEtran.bst similarity index 96% rename from IEEEtran.bst rename to paper-source/IEEEtran.bst index 4b84127..53fbc03 100644 --- a/IEEEtran.bst +++ b/paper-source/IEEEtran.bst @@ -1,2417 +1,2417 @@ -%% -%% IEEEtran.bst -%% BibTeX Bibliography Style file for IEEE Journals and Conferences (unsorted) -%% Version 1.12 (2007/01/11) -%% -%% Copyright (c) 2003-2007 Michael Shell -%% -%% Original starting code base and algorithms obtained from the output of -%% Patrick W. Daly's makebst package as well as from prior versions of -%% IEEE BibTeX styles: -%% -%% 1. Howard Trickey and Oren Patashnik's ieeetr.bst (1985/1988) -%% 2. Silvano Balemi and Richard H. Roy's IEEEbib.bst (1993) -%% -%% Support sites: -%% http://www.michaelshell.org/tex/ieeetran/ -%% http://www.ctan.org/tex-archive/macros/latex/contrib/IEEEtran/ -%% and/or -%% http://www.ieee.org/ -%% -%% For use with BibTeX version 0.99a or later -%% -%% This is a numerical citation style. -%% -%%************************************************************************* -%% Legal Notice: -%% This code is offered as-is without any warranty either expressed or -%% implied; without even the implied warranty of MERCHANTABILITY or -%% FITNESS FOR A PARTICULAR PURPOSE! -%% User assumes all risk. -%% In no event shall IEEE or any contributor to this code be liable for -%% any damages or losses, including, but not limited to, incidental, -%% consequential, or any other damages, resulting from the use or misuse -%% of any information contained here. -%% -%% All comments are the opinions of their respective authors and are not -%% necessarily endorsed by the IEEE. -%% -%% This work is distributed under the LaTeX Project Public License (LPPL) -%% ( http://www.latex-project.org/ ) version 1.3, and may be freely used, -%% distributed and modified. A copy of the LPPL, version 1.3, is included -%% in the base LaTeX documentation of all distributions of LaTeX released -%% 2003/12/01 or later. -%% Retain all contribution notices and credits. -%% ** Modified files should be clearly indicated as such, including ** -%% ** renaming them and changing author support contact information. ** -%% -%% File list of work: IEEEabrv.bib, IEEEfull.bib, IEEEexample.bib, -%% IEEEtran.bst, IEEEtranS.bst, IEEEtranSA.bst, -%% IEEEtranN.bst, IEEEtranSN.bst, IEEEtran_bst_HOWTO.pdf -%%************************************************************************* -% -% -% Changelog: -% -% 1.00 (2002/08/13) Initial release -% -% 1.10 (2002/09/27) -% 1. Corrected minor bug for improperly formed warning message when a -% book was not given a title. Thanks to Ming Kin Lai for reporting this. -% 2. Added support for CTLname_format_string and CTLname_latex_cmd fields -% in the BST control entry type. -% -% 1.11 (2003/04/02) -% 1. Fixed bug with URLs containing underscores when using url.sty. Thanks -% to Ming Kin Lai for reporting this. -% -% 1.12 (2007/01/11) -% 1. Fixed bug with unwanted comma before "et al." when an entry contained -% more than two author names. Thanks to Pallav Gupta for reporting this. -% 2. Fixed bug with anomalous closing quote in tech reports that have a -% type, but without a number or address. Thanks to Mehrdad Mirreza for -% reporting this. -% 3. Use braces in \providecommand in begin.bib to better support -% latex2html. TeX style length assignments OK with recent versions -% of latex2html - 1.71 (2002/2/1) or later is strongly recommended. -% Use of the language field still causes trouble with latex2html. -% Thanks to Federico Beffa for reporting this. -% 4. Added IEEEtran.bst ID and version comment string to .bbl output. -% 5. Provide a \BIBdecl hook that allows the user to execute commands -% just prior to the first entry. -% 6. Use default urlstyle (is using url.sty) of "same" rather than rm to -% better work with a wider variety of bibliography styles. -% 7. Changed month abbreviations from Sept., July and June to Sep., Jul., -% and Jun., respectively, as IEEE now does. Thanks to Moritz Borgmann -% for reporting this. -% 8. Control entry types should not be considered when calculating longest -% label width. -% 9. Added alias www for electronic/online. -% 10. Added CTLname_url_prefix control entry type. - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% DEFAULTS FOR THE CONTROLS OF THE BST STYLE %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% These are the defaults for the user adjustable controls. The values used -% here can be overridden by the user via IEEEtranBSTCTL entry type. - -% NOTE: The recommended LaTeX command to invoke a control entry type is: -% -%\makeatletter -%\def\bstctlcite{\@ifnextchar[{\@bstctlcite}{\@bstctlcite[@auxout]}} -%\def\@bstctlcite[#1]#2{\@bsphack -% \@for\@citeb:=#2\do{% -% \edef\@citeb{\expandafter\@firstofone\@citeb}% -% \if@filesw\immediate\write\csname #1\endcsname{\string\citation{\@citeb}}\fi}% -% \@esphack} -%\makeatother -% -% It is called at the start of the document, before the first \cite, like: -% \bstctlcite{IEEEexample:BSTcontrol} -% -% IEEEtran.cls V1.6 and later does provide this command. - - - -% #0 turns off the display of the number for articles. -% #1 enables -FUNCTION {default.is.use.number.for.article} { #1 } - - -% #0 turns off the display of the paper and type fields in @inproceedings. -% #1 enables -FUNCTION {default.is.use.paper} { #1 } - - -% #0 turns off the forced use of "et al." -% #1 enables -FUNCTION {default.is.forced.et.al} { #0 } - -% The maximum number of names that can be present beyond which an "et al." -% usage is forced. Be sure that num.names.shown.with.forced.et.al (below) -% is not greater than this value! -% Note: There are many instances of references in IEEE journals which have -% a very large number of authors as well as instances in which "et al." is -% used profusely. -FUNCTION {default.max.num.names.before.forced.et.al} { #10 } - -% The number of names that will be shown with a forced "et al.". -% Must be less than or equal to max.num.names.before.forced.et.al -FUNCTION {default.num.names.shown.with.forced.et.al} { #1 } - - -% #0 turns off the alternate interword spacing for entries with URLs. -% #1 enables -FUNCTION {default.is.use.alt.interword.spacing} { #1 } - -% If alternate interword spacing for entries with URLs is enabled, this is -% the interword spacing stretch factor that will be used. For example, the -% default "4" here means that the interword spacing in entries with URLs can -% stretch to four times normal. Does not have to be an integer. Note that -% the value specified here can be overridden by the user in their LaTeX -% code via a command such as: -% "\providecommand\BIBentryALTinterwordstretchfactor{1.5}" in addition to -% that via the IEEEtranBSTCTL entry type. -FUNCTION {default.ALTinterwordstretchfactor} { "4" } - - -% #0 turns off the "dashification" of repeated (i.e., identical to those -% of the previous entry) names. IEEE normally does this. -% #1 enables -FUNCTION {default.is.dash.repeated.names} { #1 } - - -% The default name format control string. -FUNCTION {default.name.format.string}{ "{f.~}{vv~}{ll}{, jj}" } - - -% The default LaTeX font command for the names. -FUNCTION {default.name.latex.cmd}{ "" } - - -% The default URL prefix. -FUNCTION {default.name.url.prefix}{ "[Online]. Available:" } - - -% Other controls that cannot be accessed via IEEEtranBSTCTL entry type. - -% #0 turns off the terminal startup banner/completed message so as to -% operate more quietly. -% #1 enables -FUNCTION {is.print.banners.to.terminal} { #1 } - - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% FILE VERSION AND BANNER %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -FUNCTION{bst.file.version} { "1.12" } -FUNCTION{bst.file.date} { "2007/01/11" } -FUNCTION{bst.file.website} { "http://www.michaelshell.org/tex/ieeetran/bibtex/" } - -FUNCTION {banner.message} -{ is.print.banners.to.terminal - { "-- IEEEtran.bst version" " " * bst.file.version * - " (" * bst.file.date * ") " * "by Michael Shell." * - top$ - "-- " bst.file.website * - top$ - "-- See the " quote$ * "IEEEtran_bst_HOWTO.pdf" * quote$ * " manual for usage information." * - top$ - } - { skip$ } - if$ -} - -FUNCTION {completed.message} -{ is.print.banners.to.terminal - { "" - top$ - "Done." - top$ - } - { skip$ } - if$ -} - - - - -%%%%%%%%%%%%%%%%%%%%%% -%% STRING CONSTANTS %% -%%%%%%%%%%%%%%%%%%%%%% - -FUNCTION {bbl.and}{ "and" } -FUNCTION {bbl.etal}{ "et~al." } -FUNCTION {bbl.editors}{ "eds." } -FUNCTION {bbl.editor}{ "ed." } -FUNCTION {bbl.edition}{ "ed." } -FUNCTION {bbl.volume}{ "vol." } -FUNCTION {bbl.of}{ "of" } -FUNCTION {bbl.number}{ "no." } -FUNCTION {bbl.in}{ "in" } -FUNCTION {bbl.pages}{ "pp." } -FUNCTION {bbl.page}{ "p." } -FUNCTION {bbl.chapter}{ "ch." } -FUNCTION {bbl.paper}{ "paper" } -FUNCTION {bbl.part}{ "pt." } -FUNCTION {bbl.patent}{ "Patent" } -FUNCTION {bbl.patentUS}{ "U.S." } -FUNCTION {bbl.revision}{ "Rev." } -FUNCTION {bbl.series}{ "ser." } -FUNCTION {bbl.standard}{ "Std." } -FUNCTION {bbl.techrep}{ "Tech. Rep." } -FUNCTION {bbl.mthesis}{ "Master's thesis" } -FUNCTION {bbl.phdthesis}{ "Ph.D. dissertation" } -FUNCTION {bbl.st}{ "st" } -FUNCTION {bbl.nd}{ "nd" } -FUNCTION {bbl.rd}{ "rd" } -FUNCTION {bbl.th}{ "th" } - - -% This is the LaTeX spacer that is used when a larger than normal space -% is called for (such as just before the address:publisher). -FUNCTION {large.space} { "\hskip 1em plus 0.5em minus 0.4em\relax " } - -% The LaTeX code for dashes that are used to represent repeated names. -% Note: Some older IEEE journals used something like -% "\rule{0.275in}{0.5pt}\," which is fairly thick and runs right along -% the baseline. However, IEEE now uses a thinner, above baseline, -% six dash long sequence. -FUNCTION {repeated.name.dashes} { "------" } - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% PREDEFINED STRING MACROS %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -MACRO {jan} {"Jan."} -MACRO {feb} {"Feb."} -MACRO {mar} {"Mar."} -MACRO {apr} {"Apr."} -MACRO {may} {"May"} -MACRO {jun} {"Jun."} -MACRO {jul} {"Jul."} -MACRO {aug} {"Aug."} -MACRO {sep} {"Sep."} -MACRO {oct} {"Oct."} -MACRO {nov} {"Nov."} -MACRO {dec} {"Dec."} - - - -%%%%%%%%%%%%%%%%%% -%% ENTRY FIELDS %% -%%%%%%%%%%%%%%%%%% - -ENTRY - { address - assignee - author - booktitle - chapter - day - dayfiled - edition - editor - howpublished - institution - intype - journal - key - language - month - monthfiled - nationality - note - number - organization - pages - paper - publisher - school - series - revision - title - type - url - volume - year - yearfiled - CTLuse_article_number - CTLuse_paper - CTLuse_forced_etal - CTLmax_names_forced_etal - CTLnames_show_etal - CTLuse_alt_spacing - CTLalt_stretch_factor - CTLdash_repeated_names - CTLname_format_string - CTLname_latex_cmd - CTLname_url_prefix - } - {} - { label } - - - - -%%%%%%%%%%%%%%%%%%%%%%% -%% INTEGER VARIABLES %% -%%%%%%%%%%%%%%%%%%%%%%% - -INTEGERS { prev.status.punct this.status.punct punct.std - punct.no punct.comma punct.period - prev.status.space this.status.space space.std - space.no space.normal space.large - prev.status.quote this.status.quote quote.std - quote.no quote.close - prev.status.nline this.status.nline nline.std - nline.no nline.newblock - status.cap cap.std - cap.no cap.yes} - -INTEGERS { longest.label.width multiresult nameptr namesleft number.label numnames } - -INTEGERS { is.use.number.for.article - is.use.paper - is.forced.et.al - max.num.names.before.forced.et.al - num.names.shown.with.forced.et.al - is.use.alt.interword.spacing - is.dash.repeated.names} - - -%%%%%%%%%%%%%%%%%%%%%% -%% STRING VARIABLES %% -%%%%%%%%%%%%%%%%%%%%%% - -STRINGS { bibinfo - longest.label - oldname - s - t - ALTinterwordstretchfactor - name.format.string - name.latex.cmd - name.url.prefix} - - - - -%%%%%%%%%%%%%%%%%%%%%%%%% -%% LOW LEVEL FUNCTIONS %% -%%%%%%%%%%%%%%%%%%%%%%%%% - -FUNCTION {initialize.controls} -{ default.is.use.number.for.article 'is.use.number.for.article := - default.is.use.paper 'is.use.paper := - default.is.forced.et.al 'is.forced.et.al := - default.max.num.names.before.forced.et.al 'max.num.names.before.forced.et.al := - default.num.names.shown.with.forced.et.al 'num.names.shown.with.forced.et.al := - default.is.use.alt.interword.spacing 'is.use.alt.interword.spacing := - default.is.dash.repeated.names 'is.dash.repeated.names := - default.ALTinterwordstretchfactor 'ALTinterwordstretchfactor := - default.name.format.string 'name.format.string := - default.name.latex.cmd 'name.latex.cmd := - default.name.url.prefix 'name.url.prefix := -} - - -% This IEEEtran.bst features a very powerful and flexible mechanism for -% controlling the capitalization, punctuation, spacing, quotation, and -% newlines of the formatted entry fields. (Note: IEEEtran.bst does not need -% or use the newline/newblock feature, but it has been implemented for -% possible future use.) The output states of IEEEtran.bst consist of -% multiple independent attributes and, as such, can be thought of as being -% vectors, rather than the simple scalar values ("before.all", -% "mid.sentence", etc.) used in most other .bst files. -% -% The more flexible and complex design used here was motivated in part by -% IEEE's rather unusual bibliography style. For example, IEEE ends the -% previous field item with a period and large space prior to the publisher -% address; the @electronic entry types use periods as inter-item punctuation -% rather than the commas used by the other entry types; and URLs are never -% followed by periods even though they are the last item in the entry. -% Although it is possible to accommodate these features with the conventional -% output state system, the seemingly endless exceptions make for convoluted, -% unreliable and difficult to maintain code. -% -% IEEEtran.bst's output state system can be easily understood via a simple -% illustration of two most recently formatted entry fields (on the stack): -% -% CURRENT_ITEM -% "PREVIOUS_ITEM -% -% which, in this example, is to eventually appear in the bibliography as: -% -% "PREVIOUS_ITEM," CURRENT_ITEM -% -% It is the job of the output routine to take the previous item off of the -% stack (while leaving the current item at the top of the stack), apply its -% trailing punctuation (including closing quote marks) and spacing, and then -% to write the result to BibTeX's output buffer: -% -% "PREVIOUS_ITEM," -% -% Punctuation (and spacing) between items is often determined by both of the -% items rather than just the first one. The presence of quotation marks -% further complicates the situation because, in standard English, trailing -% punctuation marks are supposed to be contained within the quotes. -% -% IEEEtran.bst maintains two output state (aka "status") vectors which -% correspond to the previous and current (aka "this") items. Each vector -% consists of several independent attributes which track punctuation, -% spacing, quotation, and newlines. Capitalization status is handled by a -% separate scalar because the format routines, not the output routine, -% handle capitalization and, therefore, there is no need to maintain the -% capitalization attribute for both the "previous" and "this" items. -% -% When a format routine adds a new item, it copies the current output status -% vector to the previous output status vector and (usually) resets the -% current (this) output status vector to a "standard status" vector. Using a -% "standard status" vector in this way allows us to redefine what we mean by -% "standard status" at the start of each entry handler and reuse the same -% format routines under the various inter-item separation schemes. For -% example, the standard status vector for the @book entry type may use -% commas for item separators, while the @electronic type may use periods, -% yet both entry handlers exploit many of the exact same format routines. -% -% Because format routines have write access to the output status vector of -% the previous item, they can override the punctuation choices of the -% previous format routine! Therefore, it becomes trivial to implement rules -% such as "Always use a period and a large space before the publisher." By -% pushing the generation of the closing quote mark to the output routine, we -% avoid all the problems caused by having to close a quote before having all -% the information required to determine what the punctuation should be. -% -% The IEEEtran.bst output state system can easily be expanded if needed. -% For instance, it is easy to add a "space.tie" attribute value if the -% bibliography rules mandate that two items have to be joined with an -% unbreakable space. - -FUNCTION {initialize.status.constants} -{ #0 'punct.no := - #1 'punct.comma := - #2 'punct.period := - #0 'space.no := - #1 'space.normal := - #2 'space.large := - #0 'quote.no := - #1 'quote.close := - #0 'cap.no := - #1 'cap.yes := - #0 'nline.no := - #1 'nline.newblock := -} - -FUNCTION {std.status.using.comma} -{ punct.comma 'punct.std := - space.normal 'space.std := - quote.no 'quote.std := - nline.no 'nline.std := - cap.no 'cap.std := -} - -FUNCTION {std.status.using.period} -{ punct.period 'punct.std := - space.normal 'space.std := - quote.no 'quote.std := - nline.no 'nline.std := - cap.yes 'cap.std := -} - -FUNCTION {initialize.prev.this.status} -{ punct.no 'prev.status.punct := - space.no 'prev.status.space := - quote.no 'prev.status.quote := - nline.no 'prev.status.nline := - punct.no 'this.status.punct := - space.no 'this.status.space := - quote.no 'this.status.quote := - nline.no 'this.status.nline := - cap.yes 'status.cap := -} - -FUNCTION {this.status.std} -{ punct.std 'this.status.punct := - space.std 'this.status.space := - quote.std 'this.status.quote := - nline.std 'this.status.nline := -} - -FUNCTION {cap.status.std}{ cap.std 'status.cap := } - -FUNCTION {this.to.prev.status} -{ this.status.punct 'prev.status.punct := - this.status.space 'prev.status.space := - this.status.quote 'prev.status.quote := - this.status.nline 'prev.status.nline := -} - - -FUNCTION {not} -{ { #0 } - { #1 } - if$ -} - -FUNCTION {and} -{ { skip$ } - { pop$ #0 } - if$ -} - -FUNCTION {or} -{ { pop$ #1 } - { skip$ } - if$ -} - - -% convert the strings "yes" or "no" to #1 or #0 respectively -FUNCTION {yes.no.to.int} -{ "l" change.case$ duplicate$ - "yes" = - { pop$ #1 } - { duplicate$ "no" = - { pop$ #0 } - { "unknown boolean " quote$ * swap$ * quote$ * - " in " * cite$ * warning$ - #0 - } - if$ - } - if$ -} - - -% pushes true if the single char string on the stack is in the -% range of "0" to "9" -FUNCTION {is.num} -{ chr.to.int$ - duplicate$ "0" chr.to.int$ < not - swap$ "9" chr.to.int$ > not and -} - -% multiplies the integer on the stack by a factor of 10 -FUNCTION {bump.int.mag} -{ #0 'multiresult := - { duplicate$ #0 > } - { #1 - - multiresult #10 + - 'multiresult := - } - while$ -pop$ -multiresult -} - -% converts a single character string on the stack to an integer -FUNCTION {char.to.integer} -{ duplicate$ - is.num - { chr.to.int$ "0" chr.to.int$ - } - {"noninteger character " quote$ * swap$ * quote$ * - " in integer field of " * cite$ * warning$ - #0 - } - if$ -} - -% converts a string on the stack to an integer -FUNCTION {string.to.integer} -{ duplicate$ text.length$ 'namesleft := - #1 'nameptr := - #0 'numnames := - { nameptr namesleft > not } - { duplicate$ nameptr #1 substring$ - char.to.integer numnames bump.int.mag + - 'numnames := - nameptr #1 + - 'nameptr := - } - while$ -pop$ -numnames -} - - - - -% The output routines write out the *next* to the top (previous) item on the -% stack, adding punctuation and such as needed. Since IEEEtran.bst maintains -% the output status for the top two items on the stack, these output -% routines have to consider the previous output status (which corresponds to -% the item that is being output). Full independent control of punctuation, -% closing quote marks, spacing, and newblock is provided. -% -% "output.nonnull" does not check for the presence of a previous empty -% item. -% -% "output" does check for the presence of a previous empty item and will -% remove an empty item rather than outputing it. -% -% "output.warn" is like "output", but will issue a warning if it detects -% an empty item. - -FUNCTION {output.nonnull} -{ swap$ - prev.status.punct punct.comma = - { "," * } - { skip$ } - if$ - prev.status.punct punct.period = - { add.period$ } - { skip$ } - if$ - prev.status.quote quote.close = - { "''" * } - { skip$ } - if$ - prev.status.space space.normal = - { " " * } - { skip$ } - if$ - prev.status.space space.large = - { large.space * } - { skip$ } - if$ - write$ - prev.status.nline nline.newblock = - { newline$ "\newblock " write$ } - { skip$ } - if$ -} - -FUNCTION {output} -{ duplicate$ empty$ - 'pop$ - 'output.nonnull - if$ -} - -FUNCTION {output.warn} -{ 't := - duplicate$ empty$ - { pop$ "empty " t * " in " * cite$ * warning$ } - 'output.nonnull - if$ -} - -% "fin.entry" is the output routine that handles the last item of the entry -% (which will be on the top of the stack when "fin.entry" is called). - -FUNCTION {fin.entry} -{ this.status.punct punct.no = - { skip$ } - { add.period$ } - if$ - this.status.quote quote.close = - { "''" * } - { skip$ } - if$ -write$ -newline$ -} - - -FUNCTION {is.last.char.not.punct} -{ duplicate$ - "}" * add.period$ - #-1 #1 substring$ "." = -} - -FUNCTION {is.multiple.pages} -{ 't := - #0 'multiresult := - { multiresult not - t empty$ not - and - } - { t #1 #1 substring$ - duplicate$ "-" = - swap$ duplicate$ "," = - swap$ "+" = - or or - { #1 'multiresult := } - { t #2 global.max$ substring$ 't := } - if$ - } - while$ - multiresult -} - -FUNCTION {capitalize}{ "u" change.case$ "t" change.case$ } - -FUNCTION {emphasize} -{ duplicate$ empty$ - { pop$ "" } - { "\emph{" swap$ * "}" * } - if$ -} - -FUNCTION {do.name.latex.cmd} -{ name.latex.cmd - empty$ - { skip$ } - { name.latex.cmd "{" * swap$ * "}" * } - if$ -} - -% IEEEtran.bst uses its own \BIBforeignlanguage command which directly -% invokes the TeX hyphenation patterns without the need of the Babel -% package. Babel does a lot more than switch hyphenation patterns and -% its loading can cause unintended effects in many class files (such as -% IEEEtran.cls). -FUNCTION {select.language} -{ duplicate$ empty$ 'pop$ - { language empty$ 'skip$ - { "\BIBforeignlanguage{" language * "}{" * swap$ * "}" * } - if$ - } - if$ -} - -FUNCTION {tie.or.space.prefix} -{ duplicate$ text.length$ #3 < - { "~" } - { " " } - if$ - swap$ -} - -FUNCTION {get.bbl.editor} -{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ } - -FUNCTION {space.word}{ " " swap$ * " " * } - - -% Field Conditioners, Converters, Checkers and External Interfaces - -FUNCTION {empty.field.to.null.string} -{ duplicate$ empty$ - { pop$ "" } - { skip$ } - if$ -} - -FUNCTION {either.or.check} -{ empty$ - { pop$ } - { "can't use both " swap$ * " fields in " * cite$ * warning$ } - if$ -} - -FUNCTION {empty.entry.warn} -{ author empty$ title empty$ howpublished empty$ - month empty$ year empty$ note empty$ url empty$ - and and and and and and - { "all relevant fields are empty in " cite$ * warning$ } - 'skip$ - if$ -} - - -% The bibinfo system provides a way for the electronic parsing/acquisition -% of a bibliography's contents as is done by ReVTeX. For example, a field -% could be entered into the bibliography as: -% \bibinfo{volume}{2} -% Only the "2" would show up in the document, but the LaTeX \bibinfo command -% could do additional things with the information. IEEEtran.bst does provide -% a \bibinfo command via "\providecommand{\bibinfo}[2]{#2}". However, it is -% currently not used as the bogus bibinfo functions defined here output the -% entry values directly without the \bibinfo wrapper. The bibinfo functions -% themselves (and the calls to them) are retained for possible future use. -% -% bibinfo.check avoids acting on missing fields while bibinfo.warn will -% issue a warning message if a missing field is detected. Prior to calling -% the bibinfo functions, the user should push the field value and then its -% name string, in that order. - -FUNCTION {bibinfo.check} -{ swap$ duplicate$ missing$ - { pop$ pop$ "" } - { duplicate$ empty$ - { swap$ pop$ } - { swap$ pop$ } - if$ - } - if$ -} - -FUNCTION {bibinfo.warn} -{ swap$ duplicate$ missing$ - { swap$ "missing " swap$ * " in " * cite$ * warning$ pop$ "" } - { duplicate$ empty$ - { swap$ "empty " swap$ * " in " * cite$ * warning$ } - { swap$ pop$ } - if$ - } - if$ -} - - -% IEEE separates large numbers with more than 4 digits into groups of -% three. IEEE uses a small space to separate these number groups. -% Typical applications include patent and page numbers. - -% number of consecutive digits required to trigger the group separation. -FUNCTION {large.number.trigger}{ #5 } - -% For numbers longer than the trigger, this is the blocksize of the groups. -% The blocksize must be less than the trigger threshold, and 2 * blocksize -% must be greater than the trigger threshold (can't do more than one -% separation on the initial trigger). -FUNCTION {large.number.blocksize}{ #3 } - -% What is actually inserted between the number groups. -FUNCTION {large.number.separator}{ "\," } - -% So as to save on integer variables by reusing existing ones, numnames -% holds the current number of consecutive digits read and nameptr holds -% the number that will trigger an inserted space. -FUNCTION {large.number.separate} -{ 't := - "" - #0 'numnames := - large.number.trigger 'nameptr := - { t empty$ not } - { t #-1 #1 substring$ is.num - { numnames #1 + 'numnames := } - { #0 'numnames := - large.number.trigger 'nameptr := - } - if$ - t #-1 #1 substring$ swap$ * - t #-2 global.max$ substring$ 't := - numnames nameptr = - { duplicate$ #1 nameptr large.number.blocksize - substring$ swap$ - nameptr large.number.blocksize - #1 + global.max$ substring$ - large.number.separator swap$ * * - nameptr large.number.blocksize - 'numnames := - large.number.blocksize #1 + 'nameptr := - } - { skip$ } - if$ - } - while$ -} - -% Converts all single dashes "-" to double dashes "--". -FUNCTION {n.dashify} -{ large.number.separate - 't := - "" - { t empty$ not } - { t #1 #1 substring$ "-" = - { t #1 #2 substring$ "--" = not - { "--" * - t #2 global.max$ substring$ 't := - } - { { t #1 #1 substring$ "-" = } - { "-" * - t #2 global.max$ substring$ 't := - } - while$ - } - if$ - } - { t #1 #1 substring$ * - t #2 global.max$ substring$ 't := - } - if$ - } - while$ -} - - -% This function detects entries with names that are identical to that of -% the previous entry and replaces the repeated names with dashes (if the -% "is.dash.repeated.names" user control is nonzero). -FUNCTION {name.or.dash} -{ 's := - oldname empty$ - { s 'oldname := s } - { s oldname = - { is.dash.repeated.names - { repeated.name.dashes } - { s 'oldname := s } - if$ - } - { s 'oldname := s } - if$ - } - if$ -} - -% Converts the number string on the top of the stack to -% "numerical ordinal form" (e.g., "7" to "7th"). There is -% no artificial limit to the upper bound of the numbers as the -% least significant digit always determines the ordinal form. -FUNCTION {num.to.ordinal} -{ duplicate$ #-1 #1 substring$ "1" = - { bbl.st * } - { duplicate$ #-1 #1 substring$ "2" = - { bbl.nd * } - { duplicate$ #-1 #1 substring$ "3" = - { bbl.rd * } - { bbl.th * } - if$ - } - if$ - } - if$ -} - -% If the string on the top of the stack begins with a number, -% (e.g., 11th) then replace the string with the leading number -% it contains. Otherwise retain the string as-is. s holds the -% extracted number, t holds the part of the string that remains -% to be scanned. -FUNCTION {extract.num} -{ duplicate$ 't := - "" 's := - { t empty$ not } - { t #1 #1 substring$ - t #2 global.max$ substring$ 't := - duplicate$ is.num - { s swap$ * 's := } - { pop$ "" 't := } - if$ - } - while$ - s empty$ - 'skip$ - { pop$ s } - if$ -} - -% Converts the word number string on the top of the stack to -% Arabic string form. Will be successful up to "tenth". -FUNCTION {word.to.num} -{ duplicate$ "l" change.case$ 's := - s "first" = - { pop$ "1" } - { skip$ } - if$ - s "second" = - { pop$ "2" } - { skip$ } - if$ - s "third" = - { pop$ "3" } - { skip$ } - if$ - s "fourth" = - { pop$ "4" } - { skip$ } - if$ - s "fifth" = - { pop$ "5" } - { skip$ } - if$ - s "sixth" = - { pop$ "6" } - { skip$ } - if$ - s "seventh" = - { pop$ "7" } - { skip$ } - if$ - s "eighth" = - { pop$ "8" } - { skip$ } - if$ - s "ninth" = - { pop$ "9" } - { skip$ } - if$ - s "tenth" = - { pop$ "10" } - { skip$ } - if$ -} - - -% Converts the string on the top of the stack to numerical -% ordinal (e.g., "11th") form. -FUNCTION {convert.edition} -{ duplicate$ empty$ 'skip$ - { duplicate$ #1 #1 substring$ is.num - { extract.num - num.to.ordinal - } - { word.to.num - duplicate$ #1 #1 substring$ is.num - { num.to.ordinal } - { "edition ordinal word " quote$ * edition * quote$ * - " may be too high (or improper) for conversion" * " in " * cite$ * warning$ - } - if$ - } - if$ - } - if$ -} - - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% LATEX BIBLIOGRAPHY CODE %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -FUNCTION {start.entry} -{ newline$ - "\bibitem{" write$ - cite$ write$ - "}" write$ - newline$ - "" - initialize.prev.this.status -} - -% Here we write out all the LaTeX code that we will need. The most involved -% code sequences are those that control the alternate interword spacing and -% foreign language hyphenation patterns. The heavy use of \providecommand -% gives users a way to override the defaults. Special thanks to Javier Bezos, -% Johannes Braams, Robin Fairbairns, Heiko Oberdiek, Donald Arseneau and all -% the other gurus on comp.text.tex for their help and advice on the topic of -% \selectlanguage, Babel and BibTeX. -FUNCTION {begin.bib} -{ "% Generated by IEEEtran.bst, version: " bst.file.version * " (" * bst.file.date * ")" * - write$ newline$ - preamble$ empty$ 'skip$ - { preamble$ write$ newline$ } - if$ - "\begin{thebibliography}{" longest.label * "}" * - write$ newline$ - "\providecommand{\url}[1]{#1}" - write$ newline$ - "\csname url@samestyle\endcsname" - write$ newline$ - "\providecommand{\newblock}{\relax}" - write$ newline$ - "\providecommand{\bibinfo}[2]{#2}" - write$ newline$ - "\providecommand{\BIBentrySTDinterwordspacing}{\spaceskip=0pt\relax}" - write$ newline$ - "\providecommand{\BIBentryALTinterwordstretchfactor}{" - ALTinterwordstretchfactor * "}" * - write$ newline$ - "\providecommand{\BIBentryALTinterwordspacing}{\spaceskip=\fontdimen2\font plus " - write$ newline$ - "\BIBentryALTinterwordstretchfactor\fontdimen3\font minus \fontdimen4\font\relax}" - write$ newline$ - "\providecommand{\BIBforeignlanguage}[2]{{%" - write$ newline$ - "\expandafter\ifx\csname l@#1\endcsname\relax" - write$ newline$ - "\typeout{** WARNING: IEEEtran.bst: No hyphenation pattern has been}%" - write$ newline$ - "\typeout{** loaded for the language `#1'. Using the pattern for}%" - write$ newline$ - "\typeout{** the default language instead.}%" - write$ newline$ - "\else" - write$ newline$ - "\language=\csname l@#1\endcsname" - write$ newline$ - "\fi" - write$ newline$ - "#2}}" - write$ newline$ - "\providecommand{\BIBdecl}{\relax}" - write$ newline$ - "\BIBdecl" - write$ newline$ -} - -FUNCTION {end.bib} -{ newline$ "\end{thebibliography}" write$ newline$ } - -FUNCTION {if.url.alt.interword.spacing} -{ is.use.alt.interword.spacing - {url empty$ 'skip$ {"\BIBentryALTinterwordspacing" write$ newline$} if$} - { skip$ } - if$ -} - -FUNCTION {if.url.std.interword.spacing} -{ is.use.alt.interword.spacing - {url empty$ 'skip$ {"\BIBentrySTDinterwordspacing" write$ newline$} if$} - { skip$ } - if$ -} - - - - -%%%%%%%%%%%%%%%%%%%%%%%% -%% LONGEST LABEL PASS %% -%%%%%%%%%%%%%%%%%%%%%%%% - -FUNCTION {initialize.longest.label} -{ "" 'longest.label := - #1 'number.label := - #0 'longest.label.width := -} - -FUNCTION {longest.label.pass} -{ type$ "ieeetranbstctl" = - { skip$ } - { number.label int.to.str$ 'label := - number.label #1 + 'number.label := - label width$ longest.label.width > - { label 'longest.label := - label width$ 'longest.label.width := - } - { skip$ } - if$ - } - if$ -} - - - - -%%%%%%%%%%%%%%%%%%%%% -%% FORMAT HANDLERS %% -%%%%%%%%%%%%%%%%%%%%% - -%% Lower Level Formats (used by higher level formats) - -FUNCTION {format.address.org.or.pub.date} -{ 't := - "" - year empty$ - { "empty year in " cite$ * warning$ } - { skip$ } - if$ - address empty$ t empty$ and - year empty$ and month empty$ and - { skip$ } - { this.to.prev.status - this.status.std - cap.status.std - address "address" bibinfo.check * - t empty$ - { skip$ } - { punct.period 'prev.status.punct := - space.large 'prev.status.space := - address empty$ - { skip$ } - { ": " * } - if$ - t * - } - if$ - year empty$ month empty$ and - { skip$ } - { t empty$ address empty$ and - { skip$ } - { ", " * } - if$ - month empty$ - { year empty$ - { skip$ } - { year "year" bibinfo.check * } - if$ - } - { month "month" bibinfo.check * - year empty$ - { skip$ } - { " " * year "year" bibinfo.check * } - if$ - } - if$ - } - if$ - } - if$ -} - - -FUNCTION {format.names} -{ 'bibinfo := - duplicate$ empty$ 'skip$ { - this.to.prev.status - this.status.std - 's := - "" 't := - #1 'nameptr := - s num.names$ 'numnames := - numnames 'namesleft := - { namesleft #0 > } - { s nameptr - name.format.string - format.name$ - bibinfo bibinfo.check - 't := - nameptr #1 > - { nameptr num.names.shown.with.forced.et.al #1 + = - numnames max.num.names.before.forced.et.al > - is.forced.et.al and and - { "others" 't := - #1 'namesleft := - } - { skip$ } - if$ - namesleft #1 > - { ", " * t do.name.latex.cmd * } - { s nameptr "{ll}" format.name$ duplicate$ "others" = - { 't := } - { pop$ } - if$ - t "others" = - { " " * bbl.etal emphasize * } - { numnames #2 > - { "," * } - { skip$ } - if$ - bbl.and - space.word * t do.name.latex.cmd * - } - if$ - } - if$ - } - { t do.name.latex.cmd } - if$ - nameptr #1 + 'nameptr := - namesleft #1 - 'namesleft := - } - while$ - cap.status.std - } if$ -} - - - - -%% Higher Level Formats - -%% addresses/locations - -FUNCTION {format.address} -{ address duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - cap.status.std - } - if$ -} - - - -%% author/editor names - -FUNCTION {format.authors}{ author "author" format.names } - -FUNCTION {format.editors} -{ editor "editor" format.names duplicate$ empty$ 'skip$ - { ", " * - get.bbl.editor - capitalize - * - } - if$ -} - - - -%% date - -FUNCTION {format.date} -{ - month "month" bibinfo.check duplicate$ empty$ - year "year" bibinfo.check duplicate$ empty$ - { swap$ 'skip$ - { this.to.prev.status - this.status.std - cap.status.std - "there's a month but no year in " cite$ * warning$ } - if$ - * - } - { this.to.prev.status - this.status.std - cap.status.std - swap$ 'skip$ - { - swap$ - " " * swap$ - } - if$ - * - } - if$ -} - -FUNCTION {format.date.electronic} -{ month "month" bibinfo.check duplicate$ empty$ - year "year" bibinfo.check duplicate$ empty$ - { swap$ - { pop$ } - { "there's a month but no year in " cite$ * warning$ - pop$ ")" * "(" swap$ * - this.to.prev.status - punct.no 'this.status.punct := - space.normal 'this.status.space := - quote.no 'this.status.quote := - cap.yes 'status.cap := - } - if$ - } - { swap$ - { swap$ pop$ ")" * "(" swap$ * } - { "(" swap$ * ", " * swap$ * ")" * } - if$ - this.to.prev.status - punct.no 'this.status.punct := - space.normal 'this.status.space := - quote.no 'this.status.quote := - cap.yes 'status.cap := - } - if$ -} - - - -%% edition/title - -% Note: IEEE considers the edition to be closely associated with -% the title of a book. So, in IEEEtran.bst the edition is normally handled -% within the formatting of the title. The format.edition function is -% retained here for possible future use. -FUNCTION {format.edition} -{ edition duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - convert.edition - status.cap - { "t" } - { "l" } - if$ change.case$ - "edition" bibinfo.check - "~" * bbl.edition * - cap.status.std - } - if$ -} - -% This is used to format the booktitle of a conference proceedings. -% Here we use the "intype" field to provide the user a way to -% override the word "in" (e.g., with things like "presented at") -% Use of intype stops the emphasis of the booktitle to indicate that -% we no longer mean the written conference proceedings, but the -% conference itself. -FUNCTION {format.in.booktitle} -{ booktitle "booktitle" bibinfo.check duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - select.language - intype missing$ - { emphasize - bbl.in " " * - } - { intype " " * } - if$ - swap$ * - cap.status.std - } - if$ -} - -% This is used to format the booktitle of collection. -% Here the "intype" field is not supported, but "edition" is. -FUNCTION {format.in.booktitle.edition} -{ booktitle "booktitle" bibinfo.check duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - select.language - emphasize - edition empty$ 'skip$ - { ", " * - edition - convert.edition - "l" change.case$ - * "~" * bbl.edition * - } - if$ - bbl.in " " * swap$ * - cap.status.std - } - if$ -} - -FUNCTION {format.article.title} -{ title duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - "t" change.case$ - } - if$ - "title" bibinfo.check - duplicate$ empty$ 'skip$ - { quote.close 'this.status.quote := - is.last.char.not.punct - { punct.std 'this.status.punct := } - { punct.no 'this.status.punct := } - if$ - select.language - "``" swap$ * - cap.status.std - } - if$ -} - -FUNCTION {format.article.title.electronic} -{ title duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - cap.status.std - "t" change.case$ - } - if$ - "title" bibinfo.check - duplicate$ empty$ - { skip$ } - { select.language } - if$ -} - -FUNCTION {format.book.title.edition} -{ title "title" bibinfo.check - duplicate$ empty$ - { "empty title in " cite$ * warning$ } - { this.to.prev.status - this.status.std - select.language - emphasize - edition empty$ 'skip$ - { ", " * - edition - convert.edition - status.cap - { "t" } - { "l" } - if$ - change.case$ - * "~" * bbl.edition * - } - if$ - cap.status.std - } - if$ -} - -FUNCTION {format.book.title} -{ title "title" bibinfo.check - duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - cap.status.std - select.language - emphasize - } - if$ -} - - - -%% journal - -FUNCTION {format.journal} -{ journal duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - cap.status.std - select.language - emphasize - } - if$ -} - - - -%% how published - -FUNCTION {format.howpublished} -{ howpublished duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - cap.status.std - } - if$ -} - - - -%% institutions/organization/publishers/school - -FUNCTION {format.institution} -{ institution duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - cap.status.std - } - if$ -} - -FUNCTION {format.organization} -{ organization duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - cap.status.std - } - if$ -} - -FUNCTION {format.address.publisher.date} -{ publisher "publisher" bibinfo.warn format.address.org.or.pub.date } - -FUNCTION {format.address.publisher.date.nowarn} -{ publisher "publisher" bibinfo.check format.address.org.or.pub.date } - -FUNCTION {format.address.organization.date} -{ organization "organization" bibinfo.check format.address.org.or.pub.date } - -FUNCTION {format.school} -{ school duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - cap.status.std - } - if$ -} - - - -%% volume/number/series/chapter/pages - -FUNCTION {format.volume} -{ volume empty.field.to.null.string - duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - bbl.volume - status.cap - { capitalize } - { skip$ } - if$ - swap$ tie.or.space.prefix - "volume" bibinfo.check - * * - cap.status.std - } - if$ -} - -FUNCTION {format.number} -{ number empty.field.to.null.string - duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - status.cap - { bbl.number capitalize } - { bbl.number } - if$ - swap$ tie.or.space.prefix - "number" bibinfo.check - * * - cap.status.std - } - if$ -} - -FUNCTION {format.number.if.use.for.article} -{ is.use.number.for.article - { format.number } - { "" } - if$ -} - -% IEEE does not seem to tie the series so closely with the volume -% and number as is done in other bibliography styles. Instead the -% series is treated somewhat like an extension of the title. -FUNCTION {format.series} -{ series empty$ - { "" } - { this.to.prev.status - this.status.std - bbl.series " " * - series "series" bibinfo.check * - cap.status.std - } - if$ -} - - -FUNCTION {format.chapter} -{ chapter empty$ - { "" } - { this.to.prev.status - this.status.std - type empty$ - { bbl.chapter } - { type "l" change.case$ - "type" bibinfo.check - } - if$ - chapter tie.or.space.prefix - "chapter" bibinfo.check - * * - cap.status.std - } - if$ -} - - -% The intended use of format.paper is for paper numbers of inproceedings. -% The paper type can be overridden via the type field. -% We allow the type to be displayed even if the paper number is absent -% for things like "postdeadline paper" -FUNCTION {format.paper} -{ is.use.paper - { paper empty$ - { type empty$ - { "" } - { this.to.prev.status - this.status.std - type "type" bibinfo.check - cap.status.std - } - if$ - } - { this.to.prev.status - this.status.std - type empty$ - { bbl.paper } - { type "type" bibinfo.check } - if$ - " " * paper - "paper" bibinfo.check - * - cap.status.std - } - if$ - } - { "" } - if$ -} - - -FUNCTION {format.pages} -{ pages duplicate$ empty$ 'skip$ - { this.to.prev.status - this.status.std - duplicate$ is.multiple.pages - { - bbl.pages swap$ - n.dashify - } - { - bbl.page swap$ - } - if$ - tie.or.space.prefix - "pages" bibinfo.check - * * - cap.status.std - } - if$ -} - - - -%% technical report number - -FUNCTION {format.tech.report.number} -{ number "number" bibinfo.check - this.to.prev.status - this.status.std - cap.status.std - type duplicate$ empty$ - { pop$ - bbl.techrep - } - { skip$ } - if$ - "type" bibinfo.check - swap$ duplicate$ empty$ - { pop$ } - { tie.or.space.prefix * * } - if$ -} - - - -%% note - -FUNCTION {format.note} -{ note empty$ - { "" } - { this.to.prev.status - this.status.std - punct.period 'this.status.punct := - note #1 #1 substring$ - duplicate$ "{" = - { skip$ } - { status.cap - { "u" } - { "l" } - if$ - change.case$ - } - if$ - note #2 global.max$ substring$ * "note" bibinfo.check - cap.yes 'status.cap := - } - if$ -} - - - -%% patent - -FUNCTION {format.patent.date} -{ this.to.prev.status - this.status.std - year empty$ - { monthfiled duplicate$ empty$ - { "monthfiled" bibinfo.check pop$ "" } - { "monthfiled" bibinfo.check } - if$ - dayfiled duplicate$ empty$ - { "dayfiled" bibinfo.check pop$ "" * } - { "dayfiled" bibinfo.check - monthfiled empty$ - { "dayfiled without a monthfiled in " cite$ * warning$ - * - } - { " " swap$ * * } - if$ - } - if$ - yearfiled empty$ - { "no year or yearfiled in " cite$ * warning$ } - { yearfiled "yearfiled" bibinfo.check - swap$ - duplicate$ empty$ - { pop$ } - { ", " * swap$ * } - if$ - } - if$ - } - { month duplicate$ empty$ - { "month" bibinfo.check pop$ "" } - { "month" bibinfo.check } - if$ - day duplicate$ empty$ - { "day" bibinfo.check pop$ "" * } - { "day" bibinfo.check - month empty$ - { "day without a month in " cite$ * warning$ - * - } - { " " swap$ * * } - if$ - } - if$ - year "year" bibinfo.check - swap$ - duplicate$ empty$ - { pop$ } - { ", " * swap$ * } - if$ - } - if$ - cap.status.std -} - -FUNCTION {format.patent.nationality.type.number} -{ this.to.prev.status - this.status.std - nationality duplicate$ empty$ - { "nationality" bibinfo.warn pop$ "" } - { "nationality" bibinfo.check - duplicate$ "l" change.case$ "united states" = - { pop$ bbl.patentUS } - { skip$ } - if$ - " " * - } - if$ - type empty$ - { bbl.patent "type" bibinfo.check } - { type "type" bibinfo.check } - if$ - * - number duplicate$ empty$ - { "number" bibinfo.warn pop$ } - { "number" bibinfo.check - large.number.separate - swap$ " " * swap$ * - } - if$ - cap.status.std -} - - - -%% standard - -FUNCTION {format.organization.institution.standard.type.number} -{ this.to.prev.status - this.status.std - organization duplicate$ empty$ - { pop$ - institution duplicate$ empty$ - { "institution" bibinfo.warn } - { "institution" bibinfo.warn " " * } - if$ - } - { "organization" bibinfo.warn " " * } - if$ - type empty$ - { bbl.standard "type" bibinfo.check } - { type "type" bibinfo.check } - if$ - * - number duplicate$ empty$ - { "number" bibinfo.check pop$ } - { "number" bibinfo.check - large.number.separate - swap$ " " * swap$ * - } - if$ - cap.status.std -} - -FUNCTION {format.revision} -{ revision empty$ - { "" } - { this.to.prev.status - this.status.std - bbl.revision - revision tie.or.space.prefix - "revision" bibinfo.check - * * - cap.status.std - } - if$ -} - - -%% thesis - -FUNCTION {format.master.thesis.type} -{ this.to.prev.status - this.status.std - type empty$ - { - bbl.mthesis - } - { - type "type" bibinfo.check - } - if$ -cap.status.std -} - -FUNCTION {format.phd.thesis.type} -{ this.to.prev.status - this.status.std - type empty$ - { - bbl.phdthesis - } - { - type "type" bibinfo.check - } - if$ -cap.status.std -} - - - -%% URL - -FUNCTION {format.url} -{ url empty$ - { "" } - { this.to.prev.status - this.status.std - cap.yes 'status.cap := - name.url.prefix " " * - "\url{" * url * "}" * - punct.no 'this.status.punct := - punct.period 'prev.status.punct := - space.normal 'this.status.space := - space.normal 'prev.status.space := - quote.no 'this.status.quote := - } - if$ -} - - - - -%%%%%%%%%%%%%%%%%%%% -%% ENTRY HANDLERS %% -%%%%%%%%%%%%%%%%%%%% - - -% Note: In many journals, IEEE (or the authors) tend not to show the number -% for articles, so the display of the number is controlled here by the -% switch "is.use.number.for.article" -FUNCTION {article} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - format.authors "author" output.warn - name.or.dash - format.article.title "title" output.warn - format.journal "journal" bibinfo.check "journal" output.warn - format.volume output - format.number.if.use.for.article output - format.pages output - format.date "year" output.warn - format.note output - format.url output - fin.entry - if.url.std.interword.spacing -} - -FUNCTION {book} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - author empty$ - { format.editors "author and editor" output.warn } - { format.authors output.nonnull } - if$ - name.or.dash - format.book.title.edition output - format.series output - author empty$ - { skip$ } - { format.editors output } - if$ - format.address.publisher.date output - format.volume output - format.number output - format.note output - format.url output - fin.entry - if.url.std.interword.spacing -} - -FUNCTION {booklet} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - format.authors output - name.or.dash - format.article.title "title" output.warn - format.howpublished "howpublished" bibinfo.check output - format.organization "organization" bibinfo.check output - format.address "address" bibinfo.check output - format.date output - format.note output - format.url output - fin.entry - if.url.std.interword.spacing -} - -FUNCTION {electronic} -{ std.status.using.period - start.entry - if.url.alt.interword.spacing - format.authors output - name.or.dash - format.date.electronic output - format.article.title.electronic output - format.howpublished "howpublished" bibinfo.check output - format.organization "organization" bibinfo.check output - format.address "address" bibinfo.check output - format.note output - format.url output - fin.entry - empty.entry.warn - if.url.std.interword.spacing -} - -FUNCTION {inbook} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - author empty$ - { format.editors "author and editor" output.warn } - { format.authors output.nonnull } - if$ - name.or.dash - format.book.title.edition output - format.series output - format.address.publisher.date output - format.volume output - format.number output - format.chapter output - format.pages output - format.note output - format.url output - fin.entry - if.url.std.interword.spacing -} - -FUNCTION {incollection} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - format.authors "author" output.warn - name.or.dash - format.article.title "title" output.warn - format.in.booktitle.edition "booktitle" output.warn - format.series output - format.editors output - format.address.publisher.date.nowarn output - format.volume output - format.number output - format.chapter output - format.pages output - format.note output - format.url output - fin.entry - if.url.std.interword.spacing -} - -FUNCTION {inproceedings} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - format.authors "author" output.warn - name.or.dash - format.article.title "title" output.warn - format.in.booktitle "booktitle" output.warn - format.series output - format.editors output - format.volume output - format.number output - publisher empty$ - { format.address.organization.date output } - { format.organization "organization" bibinfo.check output - format.address.publisher.date output - } - if$ - format.paper output - format.pages output - format.note output - format.url output - fin.entry - if.url.std.interword.spacing -} - -FUNCTION {manual} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - format.authors output - name.or.dash - format.book.title.edition "title" output.warn - format.howpublished "howpublished" bibinfo.check output - format.organization "organization" bibinfo.check output - format.address "address" bibinfo.check output - format.date output - format.note output - format.url output - fin.entry - if.url.std.interword.spacing -} - -FUNCTION {mastersthesis} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - format.authors "author" output.warn - name.or.dash - format.article.title "title" output.warn - format.master.thesis.type output.nonnull - format.school "school" bibinfo.warn output - format.address "address" bibinfo.check output - format.date "year" output.warn - format.note output - format.url output - fin.entry - if.url.std.interword.spacing -} - -FUNCTION {misc} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - format.authors output - name.or.dash - format.article.title output - format.howpublished "howpublished" bibinfo.check output - format.organization "organization" bibinfo.check output - format.address "address" bibinfo.check output - format.pages output - format.date output - format.note output - format.url output - fin.entry - empty.entry.warn - if.url.std.interword.spacing -} - -FUNCTION {patent} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - format.authors output - name.or.dash - format.article.title output - format.patent.nationality.type.number output - format.patent.date output - format.note output - format.url output - fin.entry - empty.entry.warn - if.url.std.interword.spacing -} - -FUNCTION {periodical} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - format.editors output - name.or.dash - format.book.title "title" output.warn - format.series output - format.volume output - format.number output - format.organization "organization" bibinfo.check output - format.date "year" output.warn - format.note output - format.url output - fin.entry - if.url.std.interword.spacing -} - -FUNCTION {phdthesis} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - format.authors "author" output.warn - name.or.dash - format.article.title "title" output.warn - format.phd.thesis.type output.nonnull - format.school "school" bibinfo.warn output - format.address "address" bibinfo.check output - format.date "year" output.warn - format.note output - format.url output - fin.entry - if.url.std.interword.spacing -} - -FUNCTION {proceedings} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - format.editors output - name.or.dash - format.book.title "title" output.warn - format.series output - format.volume output - format.number output - publisher empty$ - { format.address.organization.date output } - { format.organization "organization" bibinfo.check output - format.address.publisher.date output - } - if$ - format.note output - format.url output - fin.entry - if.url.std.interword.spacing -} - -FUNCTION {standard} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - format.authors output - name.or.dash - format.book.title "title" output.warn - format.howpublished "howpublished" bibinfo.check output - format.organization.institution.standard.type.number output - format.revision output - format.date output - format.note output - format.url output - fin.entry - if.url.std.interword.spacing -} - -FUNCTION {techreport} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - format.authors "author" output.warn - name.or.dash - format.article.title "title" output.warn - format.howpublished "howpublished" bibinfo.check output - format.institution "institution" bibinfo.warn output - format.address "address" bibinfo.check output - format.tech.report.number output.nonnull - format.date "year" output.warn - format.note output - format.url output - fin.entry - if.url.std.interword.spacing -} - -FUNCTION {unpublished} -{ std.status.using.comma - start.entry - if.url.alt.interword.spacing - format.authors "author" output.warn - name.or.dash - format.article.title "title" output.warn - format.date output - format.note "note" output.warn - format.url output - fin.entry - if.url.std.interword.spacing -} - - -% The special entry type which provides the user interface to the -% BST controls -FUNCTION {IEEEtranBSTCTL} -{ is.print.banners.to.terminal - { "** IEEEtran BST control entry " quote$ * cite$ * quote$ * " detected." * - top$ - } - { skip$ } - if$ - CTLuse_article_number - empty$ - { skip$ } - { CTLuse_article_number - yes.no.to.int - 'is.use.number.for.article := - } - if$ - CTLuse_paper - empty$ - { skip$ } - { CTLuse_paper - yes.no.to.int - 'is.use.paper := - } - if$ - CTLuse_forced_etal - empty$ - { skip$ } - { CTLuse_forced_etal - yes.no.to.int - 'is.forced.et.al := - } - if$ - CTLmax_names_forced_etal - empty$ - { skip$ } - { CTLmax_names_forced_etal - string.to.integer - 'max.num.names.before.forced.et.al := - } - if$ - CTLnames_show_etal - empty$ - { skip$ } - { CTLnames_show_etal - string.to.integer - 'num.names.shown.with.forced.et.al := - } - if$ - CTLuse_alt_spacing - empty$ - { skip$ } - { CTLuse_alt_spacing - yes.no.to.int - 'is.use.alt.interword.spacing := - } - if$ - CTLalt_stretch_factor - empty$ - { skip$ } - { CTLalt_stretch_factor - 'ALTinterwordstretchfactor := - "\renewcommand{\BIBentryALTinterwordstretchfactor}{" - ALTinterwordstretchfactor * "}" * - write$ newline$ - } - if$ - CTLdash_repeated_names - empty$ - { skip$ } - { CTLdash_repeated_names - yes.no.to.int - 'is.dash.repeated.names := - } - if$ - CTLname_format_string - empty$ - { skip$ } - { CTLname_format_string - 'name.format.string := - } - if$ - CTLname_latex_cmd - empty$ - { skip$ } - { CTLname_latex_cmd - 'name.latex.cmd := - } - if$ - CTLname_url_prefix - missing$ - { skip$ } - { CTLname_url_prefix - 'name.url.prefix := - } - if$ - - - num.names.shown.with.forced.et.al max.num.names.before.forced.et.al > - { "CTLnames_show_etal cannot be greater than CTLmax_names_forced_etal in " cite$ * warning$ - max.num.names.before.forced.et.al 'num.names.shown.with.forced.et.al := - } - { skip$ } - if$ -} - - -%%%%%%%%%%%%%%%%%%% -%% ENTRY ALIASES %% -%%%%%%%%%%%%%%%%%%% -FUNCTION {conference}{inproceedings} -FUNCTION {online}{electronic} -FUNCTION {internet}{electronic} -FUNCTION {webpage}{electronic} -FUNCTION {www}{electronic} -FUNCTION {default.type}{misc} - - - -%%%%%%%%%%%%%%%%%% -%% MAIN PROGRAM %% -%%%%%%%%%%%%%%%%%% - -READ - -EXECUTE {initialize.controls} -EXECUTE {initialize.status.constants} -EXECUTE {banner.message} - -EXECUTE {initialize.longest.label} -ITERATE {longest.label.pass} - -EXECUTE {begin.bib} -ITERATE {call.type$} -EXECUTE {end.bib} - -EXECUTE{completed.message} - - -%% That's all folks, mds. +%% +%% IEEEtran.bst +%% BibTeX Bibliography Style file for IEEE Journals and Conferences (unsorted) +%% Version 1.12 (2007/01/11) +%% +%% Copyright (c) 2003-2007 Michael Shell +%% +%% Original starting code base and algorithms obtained from the output of +%% Patrick W. Daly's makebst package as well as from prior versions of +%% IEEE BibTeX styles: +%% +%% 1. Howard Trickey and Oren Patashnik's ieeetr.bst (1985/1988) +%% 2. Silvano Balemi and Richard H. Roy's IEEEbib.bst (1993) +%% +%% Support sites: +%% http://www.michaelshell.org/tex/ieeetran/ +%% http://www.ctan.org/tex-archive/macros/latex/contrib/IEEEtran/ +%% and/or +%% http://www.ieee.org/ +%% +%% For use with BibTeX version 0.99a or later +%% +%% This is a numerical citation style. +%% +%%************************************************************************* +%% Legal Notice: +%% This code is offered as-is without any warranty either expressed or +%% implied; without even the implied warranty of MERCHANTABILITY or +%% FITNESS FOR A PARTICULAR PURPOSE! +%% User assumes all risk. +%% In no event shall IEEE or any contributor to this code be liable for +%% any damages or losses, including, but not limited to, incidental, +%% consequential, or any other damages, resulting from the use or misuse +%% of any information contained here. +%% +%% All comments are the opinions of their respective authors and are not +%% necessarily endorsed by the IEEE. +%% +%% This work is distributed under the LaTeX Project Public License (LPPL) +%% ( http://www.latex-project.org/ ) version 1.3, and may be freely used, +%% distributed and modified. A copy of the LPPL, version 1.3, is included +%% in the base LaTeX documentation of all distributions of LaTeX released +%% 2003/12/01 or later. +%% Retain all contribution notices and credits. +%% ** Modified files should be clearly indicated as such, including ** +%% ** renaming them and changing author support contact information. ** +%% +%% File list of work: IEEEabrv.bib, IEEEfull.bib, IEEEexample.bib, +%% IEEEtran.bst, IEEEtranS.bst, IEEEtranSA.bst, +%% IEEEtranN.bst, IEEEtranSN.bst, IEEEtran_bst_HOWTO.pdf +%%************************************************************************* +% +% +% Changelog: +% +% 1.00 (2002/08/13) Initial release +% +% 1.10 (2002/09/27) +% 1. Corrected minor bug for improperly formed warning message when a +% book was not given a title. Thanks to Ming Kin Lai for reporting this. +% 2. Added support for CTLname_format_string and CTLname_latex_cmd fields +% in the BST control entry type. +% +% 1.11 (2003/04/02) +% 1. Fixed bug with URLs containing underscores when using url.sty. Thanks +% to Ming Kin Lai for reporting this. +% +% 1.12 (2007/01/11) +% 1. Fixed bug with unwanted comma before "et al." when an entry contained +% more than two author names. Thanks to Pallav Gupta for reporting this. +% 2. Fixed bug with anomalous closing quote in tech reports that have a +% type, but without a number or address. Thanks to Mehrdad Mirreza for +% reporting this. +% 3. Use braces in \providecommand in begin.bib to better support +% latex2html. TeX style length assignments OK with recent versions +% of latex2html - 1.71 (2002/2/1) or later is strongly recommended. +% Use of the language field still causes trouble with latex2html. +% Thanks to Federico Beffa for reporting this. +% 4. Added IEEEtran.bst ID and version comment string to .bbl output. +% 5. Provide a \BIBdecl hook that allows the user to execute commands +% just prior to the first entry. +% 6. Use default urlstyle (is using url.sty) of "same" rather than rm to +% better work with a wider variety of bibliography styles. +% 7. Changed month abbreviations from Sept., July and June to Sep., Jul., +% and Jun., respectively, as IEEE now does. Thanks to Moritz Borgmann +% for reporting this. +% 8. Control entry types should not be considered when calculating longest +% label width. +% 9. Added alias www for electronic/online. +% 10. Added CTLname_url_prefix control entry type. + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% DEFAULTS FOR THE CONTROLS OF THE BST STYLE %% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% These are the defaults for the user adjustable controls. The values used +% here can be overridden by the user via IEEEtranBSTCTL entry type. + +% NOTE: The recommended LaTeX command to invoke a control entry type is: +% +%\makeatletter +%\def\bstctlcite{\@ifnextchar[{\@bstctlcite}{\@bstctlcite[@auxout]}} +%\def\@bstctlcite[#1]#2{\@bsphack +% \@for\@citeb:=#2\do{% +% \edef\@citeb{\expandafter\@firstofone\@citeb}% +% \if@filesw\immediate\write\csname #1\endcsname{\string\citation{\@citeb}}\fi}% +% \@esphack} +%\makeatother +% +% It is called at the start of the document, before the first \cite, like: +% \bstctlcite{IEEEexample:BSTcontrol} +% +% IEEEtran.cls V1.6 and later does provide this command. + + + +% #0 turns off the display of the number for articles. +% #1 enables +FUNCTION {default.is.use.number.for.article} { #1 } + + +% #0 turns off the display of the paper and type fields in @inproceedings. +% #1 enables +FUNCTION {default.is.use.paper} { #1 } + + +% #0 turns off the forced use of "et al." +% #1 enables +FUNCTION {default.is.forced.et.al} { #0 } + +% The maximum number of names that can be present beyond which an "et al." +% usage is forced. Be sure that num.names.shown.with.forced.et.al (below) +% is not greater than this value! +% Note: There are many instances of references in IEEE journals which have +% a very large number of authors as well as instances in which "et al." is +% used profusely. +FUNCTION {default.max.num.names.before.forced.et.al} { #10 } + +% The number of names that will be shown with a forced "et al.". +% Must be less than or equal to max.num.names.before.forced.et.al +FUNCTION {default.num.names.shown.with.forced.et.al} { #1 } + + +% #0 turns off the alternate interword spacing for entries with URLs. +% #1 enables +FUNCTION {default.is.use.alt.interword.spacing} { #1 } + +% If alternate interword spacing for entries with URLs is enabled, this is +% the interword spacing stretch factor that will be used. For example, the +% default "4" here means that the interword spacing in entries with URLs can +% stretch to four times normal. Does not have to be an integer. Note that +% the value specified here can be overridden by the user in their LaTeX +% code via a command such as: +% "\providecommand\BIBentryALTinterwordstretchfactor{1.5}" in addition to +% that via the IEEEtranBSTCTL entry type. +FUNCTION {default.ALTinterwordstretchfactor} { "4" } + + +% #0 turns off the "dashification" of repeated (i.e., identical to those +% of the previous entry) names. IEEE normally does this. +% #1 enables +FUNCTION {default.is.dash.repeated.names} { #1 } + + +% The default name format control string. +FUNCTION {default.name.format.string}{ "{f.~}{vv~}{ll}{, jj}" } + + +% The default LaTeX font command for the names. +FUNCTION {default.name.latex.cmd}{ "" } + + +% The default URL prefix. +FUNCTION {default.name.url.prefix}{ "[Online]. Available:" } + + +% Other controls that cannot be accessed via IEEEtranBSTCTL entry type. + +% #0 turns off the terminal startup banner/completed message so as to +% operate more quietly. +% #1 enables +FUNCTION {is.print.banners.to.terminal} { #1 } + + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% FILE VERSION AND BANNER %% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION{bst.file.version} { "1.12" } +FUNCTION{bst.file.date} { "2007/01/11" } +FUNCTION{bst.file.website} { "http://www.michaelshell.org/tex/ieeetran/bibtex/" } + +FUNCTION {banner.message} +{ is.print.banners.to.terminal + { "-- IEEEtran.bst version" " " * bst.file.version * + " (" * bst.file.date * ") " * "by Michael Shell." * + top$ + "-- " bst.file.website * + top$ + "-- See the " quote$ * "IEEEtran_bst_HOWTO.pdf" * quote$ * " manual for usage information." * + top$ + } + { skip$ } + if$ +} + +FUNCTION {completed.message} +{ is.print.banners.to.terminal + { "" + top$ + "Done." + top$ + } + { skip$ } + if$ +} + + + + +%%%%%%%%%%%%%%%%%%%%%% +%% STRING CONSTANTS %% +%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {bbl.and}{ "and" } +FUNCTION {bbl.etal}{ "et~al." } +FUNCTION {bbl.editors}{ "eds." } +FUNCTION {bbl.editor}{ "ed." } +FUNCTION {bbl.edition}{ "ed." } +FUNCTION {bbl.volume}{ "vol." } +FUNCTION {bbl.of}{ "of" } +FUNCTION {bbl.number}{ "no." } +FUNCTION {bbl.in}{ "in" } +FUNCTION {bbl.pages}{ "pp." } +FUNCTION {bbl.page}{ "p." } +FUNCTION {bbl.chapter}{ "ch." } +FUNCTION {bbl.paper}{ "paper" } +FUNCTION {bbl.part}{ "pt." } +FUNCTION {bbl.patent}{ "Patent" } +FUNCTION {bbl.patentUS}{ "U.S." } +FUNCTION {bbl.revision}{ "Rev." } +FUNCTION {bbl.series}{ "ser." } +FUNCTION {bbl.standard}{ "Std." } +FUNCTION {bbl.techrep}{ "Tech. Rep." } +FUNCTION {bbl.mthesis}{ "Master's thesis" } +FUNCTION {bbl.phdthesis}{ "Ph.D. dissertation" } +FUNCTION {bbl.st}{ "st" } +FUNCTION {bbl.nd}{ "nd" } +FUNCTION {bbl.rd}{ "rd" } +FUNCTION {bbl.th}{ "th" } + + +% This is the LaTeX spacer that is used when a larger than normal space +% is called for (such as just before the address:publisher). +FUNCTION {large.space} { "\hskip 1em plus 0.5em minus 0.4em\relax " } + +% The LaTeX code for dashes that are used to represent repeated names. +% Note: Some older IEEE journals used something like +% "\rule{0.275in}{0.5pt}\," which is fairly thick and runs right along +% the baseline. However, IEEE now uses a thinner, above baseline, +% six dash long sequence. +FUNCTION {repeated.name.dashes} { "------" } + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% PREDEFINED STRING MACROS %% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +MACRO {jan} {"Jan."} +MACRO {feb} {"Feb."} +MACRO {mar} {"Mar."} +MACRO {apr} {"Apr."} +MACRO {may} {"May"} +MACRO {jun} {"Jun."} +MACRO {jul} {"Jul."} +MACRO {aug} {"Aug."} +MACRO {sep} {"Sep."} +MACRO {oct} {"Oct."} +MACRO {nov} {"Nov."} +MACRO {dec} {"Dec."} + + + +%%%%%%%%%%%%%%%%%% +%% ENTRY FIELDS %% +%%%%%%%%%%%%%%%%%% + +ENTRY + { address + assignee + author + booktitle + chapter + day + dayfiled + edition + editor + howpublished + institution + intype + journal + key + language + month + monthfiled + nationality + note + number + organization + pages + paper + publisher + school + series + revision + title + type + url + volume + year + yearfiled + CTLuse_article_number + CTLuse_paper + CTLuse_forced_etal + CTLmax_names_forced_etal + CTLnames_show_etal + CTLuse_alt_spacing + CTLalt_stretch_factor + CTLdash_repeated_names + CTLname_format_string + CTLname_latex_cmd + CTLname_url_prefix + } + {} + { label } + + + + +%%%%%%%%%%%%%%%%%%%%%%% +%% INTEGER VARIABLES %% +%%%%%%%%%%%%%%%%%%%%%%% + +INTEGERS { prev.status.punct this.status.punct punct.std + punct.no punct.comma punct.period + prev.status.space this.status.space space.std + space.no space.normal space.large + prev.status.quote this.status.quote quote.std + quote.no quote.close + prev.status.nline this.status.nline nline.std + nline.no nline.newblock + status.cap cap.std + cap.no cap.yes} + +INTEGERS { longest.label.width multiresult nameptr namesleft number.label numnames } + +INTEGERS { is.use.number.for.article + is.use.paper + is.forced.et.al + max.num.names.before.forced.et.al + num.names.shown.with.forced.et.al + is.use.alt.interword.spacing + is.dash.repeated.names} + + +%%%%%%%%%%%%%%%%%%%%%% +%% STRING VARIABLES %% +%%%%%%%%%%%%%%%%%%%%%% + +STRINGS { bibinfo + longest.label + oldname + s + t + ALTinterwordstretchfactor + name.format.string + name.latex.cmd + name.url.prefix} + + + + +%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOW LEVEL FUNCTIONS %% +%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {initialize.controls} +{ default.is.use.number.for.article 'is.use.number.for.article := + default.is.use.paper 'is.use.paper := + default.is.forced.et.al 'is.forced.et.al := + default.max.num.names.before.forced.et.al 'max.num.names.before.forced.et.al := + default.num.names.shown.with.forced.et.al 'num.names.shown.with.forced.et.al := + default.is.use.alt.interword.spacing 'is.use.alt.interword.spacing := + default.is.dash.repeated.names 'is.dash.repeated.names := + default.ALTinterwordstretchfactor 'ALTinterwordstretchfactor := + default.name.format.string 'name.format.string := + default.name.latex.cmd 'name.latex.cmd := + default.name.url.prefix 'name.url.prefix := +} + + +% This IEEEtran.bst features a very powerful and flexible mechanism for +% controlling the capitalization, punctuation, spacing, quotation, and +% newlines of the formatted entry fields. (Note: IEEEtran.bst does not need +% or use the newline/newblock feature, but it has been implemented for +% possible future use.) The output states of IEEEtran.bst consist of +% multiple independent attributes and, as such, can be thought of as being +% vectors, rather than the simple scalar values ("before.all", +% "mid.sentence", etc.) used in most other .bst files. +% +% The more flexible and complex design used here was motivated in part by +% IEEE's rather unusual bibliography style. For example, IEEE ends the +% previous field item with a period and large space prior to the publisher +% address; the @electronic entry types use periods as inter-item punctuation +% rather than the commas used by the other entry types; and URLs are never +% followed by periods even though they are the last item in the entry. +% Although it is possible to accommodate these features with the conventional +% output state system, the seemingly endless exceptions make for convoluted, +% unreliable and difficult to maintain code. +% +% IEEEtran.bst's output state system can be easily understood via a simple +% illustration of two most recently formatted entry fields (on the stack): +% +% CURRENT_ITEM +% "PREVIOUS_ITEM +% +% which, in this example, is to eventually appear in the bibliography as: +% +% "PREVIOUS_ITEM," CURRENT_ITEM +% +% It is the job of the output routine to take the previous item off of the +% stack (while leaving the current item at the top of the stack), apply its +% trailing punctuation (including closing quote marks) and spacing, and then +% to write the result to BibTeX's output buffer: +% +% "PREVIOUS_ITEM," +% +% Punctuation (and spacing) between items is often determined by both of the +% items rather than just the first one. The presence of quotation marks +% further complicates the situation because, in standard English, trailing +% punctuation marks are supposed to be contained within the quotes. +% +% IEEEtran.bst maintains two output state (aka "status") vectors which +% correspond to the previous and current (aka "this") items. Each vector +% consists of several independent attributes which track punctuation, +% spacing, quotation, and newlines. Capitalization status is handled by a +% separate scalar because the format routines, not the output routine, +% handle capitalization and, therefore, there is no need to maintain the +% capitalization attribute for both the "previous" and "this" items. +% +% When a format routine adds a new item, it copies the current output status +% vector to the previous output status vector and (usually) resets the +% current (this) output status vector to a "standard status" vector. Using a +% "standard status" vector in this way allows us to redefine what we mean by +% "standard status" at the start of each entry handler and reuse the same +% format routines under the various inter-item separation schemes. For +% example, the standard status vector for the @book entry type may use +% commas for item separators, while the @electronic type may use periods, +% yet both entry handlers exploit many of the exact same format routines. +% +% Because format routines have write access to the output status vector of +% the previous item, they can override the punctuation choices of the +% previous format routine! Therefore, it becomes trivial to implement rules +% such as "Always use a period and a large space before the publisher." By +% pushing the generation of the closing quote mark to the output routine, we +% avoid all the problems caused by having to close a quote before having all +% the information required to determine what the punctuation should be. +% +% The IEEEtran.bst output state system can easily be expanded if needed. +% For instance, it is easy to add a "space.tie" attribute value if the +% bibliography rules mandate that two items have to be joined with an +% unbreakable space. + +FUNCTION {initialize.status.constants} +{ #0 'punct.no := + #1 'punct.comma := + #2 'punct.period := + #0 'space.no := + #1 'space.normal := + #2 'space.large := + #0 'quote.no := + #1 'quote.close := + #0 'cap.no := + #1 'cap.yes := + #0 'nline.no := + #1 'nline.newblock := +} + +FUNCTION {std.status.using.comma} +{ punct.comma 'punct.std := + space.normal 'space.std := + quote.no 'quote.std := + nline.no 'nline.std := + cap.no 'cap.std := +} + +FUNCTION {std.status.using.period} +{ punct.period 'punct.std := + space.normal 'space.std := + quote.no 'quote.std := + nline.no 'nline.std := + cap.yes 'cap.std := +} + +FUNCTION {initialize.prev.this.status} +{ punct.no 'prev.status.punct := + space.no 'prev.status.space := + quote.no 'prev.status.quote := + nline.no 'prev.status.nline := + punct.no 'this.status.punct := + space.no 'this.status.space := + quote.no 'this.status.quote := + nline.no 'this.status.nline := + cap.yes 'status.cap := +} + +FUNCTION {this.status.std} +{ punct.std 'this.status.punct := + space.std 'this.status.space := + quote.std 'this.status.quote := + nline.std 'this.status.nline := +} + +FUNCTION {cap.status.std}{ cap.std 'status.cap := } + +FUNCTION {this.to.prev.status} +{ this.status.punct 'prev.status.punct := + this.status.space 'prev.status.space := + this.status.quote 'prev.status.quote := + this.status.nline 'prev.status.nline := +} + + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ { skip$ } + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + { skip$ } + if$ +} + + +% convert the strings "yes" or "no" to #1 or #0 respectively +FUNCTION {yes.no.to.int} +{ "l" change.case$ duplicate$ + "yes" = + { pop$ #1 } + { duplicate$ "no" = + { pop$ #0 } + { "unknown boolean " quote$ * swap$ * quote$ * + " in " * cite$ * warning$ + #0 + } + if$ + } + if$ +} + + +% pushes true if the single char string on the stack is in the +% range of "0" to "9" +FUNCTION {is.num} +{ chr.to.int$ + duplicate$ "0" chr.to.int$ < not + swap$ "9" chr.to.int$ > not and +} + +% multiplies the integer on the stack by a factor of 10 +FUNCTION {bump.int.mag} +{ #0 'multiresult := + { duplicate$ #0 > } + { #1 - + multiresult #10 + + 'multiresult := + } + while$ +pop$ +multiresult +} + +% converts a single character string on the stack to an integer +FUNCTION {char.to.integer} +{ duplicate$ + is.num + { chr.to.int$ "0" chr.to.int$ - } + {"noninteger character " quote$ * swap$ * quote$ * + " in integer field of " * cite$ * warning$ + #0 + } + if$ +} + +% converts a string on the stack to an integer +FUNCTION {string.to.integer} +{ duplicate$ text.length$ 'namesleft := + #1 'nameptr := + #0 'numnames := + { nameptr namesleft > not } + { duplicate$ nameptr #1 substring$ + char.to.integer numnames bump.int.mag + + 'numnames := + nameptr #1 + + 'nameptr := + } + while$ +pop$ +numnames +} + + + + +% The output routines write out the *next* to the top (previous) item on the +% stack, adding punctuation and such as needed. Since IEEEtran.bst maintains +% the output status for the top two items on the stack, these output +% routines have to consider the previous output status (which corresponds to +% the item that is being output). Full independent control of punctuation, +% closing quote marks, spacing, and newblock is provided. +% +% "output.nonnull" does not check for the presence of a previous empty +% item. +% +% "output" does check for the presence of a previous empty item and will +% remove an empty item rather than outputing it. +% +% "output.warn" is like "output", but will issue a warning if it detects +% an empty item. + +FUNCTION {output.nonnull} +{ swap$ + prev.status.punct punct.comma = + { "," * } + { skip$ } + if$ + prev.status.punct punct.period = + { add.period$ } + { skip$ } + if$ + prev.status.quote quote.close = + { "''" * } + { skip$ } + if$ + prev.status.space space.normal = + { " " * } + { skip$ } + if$ + prev.status.space space.large = + { large.space * } + { skip$ } + if$ + write$ + prev.status.nline nline.newblock = + { newline$ "\newblock " write$ } + { skip$ } + if$ +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {output.warn} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} + +% "fin.entry" is the output routine that handles the last item of the entry +% (which will be on the top of the stack when "fin.entry" is called). + +FUNCTION {fin.entry} +{ this.status.punct punct.no = + { skip$ } + { add.period$ } + if$ + this.status.quote quote.close = + { "''" * } + { skip$ } + if$ +write$ +newline$ +} + + +FUNCTION {is.last.char.not.punct} +{ duplicate$ + "}" * add.period$ + #-1 #1 substring$ "." = +} + +FUNCTION {is.multiple.pages} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {capitalize}{ "u" change.case$ "t" change.case$ } + +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "\emph{" swap$ * "}" * } + if$ +} + +FUNCTION {do.name.latex.cmd} +{ name.latex.cmd + empty$ + { skip$ } + { name.latex.cmd "{" * swap$ * "}" * } + if$ +} + +% IEEEtran.bst uses its own \BIBforeignlanguage command which directly +% invokes the TeX hyphenation patterns without the need of the Babel +% package. Babel does a lot more than switch hyphenation patterns and +% its loading can cause unintended effects in many class files (such as +% IEEEtran.cls). +FUNCTION {select.language} +{ duplicate$ empty$ 'pop$ + { language empty$ 'skip$ + { "\BIBforeignlanguage{" language * "}{" * swap$ * "}" * } + if$ + } + if$ +} + +FUNCTION {tie.or.space.prefix} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ +} + +FUNCTION {get.bbl.editor} +{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ } + +FUNCTION {space.word}{ " " swap$ * " " * } + + +% Field Conditioners, Converters, Checkers and External Interfaces + +FUNCTION {empty.field.to.null.string} +{ duplicate$ empty$ + { pop$ "" } + { skip$ } + if$ +} + +FUNCTION {either.or.check} +{ empty$ + { pop$ } + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {empty.entry.warn} +{ author empty$ title empty$ howpublished empty$ + month empty$ year empty$ note empty$ url empty$ + and and and and and and + { "all relevant fields are empty in " cite$ * warning$ } + 'skip$ + if$ +} + + +% The bibinfo system provides a way for the electronic parsing/acquisition +% of a bibliography's contents as is done by ReVTeX. For example, a field +% could be entered into the bibliography as: +% \bibinfo{volume}{2} +% Only the "2" would show up in the document, but the LaTeX \bibinfo command +% could do additional things with the information. IEEEtran.bst does provide +% a \bibinfo command via "\providecommand{\bibinfo}[2]{#2}". However, it is +% currently not used as the bogus bibinfo functions defined here output the +% entry values directly without the \bibinfo wrapper. The bibinfo functions +% themselves (and the calls to them) are retained for possible future use. +% +% bibinfo.check avoids acting on missing fields while bibinfo.warn will +% issue a warning message if a missing field is detected. Prior to calling +% the bibinfo functions, the user should push the field value and then its +% name string, in that order. + +FUNCTION {bibinfo.check} +{ swap$ duplicate$ missing$ + { pop$ pop$ "" } + { duplicate$ empty$ + { swap$ pop$ } + { swap$ pop$ } + if$ + } + if$ +} + +FUNCTION {bibinfo.warn} +{ swap$ duplicate$ missing$ + { swap$ "missing " swap$ * " in " * cite$ * warning$ pop$ "" } + { duplicate$ empty$ + { swap$ "empty " swap$ * " in " * cite$ * warning$ } + { swap$ pop$ } + if$ + } + if$ +} + + +% IEEE separates large numbers with more than 4 digits into groups of +% three. IEEE uses a small space to separate these number groups. +% Typical applications include patent and page numbers. + +% number of consecutive digits required to trigger the group separation. +FUNCTION {large.number.trigger}{ #5 } + +% For numbers longer than the trigger, this is the blocksize of the groups. +% The blocksize must be less than the trigger threshold, and 2 * blocksize +% must be greater than the trigger threshold (can't do more than one +% separation on the initial trigger). +FUNCTION {large.number.blocksize}{ #3 } + +% What is actually inserted between the number groups. +FUNCTION {large.number.separator}{ "\," } + +% So as to save on integer variables by reusing existing ones, numnames +% holds the current number of consecutive digits read and nameptr holds +% the number that will trigger an inserted space. +FUNCTION {large.number.separate} +{ 't := + "" + #0 'numnames := + large.number.trigger 'nameptr := + { t empty$ not } + { t #-1 #1 substring$ is.num + { numnames #1 + 'numnames := } + { #0 'numnames := + large.number.trigger 'nameptr := + } + if$ + t #-1 #1 substring$ swap$ * + t #-2 global.max$ substring$ 't := + numnames nameptr = + { duplicate$ #1 nameptr large.number.blocksize - substring$ swap$ + nameptr large.number.blocksize - #1 + global.max$ substring$ + large.number.separator swap$ * * + nameptr large.number.blocksize - 'numnames := + large.number.blocksize #1 + 'nameptr := + } + { skip$ } + if$ + } + while$ +} + +% Converts all single dashes "-" to double dashes "--". +FUNCTION {n.dashify} +{ large.number.separate + 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + + +% This function detects entries with names that are identical to that of +% the previous entry and replaces the repeated names with dashes (if the +% "is.dash.repeated.names" user control is nonzero). +FUNCTION {name.or.dash} +{ 's := + oldname empty$ + { s 'oldname := s } + { s oldname = + { is.dash.repeated.names + { repeated.name.dashes } + { s 'oldname := s } + if$ + } + { s 'oldname := s } + if$ + } + if$ +} + +% Converts the number string on the top of the stack to +% "numerical ordinal form" (e.g., "7" to "7th"). There is +% no artificial limit to the upper bound of the numbers as the +% least significant digit always determines the ordinal form. +FUNCTION {num.to.ordinal} +{ duplicate$ #-1 #1 substring$ "1" = + { bbl.st * } + { duplicate$ #-1 #1 substring$ "2" = + { bbl.nd * } + { duplicate$ #-1 #1 substring$ "3" = + { bbl.rd * } + { bbl.th * } + if$ + } + if$ + } + if$ +} + +% If the string on the top of the stack begins with a number, +% (e.g., 11th) then replace the string with the leading number +% it contains. Otherwise retain the string as-is. s holds the +% extracted number, t holds the part of the string that remains +% to be scanned. +FUNCTION {extract.num} +{ duplicate$ 't := + "" 's := + { t empty$ not } + { t #1 #1 substring$ + t #2 global.max$ substring$ 't := + duplicate$ is.num + { s swap$ * 's := } + { pop$ "" 't := } + if$ + } + while$ + s empty$ + 'skip$ + { pop$ s } + if$ +} + +% Converts the word number string on the top of the stack to +% Arabic string form. Will be successful up to "tenth". +FUNCTION {word.to.num} +{ duplicate$ "l" change.case$ 's := + s "first" = + { pop$ "1" } + { skip$ } + if$ + s "second" = + { pop$ "2" } + { skip$ } + if$ + s "third" = + { pop$ "3" } + { skip$ } + if$ + s "fourth" = + { pop$ "4" } + { skip$ } + if$ + s "fifth" = + { pop$ "5" } + { skip$ } + if$ + s "sixth" = + { pop$ "6" } + { skip$ } + if$ + s "seventh" = + { pop$ "7" } + { skip$ } + if$ + s "eighth" = + { pop$ "8" } + { skip$ } + if$ + s "ninth" = + { pop$ "9" } + { skip$ } + if$ + s "tenth" = + { pop$ "10" } + { skip$ } + if$ +} + + +% Converts the string on the top of the stack to numerical +% ordinal (e.g., "11th") form. +FUNCTION {convert.edition} +{ duplicate$ empty$ 'skip$ + { duplicate$ #1 #1 substring$ is.num + { extract.num + num.to.ordinal + } + { word.to.num + duplicate$ #1 #1 substring$ is.num + { num.to.ordinal } + { "edition ordinal word " quote$ * edition * quote$ * + " may be too high (or improper) for conversion" * " in " * cite$ * warning$ + } + if$ + } + if$ + } + if$ +} + + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LATEX BIBLIOGRAPHY CODE %% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {start.entry} +{ newline$ + "\bibitem{" write$ + cite$ write$ + "}" write$ + newline$ + "" + initialize.prev.this.status +} + +% Here we write out all the LaTeX code that we will need. The most involved +% code sequences are those that control the alternate interword spacing and +% foreign language hyphenation patterns. The heavy use of \providecommand +% gives users a way to override the defaults. Special thanks to Javier Bezos, +% Johannes Braams, Robin Fairbairns, Heiko Oberdiek, Donald Arseneau and all +% the other gurus on comp.text.tex for their help and advice on the topic of +% \selectlanguage, Babel and BibTeX. +FUNCTION {begin.bib} +{ "% Generated by IEEEtran.bst, version: " bst.file.version * " (" * bst.file.date * ")" * + write$ newline$ + preamble$ empty$ 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{" longest.label * "}" * + write$ newline$ + "\providecommand{\url}[1]{#1}" + write$ newline$ + "\csname url@samestyle\endcsname" + write$ newline$ + "\providecommand{\newblock}{\relax}" + write$ newline$ + "\providecommand{\bibinfo}[2]{#2}" + write$ newline$ + "\providecommand{\BIBentrySTDinterwordspacing}{\spaceskip=0pt\relax}" + write$ newline$ + "\providecommand{\BIBentryALTinterwordstretchfactor}{" + ALTinterwordstretchfactor * "}" * + write$ newline$ + "\providecommand{\BIBentryALTinterwordspacing}{\spaceskip=\fontdimen2\font plus " + write$ newline$ + "\BIBentryALTinterwordstretchfactor\fontdimen3\font minus \fontdimen4\font\relax}" + write$ newline$ + "\providecommand{\BIBforeignlanguage}[2]{{%" + write$ newline$ + "\expandafter\ifx\csname l@#1\endcsname\relax" + write$ newline$ + "\typeout{** WARNING: IEEEtran.bst: No hyphenation pattern has been}%" + write$ newline$ + "\typeout{** loaded for the language `#1'. Using the pattern for}%" + write$ newline$ + "\typeout{** the default language instead.}%" + write$ newline$ + "\else" + write$ newline$ + "\language=\csname l@#1\endcsname" + write$ newline$ + "\fi" + write$ newline$ + "#2}}" + write$ newline$ + "\providecommand{\BIBdecl}{\relax}" + write$ newline$ + "\BIBdecl" + write$ newline$ +} + +FUNCTION {end.bib} +{ newline$ "\end{thebibliography}" write$ newline$ } + +FUNCTION {if.url.alt.interword.spacing} +{ is.use.alt.interword.spacing + {url empty$ 'skip$ {"\BIBentryALTinterwordspacing" write$ newline$} if$} + { skip$ } + if$ +} + +FUNCTION {if.url.std.interword.spacing} +{ is.use.alt.interword.spacing + {url empty$ 'skip$ {"\BIBentrySTDinterwordspacing" write$ newline$} if$} + { skip$ } + if$ +} + + + + +%%%%%%%%%%%%%%%%%%%%%%%% +%% LONGEST LABEL PASS %% +%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #1 'number.label := + #0 'longest.label.width := +} + +FUNCTION {longest.label.pass} +{ type$ "ieeetranbstctl" = + { skip$ } + { number.label int.to.str$ 'label := + number.label #1 + 'number.label := + label width$ longest.label.width > + { label 'longest.label := + label width$ 'longest.label.width := + } + { skip$ } + if$ + } + if$ +} + + + + +%%%%%%%%%%%%%%%%%%%%% +%% FORMAT HANDLERS %% +%%%%%%%%%%%%%%%%%%%%% + +%% Lower Level Formats (used by higher level formats) + +FUNCTION {format.address.org.or.pub.date} +{ 't := + "" + year empty$ + { "empty year in " cite$ * warning$ } + { skip$ } + if$ + address empty$ t empty$ and + year empty$ and month empty$ and + { skip$ } + { this.to.prev.status + this.status.std + cap.status.std + address "address" bibinfo.check * + t empty$ + { skip$ } + { punct.period 'prev.status.punct := + space.large 'prev.status.space := + address empty$ + { skip$ } + { ": " * } + if$ + t * + } + if$ + year empty$ month empty$ and + { skip$ } + { t empty$ address empty$ and + { skip$ } + { ", " * } + if$ + month empty$ + { year empty$ + { skip$ } + { year "year" bibinfo.check * } + if$ + } + { month "month" bibinfo.check * + year empty$ + { skip$ } + { " " * year "year" bibinfo.check * } + if$ + } + if$ + } + if$ + } + if$ +} + + +FUNCTION {format.names} +{ 'bibinfo := + duplicate$ empty$ 'skip$ { + this.to.prev.status + this.status.std + 's := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + name.format.string + format.name$ + bibinfo bibinfo.check + 't := + nameptr #1 > + { nameptr num.names.shown.with.forced.et.al #1 + = + numnames max.num.names.before.forced.et.al > + is.forced.et.al and and + { "others" 't := + #1 'namesleft := + } + { skip$ } + if$ + namesleft #1 > + { ", " * t do.name.latex.cmd * } + { s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { " " * bbl.etal emphasize * } + { numnames #2 > + { "," * } + { skip$ } + if$ + bbl.and + space.word * t do.name.latex.cmd * + } + if$ + } + if$ + } + { t do.name.latex.cmd } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + cap.status.std + } if$ +} + + + + +%% Higher Level Formats + +%% addresses/locations + +FUNCTION {format.address} +{ address duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + cap.status.std + } + if$ +} + + + +%% author/editor names + +FUNCTION {format.authors}{ author "author" format.names } + +FUNCTION {format.editors} +{ editor "editor" format.names duplicate$ empty$ 'skip$ + { ", " * + get.bbl.editor + capitalize + * + } + if$ +} + + + +%% date + +FUNCTION {format.date} +{ + month "month" bibinfo.check duplicate$ empty$ + year "year" bibinfo.check duplicate$ empty$ + { swap$ 'skip$ + { this.to.prev.status + this.status.std + cap.status.std + "there's a month but no year in " cite$ * warning$ } + if$ + * + } + { this.to.prev.status + this.status.std + cap.status.std + swap$ 'skip$ + { + swap$ + " " * swap$ + } + if$ + * + } + if$ +} + +FUNCTION {format.date.electronic} +{ month "month" bibinfo.check duplicate$ empty$ + year "year" bibinfo.check duplicate$ empty$ + { swap$ + { pop$ } + { "there's a month but no year in " cite$ * warning$ + pop$ ")" * "(" swap$ * + this.to.prev.status + punct.no 'this.status.punct := + space.normal 'this.status.space := + quote.no 'this.status.quote := + cap.yes 'status.cap := + } + if$ + } + { swap$ + { swap$ pop$ ")" * "(" swap$ * } + { "(" swap$ * ", " * swap$ * ")" * } + if$ + this.to.prev.status + punct.no 'this.status.punct := + space.normal 'this.status.space := + quote.no 'this.status.quote := + cap.yes 'status.cap := + } + if$ +} + + + +%% edition/title + +% Note: IEEE considers the edition to be closely associated with +% the title of a book. So, in IEEEtran.bst the edition is normally handled +% within the formatting of the title. The format.edition function is +% retained here for possible future use. +FUNCTION {format.edition} +{ edition duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + convert.edition + status.cap + { "t" } + { "l" } + if$ change.case$ + "edition" bibinfo.check + "~" * bbl.edition * + cap.status.std + } + if$ +} + +% This is used to format the booktitle of a conference proceedings. +% Here we use the "intype" field to provide the user a way to +% override the word "in" (e.g., with things like "presented at") +% Use of intype stops the emphasis of the booktitle to indicate that +% we no longer mean the written conference proceedings, but the +% conference itself. +FUNCTION {format.in.booktitle} +{ booktitle "booktitle" bibinfo.check duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + select.language + intype missing$ + { emphasize + bbl.in " " * + } + { intype " " * } + if$ + swap$ * + cap.status.std + } + if$ +} + +% This is used to format the booktitle of collection. +% Here the "intype" field is not supported, but "edition" is. +FUNCTION {format.in.booktitle.edition} +{ booktitle "booktitle" bibinfo.check duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + select.language + emphasize + edition empty$ 'skip$ + { ", " * + edition + convert.edition + "l" change.case$ + * "~" * bbl.edition * + } + if$ + bbl.in " " * swap$ * + cap.status.std + } + if$ +} + +FUNCTION {format.article.title} +{ title duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + "t" change.case$ + } + if$ + "title" bibinfo.check + duplicate$ empty$ 'skip$ + { quote.close 'this.status.quote := + is.last.char.not.punct + { punct.std 'this.status.punct := } + { punct.no 'this.status.punct := } + if$ + select.language + "``" swap$ * + cap.status.std + } + if$ +} + +FUNCTION {format.article.title.electronic} +{ title duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + cap.status.std + "t" change.case$ + } + if$ + "title" bibinfo.check + duplicate$ empty$ + { skip$ } + { select.language } + if$ +} + +FUNCTION {format.book.title.edition} +{ title "title" bibinfo.check + duplicate$ empty$ + { "empty title in " cite$ * warning$ } + { this.to.prev.status + this.status.std + select.language + emphasize + edition empty$ 'skip$ + { ", " * + edition + convert.edition + status.cap + { "t" } + { "l" } + if$ + change.case$ + * "~" * bbl.edition * + } + if$ + cap.status.std + } + if$ +} + +FUNCTION {format.book.title} +{ title "title" bibinfo.check + duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + cap.status.std + select.language + emphasize + } + if$ +} + + + +%% journal + +FUNCTION {format.journal} +{ journal duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + cap.status.std + select.language + emphasize + } + if$ +} + + + +%% how published + +FUNCTION {format.howpublished} +{ howpublished duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + cap.status.std + } + if$ +} + + + +%% institutions/organization/publishers/school + +FUNCTION {format.institution} +{ institution duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + cap.status.std + } + if$ +} + +FUNCTION {format.organization} +{ organization duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + cap.status.std + } + if$ +} + +FUNCTION {format.address.publisher.date} +{ publisher "publisher" bibinfo.warn format.address.org.or.pub.date } + +FUNCTION {format.address.publisher.date.nowarn} +{ publisher "publisher" bibinfo.check format.address.org.or.pub.date } + +FUNCTION {format.address.organization.date} +{ organization "organization" bibinfo.check format.address.org.or.pub.date } + +FUNCTION {format.school} +{ school duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + cap.status.std + } + if$ +} + + + +%% volume/number/series/chapter/pages + +FUNCTION {format.volume} +{ volume empty.field.to.null.string + duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + bbl.volume + status.cap + { capitalize } + { skip$ } + if$ + swap$ tie.or.space.prefix + "volume" bibinfo.check + * * + cap.status.std + } + if$ +} + +FUNCTION {format.number} +{ number empty.field.to.null.string + duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + status.cap + { bbl.number capitalize } + { bbl.number } + if$ + swap$ tie.or.space.prefix + "number" bibinfo.check + * * + cap.status.std + } + if$ +} + +FUNCTION {format.number.if.use.for.article} +{ is.use.number.for.article + { format.number } + { "" } + if$ +} + +% IEEE does not seem to tie the series so closely with the volume +% and number as is done in other bibliography styles. Instead the +% series is treated somewhat like an extension of the title. +FUNCTION {format.series} +{ series empty$ + { "" } + { this.to.prev.status + this.status.std + bbl.series " " * + series "series" bibinfo.check * + cap.status.std + } + if$ +} + + +FUNCTION {format.chapter} +{ chapter empty$ + { "" } + { this.to.prev.status + this.status.std + type empty$ + { bbl.chapter } + { type "l" change.case$ + "type" bibinfo.check + } + if$ + chapter tie.or.space.prefix + "chapter" bibinfo.check + * * + cap.status.std + } + if$ +} + + +% The intended use of format.paper is for paper numbers of inproceedings. +% The paper type can be overridden via the type field. +% We allow the type to be displayed even if the paper number is absent +% for things like "postdeadline paper" +FUNCTION {format.paper} +{ is.use.paper + { paper empty$ + { type empty$ + { "" } + { this.to.prev.status + this.status.std + type "type" bibinfo.check + cap.status.std + } + if$ + } + { this.to.prev.status + this.status.std + type empty$ + { bbl.paper } + { type "type" bibinfo.check } + if$ + " " * paper + "paper" bibinfo.check + * + cap.status.std + } + if$ + } + { "" } + if$ +} + + +FUNCTION {format.pages} +{ pages duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + duplicate$ is.multiple.pages + { + bbl.pages swap$ + n.dashify + } + { + bbl.page swap$ + } + if$ + tie.or.space.prefix + "pages" bibinfo.check + * * + cap.status.std + } + if$ +} + + + +%% technical report number + +FUNCTION {format.tech.report.number} +{ number "number" bibinfo.check + this.to.prev.status + this.status.std + cap.status.std + type duplicate$ empty$ + { pop$ + bbl.techrep + } + { skip$ } + if$ + "type" bibinfo.check + swap$ duplicate$ empty$ + { pop$ } + { tie.or.space.prefix * * } + if$ +} + + + +%% note + +FUNCTION {format.note} +{ note empty$ + { "" } + { this.to.prev.status + this.status.std + punct.period 'this.status.punct := + note #1 #1 substring$ + duplicate$ "{" = + { skip$ } + { status.cap + { "u" } + { "l" } + if$ + change.case$ + } + if$ + note #2 global.max$ substring$ * "note" bibinfo.check + cap.yes 'status.cap := + } + if$ +} + + + +%% patent + +FUNCTION {format.patent.date} +{ this.to.prev.status + this.status.std + year empty$ + { monthfiled duplicate$ empty$ + { "monthfiled" bibinfo.check pop$ "" } + { "monthfiled" bibinfo.check } + if$ + dayfiled duplicate$ empty$ + { "dayfiled" bibinfo.check pop$ "" * } + { "dayfiled" bibinfo.check + monthfiled empty$ + { "dayfiled without a monthfiled in " cite$ * warning$ + * + } + { " " swap$ * * } + if$ + } + if$ + yearfiled empty$ + { "no year or yearfiled in " cite$ * warning$ } + { yearfiled "yearfiled" bibinfo.check + swap$ + duplicate$ empty$ + { pop$ } + { ", " * swap$ * } + if$ + } + if$ + } + { month duplicate$ empty$ + { "month" bibinfo.check pop$ "" } + { "month" bibinfo.check } + if$ + day duplicate$ empty$ + { "day" bibinfo.check pop$ "" * } + { "day" bibinfo.check + month empty$ + { "day without a month in " cite$ * warning$ + * + } + { " " swap$ * * } + if$ + } + if$ + year "year" bibinfo.check + swap$ + duplicate$ empty$ + { pop$ } + { ", " * swap$ * } + if$ + } + if$ + cap.status.std +} + +FUNCTION {format.patent.nationality.type.number} +{ this.to.prev.status + this.status.std + nationality duplicate$ empty$ + { "nationality" bibinfo.warn pop$ "" } + { "nationality" bibinfo.check + duplicate$ "l" change.case$ "united states" = + { pop$ bbl.patentUS } + { skip$ } + if$ + " " * + } + if$ + type empty$ + { bbl.patent "type" bibinfo.check } + { type "type" bibinfo.check } + if$ + * + number duplicate$ empty$ + { "number" bibinfo.warn pop$ } + { "number" bibinfo.check + large.number.separate + swap$ " " * swap$ * + } + if$ + cap.status.std +} + + + +%% standard + +FUNCTION {format.organization.institution.standard.type.number} +{ this.to.prev.status + this.status.std + organization duplicate$ empty$ + { pop$ + institution duplicate$ empty$ + { "institution" bibinfo.warn } + { "institution" bibinfo.warn " " * } + if$ + } + { "organization" bibinfo.warn " " * } + if$ + type empty$ + { bbl.standard "type" bibinfo.check } + { type "type" bibinfo.check } + if$ + * + number duplicate$ empty$ + { "number" bibinfo.check pop$ } + { "number" bibinfo.check + large.number.separate + swap$ " " * swap$ * + } + if$ + cap.status.std +} + +FUNCTION {format.revision} +{ revision empty$ + { "" } + { this.to.prev.status + this.status.std + bbl.revision + revision tie.or.space.prefix + "revision" bibinfo.check + * * + cap.status.std + } + if$ +} + + +%% thesis + +FUNCTION {format.master.thesis.type} +{ this.to.prev.status + this.status.std + type empty$ + { + bbl.mthesis + } + { + type "type" bibinfo.check + } + if$ +cap.status.std +} + +FUNCTION {format.phd.thesis.type} +{ this.to.prev.status + this.status.std + type empty$ + { + bbl.phdthesis + } + { + type "type" bibinfo.check + } + if$ +cap.status.std +} + + + +%% URL + +FUNCTION {format.url} +{ url empty$ + { "" } + { this.to.prev.status + this.status.std + cap.yes 'status.cap := + name.url.prefix " " * + "\url{" * url * "}" * + punct.no 'this.status.punct := + punct.period 'prev.status.punct := + space.normal 'this.status.space := + space.normal 'prev.status.space := + quote.no 'this.status.quote := + } + if$ +} + + + + +%%%%%%%%%%%%%%%%%%%% +%% ENTRY HANDLERS %% +%%%%%%%%%%%%%%%%%%%% + + +% Note: In many journals, IEEE (or the authors) tend not to show the number +% for articles, so the display of the number is controlled here by the +% switch "is.use.number.for.article" +FUNCTION {article} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors "author" output.warn + name.or.dash + format.article.title "title" output.warn + format.journal "journal" bibinfo.check "journal" output.warn + format.volume output + format.number.if.use.for.article output + format.pages output + format.date "year" output.warn + format.note output + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {book} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + author empty$ + { format.editors "author and editor" output.warn } + { format.authors output.nonnull } + if$ + name.or.dash + format.book.title.edition output + format.series output + author empty$ + { skip$ } + { format.editors output } + if$ + format.address.publisher.date output + format.volume output + format.number output + format.note output + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {booklet} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors output + name.or.dash + format.article.title "title" output.warn + format.howpublished "howpublished" bibinfo.check output + format.organization "organization" bibinfo.check output + format.address "address" bibinfo.check output + format.date output + format.note output + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {electronic} +{ std.status.using.period + start.entry + if.url.alt.interword.spacing + format.authors output + name.or.dash + format.date.electronic output + format.article.title.electronic output + format.howpublished "howpublished" bibinfo.check output + format.organization "organization" bibinfo.check output + format.address "address" bibinfo.check output + format.note output + format.url output + fin.entry + empty.entry.warn + if.url.std.interword.spacing +} + +FUNCTION {inbook} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + author empty$ + { format.editors "author and editor" output.warn } + { format.authors output.nonnull } + if$ + name.or.dash + format.book.title.edition output + format.series output + format.address.publisher.date output + format.volume output + format.number output + format.chapter output + format.pages output + format.note output + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {incollection} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors "author" output.warn + name.or.dash + format.article.title "title" output.warn + format.in.booktitle.edition "booktitle" output.warn + format.series output + format.editors output + format.address.publisher.date.nowarn output + format.volume output + format.number output + format.chapter output + format.pages output + format.note output + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {inproceedings} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors "author" output.warn + name.or.dash + format.article.title "title" output.warn + format.in.booktitle "booktitle" output.warn + format.series output + format.editors output + format.volume output + format.number output + publisher empty$ + { format.address.organization.date output } + { format.organization "organization" bibinfo.check output + format.address.publisher.date output + } + if$ + format.paper output + format.pages output + format.note output + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {manual} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors output + name.or.dash + format.book.title.edition "title" output.warn + format.howpublished "howpublished" bibinfo.check output + format.organization "organization" bibinfo.check output + format.address "address" bibinfo.check output + format.date output + format.note output + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {mastersthesis} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors "author" output.warn + name.or.dash + format.article.title "title" output.warn + format.master.thesis.type output.nonnull + format.school "school" bibinfo.warn output + format.address "address" bibinfo.check output + format.date "year" output.warn + format.note output + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {misc} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors output + name.or.dash + format.article.title output + format.howpublished "howpublished" bibinfo.check output + format.organization "organization" bibinfo.check output + format.address "address" bibinfo.check output + format.pages output + format.date output + format.note output + format.url output + fin.entry + empty.entry.warn + if.url.std.interword.spacing +} + +FUNCTION {patent} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors output + name.or.dash + format.article.title output + format.patent.nationality.type.number output + format.patent.date output + format.note output + format.url output + fin.entry + empty.entry.warn + if.url.std.interword.spacing +} + +FUNCTION {periodical} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.editors output + name.or.dash + format.book.title "title" output.warn + format.series output + format.volume output + format.number output + format.organization "organization" bibinfo.check output + format.date "year" output.warn + format.note output + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {phdthesis} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors "author" output.warn + name.or.dash + format.article.title "title" output.warn + format.phd.thesis.type output.nonnull + format.school "school" bibinfo.warn output + format.address "address" bibinfo.check output + format.date "year" output.warn + format.note output + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {proceedings} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.editors output + name.or.dash + format.book.title "title" output.warn + format.series output + format.volume output + format.number output + publisher empty$ + { format.address.organization.date output } + { format.organization "organization" bibinfo.check output + format.address.publisher.date output + } + if$ + format.note output + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {standard} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors output + name.or.dash + format.book.title "title" output.warn + format.howpublished "howpublished" bibinfo.check output + format.organization.institution.standard.type.number output + format.revision output + format.date output + format.note output + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {techreport} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors "author" output.warn + name.or.dash + format.article.title "title" output.warn + format.howpublished "howpublished" bibinfo.check output + format.institution "institution" bibinfo.warn output + format.address "address" bibinfo.check output + format.tech.report.number output.nonnull + format.date "year" output.warn + format.note output + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {unpublished} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors "author" output.warn + name.or.dash + format.article.title "title" output.warn + format.date output + format.note "note" output.warn + format.url output + fin.entry + if.url.std.interword.spacing +} + + +% The special entry type which provides the user interface to the +% BST controls +FUNCTION {IEEEtranBSTCTL} +{ is.print.banners.to.terminal + { "** IEEEtran BST control entry " quote$ * cite$ * quote$ * " detected." * + top$ + } + { skip$ } + if$ + CTLuse_article_number + empty$ + { skip$ } + { CTLuse_article_number + yes.no.to.int + 'is.use.number.for.article := + } + if$ + CTLuse_paper + empty$ + { skip$ } + { CTLuse_paper + yes.no.to.int + 'is.use.paper := + } + if$ + CTLuse_forced_etal + empty$ + { skip$ } + { CTLuse_forced_etal + yes.no.to.int + 'is.forced.et.al := + } + if$ + CTLmax_names_forced_etal + empty$ + { skip$ } + { CTLmax_names_forced_etal + string.to.integer + 'max.num.names.before.forced.et.al := + } + if$ + CTLnames_show_etal + empty$ + { skip$ } + { CTLnames_show_etal + string.to.integer + 'num.names.shown.with.forced.et.al := + } + if$ + CTLuse_alt_spacing + empty$ + { skip$ } + { CTLuse_alt_spacing + yes.no.to.int + 'is.use.alt.interword.spacing := + } + if$ + CTLalt_stretch_factor + empty$ + { skip$ } + { CTLalt_stretch_factor + 'ALTinterwordstretchfactor := + "\renewcommand{\BIBentryALTinterwordstretchfactor}{" + ALTinterwordstretchfactor * "}" * + write$ newline$ + } + if$ + CTLdash_repeated_names + empty$ + { skip$ } + { CTLdash_repeated_names + yes.no.to.int + 'is.dash.repeated.names := + } + if$ + CTLname_format_string + empty$ + { skip$ } + { CTLname_format_string + 'name.format.string := + } + if$ + CTLname_latex_cmd + empty$ + { skip$ } + { CTLname_latex_cmd + 'name.latex.cmd := + } + if$ + CTLname_url_prefix + missing$ + { skip$ } + { CTLname_url_prefix + 'name.url.prefix := + } + if$ + + + num.names.shown.with.forced.et.al max.num.names.before.forced.et.al > + { "CTLnames_show_etal cannot be greater than CTLmax_names_forced_etal in " cite$ * warning$ + max.num.names.before.forced.et.al 'num.names.shown.with.forced.et.al := + } + { skip$ } + if$ +} + + +%%%%%%%%%%%%%%%%%%% +%% ENTRY ALIASES %% +%%%%%%%%%%%%%%%%%%% +FUNCTION {conference}{inproceedings} +FUNCTION {online}{electronic} +FUNCTION {internet}{electronic} +FUNCTION {webpage}{electronic} +FUNCTION {www}{electronic} +FUNCTION {default.type}{misc} + + + +%%%%%%%%%%%%%%%%%% +%% MAIN PROGRAM %% +%%%%%%%%%%%%%%%%%% + +READ + +EXECUTE {initialize.controls} +EXECUTE {initialize.status.constants} +EXECUTE {banner.message} + +EXECUTE {initialize.longest.label} +ITERATE {longest.label.pass} + +EXECUTE {begin.bib} +ITERATE {call.type$} +EXECUTE {end.bib} + +EXECUTE{completed.message} + + +%% That's all folks, mds. diff --git a/IEEEtran.cls b/paper-source/IEEEtran.cls similarity index 100% rename from IEEEtran.cls rename to paper-source/IEEEtran.cls diff --git a/IEEEtran_HOWTO.pdf b/paper-source/IEEEtran_HOWTO.pdf similarity index 100% rename from IEEEtran_HOWTO.pdf rename to paper-source/IEEEtran_HOWTO.pdf diff --git a/bn_example_table.png b/paper-source/bn_example_table.png similarity index 100% rename from bn_example_table.png rename to paper-source/bn_example_table.png diff --git a/bn_repressilator.png b/paper-source/bn_repressilator.png similarity index 100% rename from bn_repressilator.png rename to paper-source/bn_repressilator.png diff --git a/diff.tex b/paper-source/diff.tex similarity index 100% rename from diff.tex rename to paper-source/diff.tex diff --git a/edge_vs_hyperedge.png b/paper-source/edge_vs_hyperedge.png similarity index 100% rename from edge_vs_hyperedge.png rename to paper-source/edge_vs_hyperedge.png diff --git a/paper.tex b/paper-source/paper.tex similarity index 100% rename from paper.tex rename to paper-source/paper.tex diff --git a/references.bib b/paper-source/references.bib similarity index 100% rename from references.bib rename to paper-source/references.bib diff --git a/repressilator_async.pdf b/paper-source/repressilator_async.pdf similarity index 100% rename from repressilator_async.pdf rename to paper-source/repressilator_async.pdf diff --git a/repressilator_prob025.pdf b/paper-source/repressilator_prob025.pdf similarity index 100% rename from repressilator_prob025.pdf rename to paper-source/repressilator_prob025.pdf