├── PROPOSAL.md
├── README.md
├── REVIEW.md
├── TALK.md
├── homework
├── hw1
│ ├── demo_string_enumerator_problem1.py
│ ├── demo_string_enumerator_problem2.py
│ ├── hw1.md
│ ├── simplestring1.tyrell
│ └── simplestring2.tyrell
├── hw2
│ └── hw2.md
└── hw3
│ ├── hw3.md
│ └── res
│ ├── example-question.png
│ ├── morpheus-dsl-example.png
│ └── morpheus-dsl.png
├── lectures
├── lecture1.pdf
├── lecture10.pdf
├── lecture11.pdf
├── lecture12.pdf
├── lecture13.pdf
├── lecture2.pdf
├── lecture3.pdf
├── lecture4.pdf
├── lecture5.pdf
├── lecture6.pdf
├── lecture7.pdf
├── lecture8.pdf
└── lecture9.pdf
├── poster
├── .DS_Store
├── Makefile
├── baposter.cls
├── dd.smt2
├── images
│ ├── .DS_Store
│ ├── bsi_res.pdf
│ ├── chart.png
│ ├── code-hunter.pdf
│ ├── example.png
│ ├── hunter.pdf
│ ├── logo.png
│ ├── logo1.jpeg
│ ├── logo2.png
│ ├── pintu.jpg
│ ├── pliny.png
│ ├── taiji.png
│ ├── ut.png
│ └── viz-overview.png
├── lijuan.aux
├── lijuan.log
├── lijuan.pdf
├── lijuan.tex
└── muse.tex
└── report
├── .DS_Store
├── Makefile
├── abstract.tex
├── algorithm.tex
├── concl.tex
├── eval.tex
├── impl.tex
├── intro.tex
├── macros.tex
├── main.bib
├── main.tex
├── overview.tex
├── problem.tex
└── related.tex
/PROPOSAL.md:
--------------------------------------------------------------------------------
1 | # Tips for writing a project proposal
2 |
3 | 1. Define the problem. What is it? Why is it important?
4 | 2. Give a motivating running example to illustrate the problem.
5 | 3. What are the challenges in your project?
6 | 4. What is the tentative solution for this problem?
7 | 5. How do you evaluate the successfulness of your approach? What are the data set or benchmarks? Are you comparing other tools?
8 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # CS190I Program Synthesis for the Masses
2 |
3 | The goal of this course is to give an introduction to program synthesis, a new field at the intersection of programming languages, software engineering, and AI. The course will explore a number of fundamental questions around the problem of how to automatically discover programs that do what the user expects. In particular, we will explore program synthesis in the context of attack synthesis for smart contracts, as well as program-by-example for data visualization and data wrangling.
4 |
5 | The workloads include 3 programming assignments, 4 paper reviews, and a poster session for the final project.
6 |
7 | # Office hour
8 | Instructor : Yu Feng (yufeng@UCSBCS)
9 |
10 | TA : Yanju Chen (yanju@UCSBCS)
11 |
12 | Class: M,Wed, 9:15am, Zoom
13 |
14 | Instructor's office hour: Fri, 9am-10am
15 |
16 | TA's office hour: Mon, 4pm-5pm, Zoom, or by Appointment
17 |
18 | Slack: https://join.slack.com/t/cs190i-spring21/shared_invite/zt-nw9earis-ot5icSlSAUGOqUewDV8lzg
19 |
20 |
21 | | Date | Topic | Slides | Read | Out | Due |
22 | |-------|-----------------------------------------------|--------|------|-----|-----|
23 | | 3/29 | Welcome & Course Overview | [lec1](lectures/lecture1.pdf) | | | |
24 | | 3/31 | Solver-Aided Synthesis I (Rosette) | [lec2](lectures/lecture2.pdf) | | | |
25 | | 4/5 | Solver-Aided Synthesis I (Neo) | [lec3](lectures/lecture3.pdf) | R1 | | |
26 | | 4/7 | Introduction to SMT and CFG | [lec4](lectures/lecture4.pdf) | | [HW1](homework/hw1/hw1.md) | |
27 | | 4/12 | Introduction to Inductive Synthesis | [lec5](lectures/lecture5.pdf) | R2 | | R1 |
28 | | 4/14 | Enumerative Synthesis | [lec6](lectures/lecture6.pdf) | | | |
29 | | 4/19 | Component-based Synthesis | [lec7](lectures/lecture7.pdf) | | | HW1 |
30 | | 4/21 | Speed-up Synthesis with Abstract Semantics | [lec8](lectures/lecture8.pdf) | R3 | [HW2](homework/hw2/hw2.md) | R2 |
31 | | 4/26 | Synthesis with Deep Learning | [lec9](lectures/lecture9.pdf) | Proposal | | |
32 | | 4/28 | Multi-model Program Synthesis | [lec10](lectures/lecture10.pdf) | | | R3 |
33 | | 5/3 | Inductive Synthesis with Stochastic Search | [lec11](lectures/lecture11.pdf) | | | HW2 |
34 | | 5/5 | Case I: Visualization Synthesis | [lec12](lectures/lecture12.pdf) | | | Proposal (2 pages) |
35 | | 5/10 | Case II: Attack Synthesis for Smart Contracts | [lec13](lectures/lecture13.pdf) | R4 | | |
36 | | 5/12 | Counter-example Guided Synthesis | [lec14](#) | | [HW3](homework/hw3/hw3.md) | |
37 | | 5/17 | Combine ML with Deductive Reasoning | | | | |
38 | | 5/19 | Interactive Synthesis with Human in the Loop | | | | |
39 | | 5/24 | Deductive Synthesis | | | | R4, Poster (PDF) |
40 | | 5/26 | Virtual Poster Session | | | | HW3 |
41 | | 5/31 | Memorial Day | | | | |
42 | | 6/2 | Final week, no class | | | | Final Report (8 pages) |
43 |
44 |
45 | # Grading
46 |
47 | 1. Programming assignments: 30%
48 | 1. 3 programming assignments, 10% each
49 |
50 | 2. Paper reviews: 20%
51 | 1. 4 papers, 5% each
52 |
53 | 3. Final project: 50%
54 | 1. Team formed by deadline: 5%
55 | 2. 1-page project proposal: 15%
56 | 3. Project presentation: 15%
57 | 4. Final report: 15%
58 |
59 |
60 | Below is a grading system used by CS190I (No curving).
61 |
62 | | Letter | Percentage |
63 | |--------|------------|
64 | | A+ | 95–100% |
65 | | A | 90–94% |
66 | | A- | 85–89% |
67 | | B+ | 80–84% |
68 | | B | 75–79% |
69 | | B- | 70–74% |
70 | | C+ | 65–69% |
71 | | C | 60–64% |
72 | | F | <60% |
73 |
74 | Credit: https://en.wikipedia.org/wiki/Academic_grading_in_the_United_States
75 |
76 |
77 | ### Submission
78 | 1. Please submit your homework to gradescope: https://www.gradescope.com
79 | 2. All paper reviews should be in PDF.
80 |
81 |
82 | # Homework
83 |
84 | 1. [Homework1](homework/hw1/hw1.md)
85 | 2. [Homework2](homework/hw2/hw2.md)
86 | 3. [Homework3](homework/hw3/hw3.md)
87 |
88 |
89 | # Reading assignments
90 | 1. A Lightweight Symbolic Virtual Machine for Solver-Aided Host Languages. Emina Torlak and Rastislav Bodik. PLDI'14.
91 | 2. Program synthesis using conflict-driven learning. Yu Feng, Ruben Martins, Osbert Bastani, and Isil Dillig. PLDI'18. **Distinguished Paper Award**
92 | 3. Scaling symbolic evaluation for automated verification of systems code with Serval. Luke Nelson, James Bornholt, Ronghui Gu, Andrew Baumann, Emina Torlak, and Xi Wang. SOSP'2019. **Best Paper Award**
93 | 4. Schkufza et.al. Stochastic Superoptimization. ASPLOS'13
94 |
95 |
96 | Tips for writing paper [reviews](REVIEW.md).
97 |
98 | Tips for writing a project [proposal](PROPOSAL.md).
99 |
100 | # References
101 |
102 | - Rondon, Patrick M., Ming Kawaguci, and Ranjit Jhala. "Liquid types." PLDI'2008.
103 |
104 | - Ali Sinan Köksal, Yewen Pu, Saurabh Srivastava, Rastislav Bodík, Jasmin Fisher, Nir Piterman. Synthesis of biological models from mutation experiments. Principles of Programming Languages (POPL). 2013. ACM DL
105 |
106 | - Srivastava, Saurabh, Sumit Gulwani, and Jeffrey S. Foster. From program verification to program synthesis. POPL 2010.
107 |
108 | - Jha, Susmit, et al. Oracle-guided component-based program synthesis. ICSE 2010.
109 |
110 | - Gulwani, Sumit. Automating string processing in spreadsheets using input-output examples. POPL 2011.
111 |
112 | - Phothilimthana, Phitchaya Mangpo, et al. "Scaling up superoptimization." ASPLOS 2016.
113 |
114 | - Chandra, Kartik, and Rastislav Bodik. Bonsai: synthesis-based reasoning for type systems. POPL 2017.
115 |
116 | - Bornholt, James, et al. Optimizing synthesis with metasketches. POPL 2016.
117 |
118 | - Yaghmazadeh, Navid, et al. SQLizer: query synthesis from natural language. OOPSLA 2017. **Distinguished Paper Award**
119 |
120 | - Deepcoder: Learning to write programs. Matej, et al. ICLR'16.
121 |
122 | - Helgi Sigurbjarnarson, James Bornholt, Emina Torlak, and Xi Wang. Push-Button Verification of File Systems via Crash Refinement. OSDI 2016. **Best Paper Award**
123 |
124 | - Shaon Barman, Sarah E. Chasins, Rastislav Bodik, Sumit Gulwani. Ringer: web automation by demonstration. OOPSLA 2016.
125 |
126 | - Luke Nelson, Jacob Van Geffen, Emina Torlak, and Xi Wang. Specification and verification in the field: Applying formal methods to BPF just-in-time compilers in the Linux kernel. OSDI 2020.
127 |
128 | - Chenming Wu, Haisen Zhao, Chandrakana Nandi, Jeff Lipton, Zachary Tatlock, Adriana Schulz. Carpentry Compiler. SIGGRAPH ASIA 2019.
129 |
130 | - Permenev, Anton, et al. Verx: Safety verification of smart contracts. 2020 IEEE Symposium on Security and Privacy 2020.
131 |
132 | - Chenglong Wang, Yu Feng, Ras Bodik, Alvin Cheung, Isil Dillig. Visualization by Example. POPL'2020.
133 |
134 | - Beckett, Ryan, et al. Network configuration synthesis with abstract topologies. PLDI'2017.
135 |
136 | - Dai, Wang-Zhou, et al. Bridging machine learning and logical reasoning by abductive learning. NIPS'2019.
137 |
138 |
139 |
140 |
--------------------------------------------------------------------------------
/REVIEW.md:
--------------------------------------------------------------------------------
1 | # Tips for writing paper reviews
2 |
3 | 1. First, provide a summary of the paper's content.
4 | 2. Second, provide list of major points for and against accepting the paper.
5 | 3. Third, write more detailed explanation of these points and justification to support your arguments.
6 | 5. Finally, some extra comments to other minor issues (typos, grammatically errors, etc) of the paper.
7 | 6. Be respectful to the authors: please write a comprehensive review that contains at least 700 words
8 |
9 | [Here is a sample review](https://tinyurl.com/y6j39lxb)
10 |
--------------------------------------------------------------------------------
/TALK.md:
--------------------------------------------------------------------------------
1 | # Tips for attending/giving a presentation
2 |
3 | If you are the presenter:
4 |
5 | 1. Motivation of the paper? Why is it important?
6 | 2. Using one slide to introduce necessary background so that people can follow the rest of the materials.
7 | 3. What are the challenges?
8 | 4. What is the solution? Explain the solution in an idiot-proof way.
9 | 5. How well is the proposed approach? Highlight the results.
10 | 6. Fewer texts, more figures and animations.
11 | 7. Do NOT directly copy content from the paper, rephrase with your own words.
12 |
13 | If you are the audience:
14 |
15 | 1. Make sure you read the paper before the talk!
16 | 2. Listen the talk carefully and respect your classmates.
17 | 3. Come up with questions during the talk.
18 |
--------------------------------------------------------------------------------
/homework/hw1/demo_string_enumerator_problem1.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import tyrell.spec as S
4 | from tyrell.interpreter import PostOrderInterpreter
5 | from tyrell.enumerator import SmtEnumerator, RelaxedRandomEnumerator
6 | from tyrell.decider import Example, ExampleConstraintDecider, ExampleConstraintPruningDecider
7 | from tyrell.synthesizer import Synthesizer
8 | from tyrell.logger import get_logger
9 |
10 | logger = get_logger('tyrell')
11 |
12 | class ToyInterpreter(PostOrderInterpreter):
13 |
14 | def eval_get_delimiter(self, node, args):
15 | return args[0]
16 |
17 | def eval_get_token(self, node, args):
18 | return args[0]
19 |
20 | def eval_get_int(self, node, args):
21 | return int(args[0])
22 |
23 | def eval_concat(self, node, args):
24 | return args[0] + args[1]
25 |
26 | def eval_substr(self, node, args):
27 | arg_str = args[0]
28 | arg_pos0 = args[1]
29 | arg_pos1 = args[2]
30 | return arg_str[arg_pos0:arg_pos1]
31 |
32 | def eval_reverse(self, node, args):
33 | arg_str = args[0]
34 | return arg_str[::-1]
35 |
36 | def eval_sort(self, node, args):
37 | arg_str = args[0]
38 | return "".join(sorted(list(arg_str)))
39 |
40 | def eval_tolower(self, node, args):
41 | arg_str = args[0]
42 | return arg_str.lower()
43 |
44 | def eval_toupper(self, node, args):
45 | arg_str = args[0]
46 | return arg_str.upper()
47 |
48 |
49 | def main():
50 | logger.info('Parsing Spec...')
51 | # TBD: parse the DSL definition file and store it to `spec`
52 | spec = ??
53 | logger.info('Parsing succeeded')
54 |
55 | logger.info('Building synthesizer...')
56 | synthesizer = Synthesizer(
57 | enumerator=RelaxedRandomEnumerator(spec, max_depth=3, min_depth=0, seed=None),
58 | decider=ExampleConstraintDecider(
59 | spec=??, # TBD: provide the spec here
60 | interpreter=ToyInterpreter(),
61 | examples=??, # TBD: provide the example here
62 | )
63 | )
64 | logger.info('Synthesizing programs...')
65 |
66 | prog = synthesizer.synthesize()
67 | if prog is not None:
68 | logger.info('Solution found: {}'.format(prog))
69 | else:
70 | logger.info('Solution not found!')
71 |
72 |
73 | if __name__ == '__main__':
74 | logger.setLevel('DEBUG')
75 | main()
76 |
--------------------------------------------------------------------------------
/homework/hw1/demo_string_enumerator_problem2.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import tyrell.spec as S
4 | from tyrell.interpreter import PostOrderInterpreter
5 | from tyrell.enumerator import SmtEnumerator, RelaxedRandomEnumerator
6 | from tyrell.decider import Example, ExampleConstraintDecider, ExampleConstraintPruningDecider
7 | from tyrell.synthesizer import Synthesizer
8 | from tyrell.logger import get_logger
9 |
10 | logger = get_logger('tyrell')
11 |
12 | class ToyInterpreter(PostOrderInterpreter):
13 |
14 | def eval_get_delimiter(self, node, args):
15 | return args[0]
16 |
17 | def eval_get_token(self, node, args):
18 | return args[0]
19 |
20 | def eval_get_int(self, node, args):
21 | return int(args[0])
22 |
23 | def eval_concat(self, node, args):
24 | return args[0] + args[1]
25 |
26 | def eval_substr(self, node, args):
27 | arg_str = args[0]
28 | arg_pos0 = args[1]
29 | arg_pos1 = args[2]
30 | return arg_str[arg_pos0:arg_pos1]
31 |
32 | def eval_reverse(self, node, args):
33 | arg_str = args[0]
34 | return arg_str[::-1]
35 |
36 | def eval_sort(self, node, args):
37 | arg_str = args[0]
38 | return "".join(sorted(list(arg_str)))
39 |
40 | def eval_tolower(self, node, args):
41 | arg_str = args[0]
42 | return arg_str.lower()
43 |
44 | def eval_toupper(self, node, args):
45 | arg_str = args[0]
46 | return arg_str.upper()
47 |
48 | def eval_split(self, node, args):
49 | # TBD: implement the split function
50 | ??
51 |
52 | def eval_join(self, node, args):
53 | # TBD: implement the join function
54 | ??
55 |
56 |
57 | def main():
58 | logger.info('Parsing Spec...')
59 | # TBD: parse the DSL definition file and store it to `spec`
60 | spec = ??
61 | logger.info('Parsing succeeded')
62 |
63 | logger.info('Building synthesizer...')
64 | synthesizer = Synthesizer(
65 | enumerator=RelaxedRandomEnumerator(spec, max_depth=3, min_depth=0, seed=None),
66 | decider=ExampleConstraintDecider(
67 | spec=??, # TBD: provide the spec here
68 | interpreter=ToyInterpreter(), # Question Hole
69 | examples=??, # TBD: provide the example here
70 | )
71 | )
72 | logger.info('Synthesizing programs...')
73 |
74 | prog = synthesizer.synthesize()
75 | if prog is not None:
76 | logger.info('Solution found: {}'.format(prog))
77 | else:
78 | logger.info('Solution not found!')
79 |
80 |
81 | if __name__ == '__main__':
82 | logger.setLevel('DEBUG')
83 | main()
84 |
--------------------------------------------------------------------------------
/homework/hw1/hw1.md:
--------------------------------------------------------------------------------
1 | # Homework Assignment 1
2 |
3 | **Due Monday, April 19, 2021 at 11:59pm (Pacific Time)**
4 |
5 | In this homework assignment, you will use Trinity to build a toy program synthesizer for string manipulations. You will be learning the basic usage of Trinity as well as its design philosophy. Using Trinity, you will be able to create your own customized program synthesizer for various domains in a much concise and easier way.
6 |
7 | Note: If you are passionate in programming languages techniques and are open to challenges, I have inserted some slightly more challenging problems and tips (which are marked with the cowboy face 🤠). These problems will ***NOT*** count into any of your final scores, but just for those who want to explore more of this domain. Enjoy!
8 |
9 | ## Submission
10 |
11 | Please submit the solution files via gradescope.
12 |
13 | In this homework, you only need to submit the following files:
14 |
15 | - `demo_string_enumerator_problem1.py`
16 | - `demo_string_enumerator_problem2.py`
17 |
18 | Note: This homework should not take too long to finish. If you happened to struggle a lot, it could be my problem on stating the questions, and please don't hesitate to reach out to us about your confusions, via Slack, office hours or emails.
19 |
20 | ## Getting Started
21 |
22 | First, get the Trinity library to your machine and switch to the `random-fix` branch (which includes functionalities that you need for this homework assignment):
23 |
24 | ```bash
25 | git clone https://github.com/fredfeng/Trinity.git
26 | cd Trinity/
27 | git checkout random-fix
28 | ```
29 |
30 | You can use Trinity from within its root folder without actually installing it. To verify the installation of Trinity, try to run the string transformation demo from the repo root:
31 |
32 | ```bash
33 | cd Trinity/
34 | python demo_string_enumerator.py
35 | ```
36 |
37 | If it prints out some debugging messages followed by an info message, which says:
38 |
39 | ```
40 | [info] Solution found: plus(plus(@param0, const(_apple_)), @param1)
41 | ```
42 |
43 | then your environment is configured successfully.
44 |
45 | ## Problem Overview
46 |
47 | #### The Simple String Programming Language
48 |
49 | We now use Trinity to quickly build a synthesizer for a subset of string manipulation functions in Python, and use it to actually solve some problems. Specifically, we extract a subset of several string related methods from Python (a full documentation is available [here](https://docs.python.org/3/library/stdtypes.html#string-methods) if you are interested in their semantics) and re-pack them into our simple string domain-specific language (DSL):
50 |
51 | ```
52 | Str ::= concat(Str, Str) | substr(Str, Int, Int) | reverse(Str)
53 | | sort(Str) | tolower(Str) | toupper(Str) | join(List, Str)
54 | List ::= split(Str, Str)
55 | ```
56 |
57 | where `Str`, `List`, and `Int` correspond to the string, list and integer types in Python. Every function has different semantic meanings:
58 |
59 | - `concat(Str a, Str b)`: similar to string concatenation `a+b` in Python, where in here this function simply accepts two strings and concatenate them.
60 | - `substr(Str a, Int b, Int c)`: similar to string slicing in Python, where in here this function extracts the chars from a string from index `b` (inclusive) to `c` (exclusive).
61 | - `reverse(Str a)`: similar to the reverse function in Python, where in here the string gets reversed.
62 | - `sort(Str a)`: similar to the sorting function in Python, where in here this function sorts every char in string `a` in alphabetical (ASCII ascending) order.
63 | - `tolower(Str a)`: similar to `a.lower()` in Python, which sets all letter cases to lower.
64 | - `toupper(Str a)`: similar to `a.upper()` in Pyhton, which sets all letter cases to upper.
65 | - `split(Str a, Str b)`: similar to `a.split(b)` in Python, which splits the string `a` by delimiter `b`.
66 | - `join(List a, Str b)`: similar to `b.join(a)` in Python, which concatenates a list `a` by delimiter `b`.
67 |
68 | #### Setting up Simple String Language in Trinity
69 |
70 | To set up your own synthesizer, you will need 3 basic components: DSL definition (spec), language interpreter and the main synthesis loop.
71 |
72 | It's super easy to write the DSL definition, because I've done that for you already 🙂! Simply download the DSL definition files `simplestring1.tyrell` (for Problem1) and `simplestring2.tyrell` (for Problem2) from [here](https://github.com/fredfeng/CS190I/blob/main/homework/hw1/) and place them to the `example/` folder.
73 |
74 | > 🤠: Instead of downloading the provided file, could you come up with your own one (by observing the existing example DSLs from the `example/` folder)?
75 |
76 | Also, you need the interpreters and main synthesis loops, which can be downloaded [here](https://github.com/fredfeng/CS190I/blob/main/homework/hw1/). To start the homework, you need to place it to the repo root folder. Note that currently both the interpreter and synthesis loop are missing some critical parts (marked with holes `??` and commented with "TBD"), and your job is to finish those missing parts.
77 |
78 | ## Problem 1 (60%)
79 |
80 | Fill in the missing parts (**3 holes, 20% each hole**) in `demo_string_enumerator_problem1.py` so that it runs and finds the correct solution.
81 |
82 | Note that in this problem, you need to load `simplestring1.tyrell`. An example is given to specify the correct solution. Here you need to encode the following example into the synthesizer:
83 |
84 | ```
85 | "ABCDE" -> "abcde"
86 | ```
87 |
88 | which is, given the input string "ABCDE", the synthesizer is asked to produce a program written in our DSL that can produce the output "abcde" given this input. Presumably, the solution involves the `tolower` function.
89 |
90 | Note that the Trinity repo provides you with several demos of different synthesizers, if you are running out of clues about what to fill in, read those demos (or tutorial) to learn the basic usage.
91 |
92 | ## Problem 2 (40%)
93 |
94 | Now that you are familiar with the basic usage of Trinity, let's switch to a slightly complex example:
95 |
96 | ```
97 | ["Final", "Fantasy", "VII"] -> "Final*Fantasy*VII"
98 | ```
99 |
100 | Note that in this problem, you need to load `simplestring2.tyrell`. This example concatenates the three strings from a list into one using delimiter "*". You are going to fill in the missing parts (**5 holes, 8% each hole**) in `demo_string_enumerator_problem2.py` so that the synthesizer runs and finds the correct solution.
101 |
102 | > 🤠: What if you want to specify multiple examples? Try to modify the `examples` arguments and provide an extra example that says:
103 | >
104 | > ```["Resident", "Evil", "Village"] -> "Resident*Evil*Village"```
105 | >
106 | > Will the synthesizer give the same solution?
107 | >
108 | > 🤠: How about adding the following example?
109 | >
110 | > ```["Resident", "Evil", "Village"] -> "resident*evil*village"```
111 |
112 | ## 🤠: Problem 3 (0%)
113 |
114 | As you can see the time spent for finding a correct solution can be quite long, especially when you have complicated examples, large DSLs or trivial random searching strategy. In fact, Trinity is equipped with a powerful deduction engine that helps prune the search space and find the solution even faster. However, the current setting of this homework does not enable deduction / does not benefit from deduction. Could you modify the synthesizer in Problem 2 so that it can benefit from the deduction engine?
115 |
116 | Hint: You'll need to modify both the `simplestring2.tyrell` file and one of the demo synthesizer file.
117 |
118 |
--------------------------------------------------------------------------------
/homework/hw1/simplestring1.tyrell:
--------------------------------------------------------------------------------
1 | enum RawDelimiter {
2 | "_", "-", "*", ".", " ", ""
3 | }
4 | enum RawToken {
5 | "a", "b", "c", "A", "B", "C"
6 | }
7 | enum RawInt {
8 | "0", "1", "2", "3", "-1", "-2", "-3"
9 | }
10 |
11 | value Empty;
12 | value Str;
13 | value Int;
14 | value List;
15 |
16 | program Toy(Str) -> Str;
17 | func empty: Empty -> Empty;
18 |
19 | func get_delimiter: Str -> RawDelimiter;
20 | func get_token: Str -> RawToken;
21 | func get_int: Int -> RawInt;
22 |
23 | func concat: Str -> Str, Str;
24 | func substr: Str -> Str, Int, Int;
25 | func reverse: Str -> Str;
26 | func sort: Str -> Str;
27 | func tolower: Str -> Str;
28 | func toupper: Str -> Str;
--------------------------------------------------------------------------------
/homework/hw1/simplestring2.tyrell:
--------------------------------------------------------------------------------
1 | enum RawDelimiter {
2 | "_", "-", "*", ".", " ", ""
3 | }
4 | enum RawToken {
5 | "a", "b", "c", "A", "B", "C"
6 | }
7 | enum RawInt {
8 | "0", "1", "2", "3", "-1", "-2", "-3"
9 | }
10 |
11 | value Empty;
12 | value Str;
13 | value Int;
14 | value List;
15 |
16 | program Toy(List) -> Str;
17 | func empty: Empty -> Empty;
18 |
19 | func get_delimiter: Str -> RawDelimiter;
20 | func get_token: Str -> RawToken;
21 | func get_int: Int -> RawInt;
22 |
23 | func concat: Str -> Str, Str;
24 | func substr: Str -> Str, Int, Int;
25 | func reverse: Str -> Str;
26 | func sort: Str -> Str;
27 | func tolower: Str -> Str;
28 | func toupper: Str -> Str;
29 |
30 | func split: List -> Str, Str;
31 | func join: Str -> List, Str;
--------------------------------------------------------------------------------
/homework/hw2/hw2.md:
--------------------------------------------------------------------------------
1 | # Homework Assignment 2
2 |
3 | **Due Monday, May 3, 2021 at 11:59pm (Pacific Time)**
4 |
5 | In this homework, you will be using Venti ([https://github.com/chyanju/Venti.git](https://github.com/chyanju/Venti.git)) to build clients to verify smart contracts.
6 |
7 | Note: If you are passionate in programming languages techniques and are open to challenges, I have inserted some slightly more challenging problems and tips (which are marked with the cowboy face 🤠). These problems will ***NOT*** count into any of your final scores, but just for those who want to explore more of this domain. Enjoy!
8 |
9 | ## Submission
10 |
11 | Please submit the solution files via gradescope.
12 |
13 | In this homework, you only need to submit the following files:
14 |
15 | - `task1-1.txt` required by Problem 1, Task 1-1
16 | - `task1-2.txt` required by Problem 1, Task 1-2
17 | - `task2-1.txt` required by Problem 2, Task 2-1
18 | - `P2A.sol` and `P2B.sol` required by Problem 2, Task 2-2
19 | - `task2-3.json` or `task2-3.txt` required by Problem 2, Task 2-3
20 |
21 | Note: This homework does require sometime to understand the background knowledge, but should be relatively straightforward to finish the tasks if you are clear about the mechanism of the environment and the tasks. If you happened to struggle a lot more than expected, it could be my problem on stating the questions, and please don't hesitate to reach out to us about your confusions, via Slack, office hours or emails.
22 |
23 | ## Getting Started
24 |
25 | First set up the Venti and Solidity environment by the following steps.
26 |
27 | #### Setting up Solidity Environment
28 |
29 | Follow the setup instructions of `solc-select` to install the Solidity environment here: [https://github.com/crytic/solc-select](https://github.com/crytic/solc-select). After the configuration is done, switch to solc version `0.7.3` by:
30 |
31 | ```bash
32 | solc-select use 0.7.3
33 | ```
34 |
35 | Note that before you switch your `solc` version, you'll need to install Solidity version `0.7.3` if you haven't done so after the configuration. After than, issue:
36 |
37 | ```bash
38 | solc --version
39 | ```
40 |
41 | and if you see the following information (or something similar), then you are good to go:
42 |
43 | ```
44 | solc, the solidity compiler commandline interface
45 | Version: 0.7.3+commit.9bfce1f6.Darwin.appleclang
46 | ```
47 |
48 | #### Setting up Venti Environment
49 |
50 | ***(Please follow the instructions below instead of the guide from the Venti repo; that guide is meant for development)***
51 |
52 | Venti requires Racket 7.x, Rosette 3.x, Python 3.x and Antlr Python Target 4.8.
53 |
54 | It should be relatively easy for you to get a Python 3.x. If you still feel confused, consider setting up an Anaconda environment. See: [https://www.anaconda.com/products/individual](https://www.anaconda.com/products/individual).
55 |
56 | In this homework, Racket 7.7 is recommended. Go to [https://download.racket-lang.org/racket-v7.7.html](https://download.racket-lang.org/racket-v7.7.html) and follow the official guide to get and setup Racket 7.7 on your machine.
57 |
58 | After you have successfully configured Racket, you'll to add Rosette (a solver-aided language) to the current Racket installation. In this homework, Rosette 3.2 is recommended. To install Rosette, first clone the Rosette repository:
59 |
60 | ```bash
61 | git clone https://github.com/emina/rosette.git
62 | ```
63 |
64 | Then checkout version 3.2:
65 |
66 | ```bash
67 | cd rosette/
68 | git checkout c092b65
69 | ```
70 |
71 | And then install it from the source directly:
72 |
73 | ```bash
74 | raco pkg remove rosette
75 | raco pkg install
76 | ```
77 |
78 | For Antlr Python Target 4.8, follow the instructions [here](https://github.com/antlr/antlr4/blob/master/doc/python-target.md), or if you have `pip` set up, issue:
79 |
80 | ```bash
81 | pip install antlr4-python3-runtime==4.8
82 | ```
83 |
84 | ***Note that you need to install version 4.8; other Antlr versions may cause unexpected exceptions for the tool's parser.***
85 |
86 | Then the environment for Venti should be ready.
87 |
88 | ## Problem Overview
89 |
90 | You will be verifying smart contracts written by Solidity. A smart contract is a self-executing contract with the terms of the agreement between buyer and seller being directly written into lines of code. You can think of a smart contract as a special kind of source code that runs on a distributed and decentralized blockchain network, while the grammar of Solidity should look familiar if you used to write codes in C/C++/Java.
91 |
92 | Even if you are not familiar with Solidity, we are not using/verifying any fancy features of Solidity itself; instead, the verification tasks here are relatively general.
93 |
94 | ## Problem 1 (40%): Test the Environment
95 |
96 | First get Venti from github and check out the branch for homework `CS190I`:
97 |
98 | ```bash
99 | git clone https://github.com/chyanju/Venti.git
100 | cd Venti/
101 | git checkout CS190I
102 | ```
103 |
104 | And change directory to `targets/yul-ast-0.7.3` (without further notifications, we'll be using this client in this homework, and "working directory" refers to `targets/yul-ast-0.7.3` if not otherwise specified):
105 |
106 | ```bash
107 | cd targets/yul-ast-0.7.3
108 | ```
109 |
110 | So we'll be verifying the equivalence between two contracts: `P1A.sol` and `P1B.sol` in the `tests` folder under the working directory. Then, compile two smart contracts into YUL representations (for details of YUL language, see [here](https://docs.soliditylang.org/en/v0.7.3/yul.html) if you are interested):
111 |
112 | ```bash
113 | solc ./tests/P1A.sol --ir --overwrite -o ./tests/
114 | solc ./tests/P1B.sol --ir --overwrite -o ./tests/
115 | ```
116 |
117 | Here ideally you should only see something like:
118 |
119 | ```
120 | Compiler run successful. Artifact(s) can be found in directory ./tests/.
121 | ```
122 |
123 | And this will give you `P1A.yul` and `P1B.yul` respectively in `tests` folder under the working directory. If you see something else rather than a successful message, one of your previous steps could have failed. Please revisit to correct it.
124 |
125 | Next we pare the YUL files into json representations that are readable by the verifier:
126 |
127 | ```bash
128 | python ./yul_parser.py --yul ./tests/P1A.yul
129 | python ./yul_parser.py --yul ./tests/P1B.yul
130 | ```
131 |
132 | You'll then see `P1A.json` and `P1B.json` from the `tests` folder under the workin directory, if everything works as expected.
133 |
134 | Then we can lanunch Venti to verify the equivalence between these two contracts using an existing configuration file `P1-config.json` in `configs` folder:
135 |
136 | ```bash
137 | racket ./yul-bmc.rkt --config ./configs/P1-config.json --verbose
138 | ```
139 |
140 | If it runs successfully, you will see the following output:
141 |
142 | ```
143 | task 0: #f
144 | task 1: #t
145 | ```
146 |
147 | #### Task 1-1 (20%)
148 |
149 | Save your commands and their corresponding outputs into a file called `task1-1.txt`.
150 |
151 | #### Task 1-2 (20%)
152 |
153 | By observing the two contracts `P1A.sol` and `P1B.sol`, ***briefly*** explain whether the functions `modifyX` have the same semantics or not. If not, provide a counterexample input to these two functions where one returns a different output compared with the other. Write down your answer to a file called `task1-2.txt`.
154 |
155 | ## Problem 2 (60%): Customize the Verification Tasks
156 |
157 | #### Venti Verification Design
158 |
159 | In this homework, we define the notion of equivalence based on a special kind of functions, which we call `observe` functions. For example, in `P1A.sol` and `P1B.sol` there are identical `observe` functions that returns the same variable from the contract that we are trying to check equivalence of:
160 |
161 | ```java
162 | function observe() public view returns (uint obsX) {
163 | obsX = xValue;
164 | }
165 | ```
166 |
167 | The `observe` functions are usually attached to a sequence of operations (i.e. function calls, as you can see in `Tasks` field of `P1-config.json`) to get the final value of the variables of interest. Then our client checks the equivalence of the two returned values (could be concrete or symbolic). You can think of this is a special kind of equivalence called "equivalence modulo observation".
168 |
169 | For example, there are two tasks (or transactions) defined in `P1-config.json`, where each task is represented by a list of function calls. The first task:
170 |
171 | ```json
172 | [
173 | [
174 | "txn_function_call",
175 | "constructor"
176 | ],
177 | [
178 | "txn_function_call",
179 | "observe"
180 | ]
181 | ]
182 | ```
183 |
184 | calls the `constructor` first and then directly the `observe` function. The second task:
185 |
186 | ```json
187 | [
188 | [
189 | "txn_function_call",
190 | "constructor"
191 | ],
192 | [
193 | "txn_function_call",
194 | "modifyX",
195 | "uint"
196 | ],
197 | [
198 | "txn_function_call",
199 | "observe"
200 | ]
201 | ]
202 | ```
203 |
204 | calls an additional method `modifyX` with corresponding argument of type `uint` (which will be initialized as a symbolic integer in Rosette) before calling the `observe` function.
205 |
206 | #### Add a New Verification Task
207 |
208 | In this problem, you are given two new smart contracts: `P2A.sol` and `P2B.sol`, which are slightly different from the ones provided in Problem 1, with additional class members and functions that deal with variable `yValue`. There's also a `P2-config.json` provided.
209 |
210 | However, when you try to verify the equivalence of two smart contracts by following the aforementioned steps, you get the results saying the two contracts are equivalent, beause the returned results of every task from the two smart contracts are equal, which is ***problematic*** because the two smart contracts are not equal.
211 |
212 | #### Task 2-1 (20%)
213 |
214 | Read the smart contracts `P2A.sol` and `P2B.sol`, and ***briefly*** explain why they are not equivalent. Write down your answer to a file called `task2-1.txt`.
215 |
216 | #### Task 2-2 (20%)
217 |
218 | According to your manual analysis of the smart contracts from task 2-1 and understanding of the usage of `P1-config.json`, modify the `observe` functions of `P2A.sol` and `P2B.sol` so that verification using `P2-config.json` returns `#f`. Note that the `observe` function should satisfy the following:
219 |
220 | - `observe` functions of the new `P2A.sol` and `P2B.sol` should be the same;
221 | - `observe` function should not modify any variables of the contract;
222 | - `observe` function takes no argument.
223 |
224 | Submit the upated version of `P2A.sol` and `P2B.sol`.
225 |
226 | #### Task 2-3 (20%)
227 |
228 | By default, Solidity initializes an integer to `0` if no initial value is given. If you are required to include `constructor` function in all of your task definitions, can you still design `P2-config.json` to derive a `#f` result for some task to reveal the inequivalence of the two smart contracts? If yes, provide that new configuration file (and name it as `task2-3.json`); if no, ***briefly*** write down the reason in a file called `task2-3.txt`. Note that this task still uses the ***original*** version of `P2A.sol` and `P2B.sol`.
229 |
230 | ## 🤠 Problem 3 (0%): Write Your Own Client
231 |
232 | Even though we here use the notion of "equivalence module observation", what Venti actually provides is a symbolic virtual machine for running YUL source code. Read the main entrance of this homework `yul-bmc.rkt` about how to create and manipulate symbolic virtual machines, and come up with your own client that defines and checks the equivalence in different ways other than using `observe` functions, e.g., checking all resulting memory locations of the two smart contracts.
--------------------------------------------------------------------------------
/homework/hw3/hw3.md:
--------------------------------------------------------------------------------
1 | # Homework Assignment 3
2 |
3 | **Due Monday, May 26, 2021 at 11:59pm (Pacific Time)**
4 |
5 | In this homework, you will be using Trinity ([https://github.com/fredfeng/Trinity](https://github.com/fredfeng/Trinity)) to build a multi-modal synthesizer for data science.
6 |
7 | Note: If you are passionate in programming languages techniques and are open to challenges, I have inserted some slightly more challenging problems and tips (which are marked with the cowboy face 🤠). These problems will ***NOT*** count into any of your final scores, but just for those who want to explore more of this domain. Enjoy!
8 |
9 | ## Submission
10 |
11 | Please submit the solution files via gradescope.
12 |
13 | In this homework, you only need to submit the following files:
14 |
15 | - `task1-1.log` required by Problem 1, Task 1-1
16 | - `task1-2.txt` required by Problem 1, Task 1-2
17 | - `task2-1.log` required by Problem 2, Task 2-1
18 | - `task2-2.log` required by Problem 2, Task 2-2
19 | - `task3.txt` required by Problem 3
20 |
21 | Note: You should be fairly familiar with the basic usage of the Trinity framework. If not, you can revisit HW1 of this course. For this homework, we will add a customized extension, a neural network, to the synthesizer built using Trinity, and use the network to account for user specification written in natural language, besides input-output examples. This process does require you to spend some time to read and understand the code and overall approach a bit in order to answer the homework questions and fill in the holes. If you happened to struggle a lot more than expected, it could be my problem on stating the questions, and please don't hesitate to reach out to us about your confusions, via Slack, office hours or emails.
22 |
23 | ## Problem Overview: Multi-Modal Synthesis Using Trinity
24 |
25 | In this homework, we will explore program synthesis on data science domain, using a pre-defined Trinity client for synthesizing programs written in Morpheus DSL. Morpheus is a DSL that performs various core data wrangling operations, whose syntax and semantics are originally adapted from the core of `tidyr` and `dplyr` packages of the R language.
26 |
27 | 🤠: See [here](https://fredfeng.github.io/papers/pldi17-extend.pdf) if you are interested in details of Morpheus.
28 |
29 | The following shows part of the Morpheus grammar that this homework is going to use (**hereinafter referred to as "Morpheus"**):
30 |
31 |
32 |
33 |
34 | Grammar of a subset of the Morpheus DSL. Adapted from here.
35 |
36 |
37 | As we can see, the Morpheus DSL includes different kinds of operations for data science, such as projections, mutations and aggragations. You can find some more illustrative examples showing the semantics of every component by the following:
38 |
39 |
40 |
41 |
42 | Examples showing concrete semantics of Morpheus DSL. Adapted from here.
43 |
44 |
45 | For a typical program synthesis question in data science, a user can usually provide an input-output example that describes her intentions, as well as some alternate helping texts (in natural language) that further strengthen the specifications.
46 |
47 | Let's take a look at a real question from StackOverflow: [Question#29775461](https://stackoverflow.com/questions/29775461/how-can-i-spread-repeated-measures-of-multiple-variables-into-wide-format). In the following snapshot of this question, the user not only provides a concrete input-output example, but also writes some useful descriptions in natural language that provide quite strong hints about what the desired solution should approximately look like.
48 |
49 |
50 |
51 |
52 | A snapshot of StackOverflow question 29775461.
53 |
54 |
55 | Usually a synthesizer only takes into account of one form of specification. For example, in HW1 we implemented a synthesizer that only takes into string manipulation input-output examples. But in many real-world cases, specifications come with multiple modalities, which requires multi-modal synthesis.
56 |
57 | So we will extend the current Morpheus client in Trinity to also take natural language descriptions as part of the inputs, and use that to bias the search process during synthesis, so that the synthesizer can find the desired solution more quickly.
58 |
59 | ## Problem 1 (30%): Setting up R Environment and Client
60 |
61 | Note: This homework requires a Python version of 3.x, preferrably 3.6+. The following instructions assume you are using Python 3.6+.
62 |
63 | #### Configuring R Environment
64 |
65 | Before running the Morpheus client, we have to make sure we have the R environment and its Python wrapper `rpy2` are correctly configured.
66 |
67 | For setting up the R environment, you can follow [this guide](https://www.datacamp.com/community/tutorials/installing-R-windows-mac-ubuntu). Note that we only need the R runtime, while the RStudio mentioned in the guide is optional for this homework (but it gives you a better interactive shell for writing/debugging in R and data visualization). After you verify you have successfully configured the R environment, install the `tidyr` and `dplyr` packages via the following commands in R environment:
68 |
69 | ```R
70 | install.packages(c("dplyr","tidyr","compare"))
71 | ```
72 |
73 | You will probably see some error/warning messages popped up, which are usually benign. After the installation is done, try to verify it by importing those packages:
74 |
75 | ```R
76 | library(dplyr)
77 | library(tidyr)
78 | ```
79 |
80 | You will probably see the following output message:
81 |
82 | ```
83 | Attaching package: ‘dplyr’
84 |
85 | The following objects are masked from ‘package:stats’:
86 |
87 | filter, lag
88 |
89 | The following objects are masked from ‘package:base’:
90 |
91 | intersect, setdiff, setequal, union
92 | ```
93 |
94 | which usually means your configuration is good. But if you see messages other than this, then probably something is wrong with your configuration.
95 |
96 | #### Installing Python R Wrapper
97 |
98 | The current Morpheus client in Trinity is written in Python. In order for Python to call and use R functionalities, a wrapper is needed. In particular, the `rpy2` package of version `3.0.5` is required. You can get it using `pip`:
99 |
100 | ```bash
101 | pip install rpy2==3.0.5
102 | ```
103 |
104 | #### Task 1-1 (20%): Testing Basic Morpheus Client
105 |
106 | Clone the Trinity repo and switch to the `CS190I-HW3` branch:
107 |
108 | ```bash
109 | git clone https://github.com/fredfeng/Trinity.git
110 | cd Trinity/
111 | git checkout CS190I-HW3
112 | ```
113 |
114 | Then directly execute the Morpheus client `morpheus_enumerator.py` from the repo's root:
115 |
116 | ```bash
117 | python ./morpheus_enumerator.py --input0 ./benchmarks/morpheus/3/r3_input1.csv --output ./benchmarks/morpheus/3/r3_output1.csv --length 3
118 | ```
119 |
120 | This will try to synthesize a solution for the aforementioned StackOverflow question, using Morpheus DSL, with additional deductions (e.g., conflict-driven learning from [Neo](https://fredfeng.github.io/papers/pldi18-neo.pdf)). The provided arguments specify the input dataframe, output dataframe, as well as the desired size of the program.
121 |
122 | Redirect all the output of running the previous command to a log file called `task1-1.log` and submit it. You should log all the standard, debugging and error outputs.
123 |
124 | > Hint: You can make use of the `>` operator in your terminal.
125 | >
126 | > Hint: Trinity outputs to different streams. You can do `2>&1` to captures all the output channels.
127 |
128 | #### Task 1-2 (10%): Code Understanding and Analysis
129 |
130 | Analyze the code and outputs in this problem, ***briefly*** provide your answers/thoughts to the following questions:
131 |
132 | 1. Does the client always follow the same order of enumeration? I.e., are the outputs of the log files always the same across multiple runs?
133 | 2. According to your understanding of the code, what decides the enumeration order?
134 |
135 | Submit your answers/thoughts via a file called `task1-2.txt`.
136 |
137 | ## Problem 2 (40%): Adding Neural Network Extension
138 |
139 | As you may have already seen that the Morpheus client from problem 1 is still runnning a bit slow, now in this problem we will try to introduce a neural network extension so that the synthesizer can take into account of the natural language hints provided by the user to further speed up the synthesis process.
140 |
141 | 🤠: The add-on neural network is part of the Mars framework. See [here](https://fredfeng.github.io/papers/fse19-mars.pdf) for more details.
142 |
143 | #### Configuring Neural Network Environment
144 |
145 | We use PyTorch to build and evaluate our neural model. So if you haven't got one, you can follow the [official PyTorch tutorial](https://pytorch.org/get-started/locally/) to get one. Note that problem 2 requires a PyTorch of version 1.4+ (preferrably).
146 |
147 | Additionally, since we are dealing with natural language, the extension utilizes the spaCy module for natural language normalization. You can configure spaCy by following its [official documentation](https://spacy.io/usage).
148 |
149 | To test whether the environment works, redirect to the repo root directory, start a Python REPL, and simply type:
150 |
151 | ```python
152 | import mars
153 | ```
154 |
155 | If you see the following output:
156 |
157 | ```
158 | use_cuda: False
159 | ```
160 |
161 | then your environment is good to go. Note that you may also see `use_cuda: True` if you've got a GPU and have configured CUDA. But for this problem, having GPU and CUDA configured is optional and won't affect the major tasks.
162 |
163 | #### Task 2-1 (20%): Testing Extended Morpheus Client
164 |
165 | The main entrance to the extended Morpheus client is `app_main.py`. Simply run it by:
166 |
167 | ```bash
168 | python ./app_main.py
169 | ```
170 |
171 | Redirect all its output to a log file called `task2-1.log` and submit it. You should log all the standard, debugging and error outputs.
172 |
173 | #### Task 2-2 (20%): Testing Extended Morpheus Client (Baseline)
174 |
175 | The default setting of the `app_main.py` has turned on the neural network extension. Read the code and comments, and try to turn off the neural network extension. Run this baseline client without neural network extension and redirect all its output to a log file called `task2-2.log` and submit it. You should log all the standard, debugging and error outputs.
176 |
177 | > Hint: No heavy coding is required. You only need to slightly modify the `app_main.py` file and run it again.
178 |
179 | ## Problem 3 (30%): Comparison and Result Analysis
180 |
181 | Notation: we hereinafter refer the client with neural network *enabled* as the "extended" version, and the one with neural network *disabled* as the "baseline" version.
182 |
183 | Compare and analyze the two log files from problem 2 and try to ***briefly*** answer the following questions:
184 |
185 | 1. (10%) Do the two versions both generate the desired correct solutions? According to your observations, which one runs faster? You can use the `time` command to measure the accurate time cost, if you are not sure about it.
186 | 2. (20%) The extended version is actually using more information than the baseline version, i.e., the natural language descriptions. Based on your analysis, which part (i.e., language unit, e.g., a word, a phrase, a sentence, a paragraph etc.) of the question description (see the `question` field of `request_config` object in `app_main.py`) contributes the most to the speed-up/speed-down of the extended version? Provide your conjecture on how to find out the most critical part of the description.
187 | 3. (0%) 🤠: Try out other benchmarks by modifying the hard-coded `request_config` object in `app_main.py`. Does the neural network extension always help? If not, what are the potential threats to validity?
188 |
189 | Submit your answers/thoughts via a file called `task3.txt`.
190 |
191 |
--------------------------------------------------------------------------------
/homework/hw3/res/example-question.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/homework/hw3/res/example-question.png
--------------------------------------------------------------------------------
/homework/hw3/res/morpheus-dsl-example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/homework/hw3/res/morpheus-dsl-example.png
--------------------------------------------------------------------------------
/homework/hw3/res/morpheus-dsl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/homework/hw3/res/morpheus-dsl.png
--------------------------------------------------------------------------------
/lectures/lecture1.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/lectures/lecture1.pdf
--------------------------------------------------------------------------------
/lectures/lecture10.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/lectures/lecture10.pdf
--------------------------------------------------------------------------------
/lectures/lecture11.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/lectures/lecture11.pdf
--------------------------------------------------------------------------------
/lectures/lecture12.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/lectures/lecture12.pdf
--------------------------------------------------------------------------------
/lectures/lecture13.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/lectures/lecture13.pdf
--------------------------------------------------------------------------------
/lectures/lecture2.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/lectures/lecture2.pdf
--------------------------------------------------------------------------------
/lectures/lecture3.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/lectures/lecture3.pdf
--------------------------------------------------------------------------------
/lectures/lecture4.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/lectures/lecture4.pdf
--------------------------------------------------------------------------------
/lectures/lecture5.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/lectures/lecture5.pdf
--------------------------------------------------------------------------------
/lectures/lecture6.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/lectures/lecture6.pdf
--------------------------------------------------------------------------------
/lectures/lecture7.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/lectures/lecture7.pdf
--------------------------------------------------------------------------------
/lectures/lecture8.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/lectures/lecture8.pdf
--------------------------------------------------------------------------------
/lectures/lecture9.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/lectures/lecture9.pdf
--------------------------------------------------------------------------------
/poster/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/.DS_Store
--------------------------------------------------------------------------------
/poster/Makefile:
--------------------------------------------------------------------------------
1 | TARGETS = muse.pdf
2 |
3 | all: $(TARGETS)
4 |
5 | %.pdf: %.tex Makefile
6 | pdflatex --enable-write18 $< && pdflatex $< && pdflatex $<
7 |
8 | clean:
9 | rm -f *.aux *.bbl *.blg *.log $(TARGETS)
10 |
--------------------------------------------------------------------------------
/poster/baposter.cls:
--------------------------------------------------------------------------------
1 | %%
2 | %% This is file `baposter.cls'
3 | %%
4 | %% A relatively comfortable latex class to produce posters with a grid based
5 | %% layout. It comes with a number of combinable styles and is (maybe only for
6 | %% the writer) easy to extend, as all the graphics is based on pgf.
7 | %%
8 | %% It is meant to be used with pdftex, but might also work with pslatex if you
9 | %% are not interested in things like transparency.
10 | %%
11 | %% Copyright (C) 2007-2011 Brian Amberg
12 | %% Copyright (C) 2011 Reinhold Kainhofer
13 | %%
14 | %% 29. September 2011:
15 | %% - Finally fixed confusion with paper size handling and landscape. This required seperate handling of papersizes
16 | %% known to the geometry package and other packages.
17 | %% 26. September 2011:
18 | %% - Reverted drawing of faded borders to manual method, as the current result does not work with evince,
19 | %% and produced spurious colored boxes with okular and acroread.
20 | %% - Added one more example due to popular request
21 | %% 16. September 2011:
22 | %% - Removed nag package, such that it compiles on older systems
23 | %% - Added more examples
24 | %% 15. September 2011:
25 | %% - Merged fork by (rk) back into mainline, essentially taking over all the great improvements that Reinhold Kainhofer coded.
26 | %% We call this version 2, as it breaks the interface in some small points. Essentially watch out for this:
27 | %% - no/yes keys are now false/true
28 | %% - the shade-lr etc. keys have the hypen removed, and are now called shadelr etc.
29 | % - Added more examples, which are all adapted to work with the current version
30 | %% 27. August 2011 (rk):
31 | %% - Completely factored out all drawing commands to handler functions, assigned via choice keys
32 | %% - Added cornerradius, boxheaderheight, boxpadding options
33 | %% - Added missing roundedright
34 | %% 26. August 2011 (rk):
35 | %% - Turned headerbox cmd into posterbox environment (allows verbatim)
36 | %% - pass several options to packages
37 | %% - added debug cls option to reduce default output
38 | %% - rewrote several loops and ifthenelse
39 | %% - Use boolean and choice keys for all options
40 | %% - Changed all choice options to set a global function to
41 | %% \baposter@OPTION@OPTIONVALUE, which are a functions that execute the
42 | %% option's setting (drawing routine, color setting for tikz, etc.)
43 | %% - Add a5paper
44 | %% 07. April 2011: Fixed paper size handling
45 | %% - Fixed Paper Size handling, you can now specify all page sizes using paperwidth=, paperheight= class options.
46 | %% - Added rudimentary documentation of the available keys.
47 | %% 11. December 2010: Fixed "Empty Second Page" bug
48 | %% - A second empty page was introduced when a document ended with
49 | %% \end{poster}
50 | %% \end{document}
51 | %% This was fixed thanks to a suggestion by Martin Aulbach
52 | %% - Added
53 | %% \thispagestyle{empty}
54 | %% to suppress page numbers, which became visible when the margins are large.
55 | %% The underlying problem of page-size handling has not yet been solved.
56 | %% 30. September 2010: Border Bugfixes
57 | %% - Correct background color with textborder=rounded-small, Thanks to Ke Chen for the bugreport and patch
58 | %% - Correctly draw rectangular text boxes, Thanks to abenkst for the bugreport and fix
59 | %% 10. June 2010: Added option to set the number of columns
60 | %% - added a class option to set the number of columns
61 | %% - columns=5: sets the number of columns to 5, possible values are 1..6, default is 3 in portrait and 4 in landscape format
62 | %% 29. April 2009: Incorporated Patches by Arne Henningsen
63 | %% - added some class options
64 | %% - a4shrink: shrink the paper to A4 size (for printing drafts or handouts)
65 | %% - movebody=Xpt: move the text/poster body Xpt to the right
66 | %% (or to the left if Xpt is negative),
67 | %% e.g. for manually centering the poster on the page
68 | %% - showframe: use the "showframe" option of the "geometry" package
69 | %% - a0paper (default): set paper size to A0
70 | %% - archE: set paper size to Arch E
71 | %% - setting "background" can be "none" now (otherwise the "showframe"
72 | %% option has no effect)
73 | %% - the page number has been removed (it was mostly not visible before)
74 | %% - the "margin=" option works now
75 | %% 04. December 2008
76 | %% - Mainly an update to the landscape example
77 | %% 14. November 2008
78 | %% - Actually center the title when eyecatcher is used.
79 | %% 04. November 2008
80 | %% - Fixed bug with eyecatcher not working.
81 | %% 26. June 2008
82 | %% - Fixed bug with plain background mode.
83 | %% 14. June 2008
84 | %% - Support for portrait/landscape switching.
85 | %% - Some smaller bugfixes.
86 | %% 01. June 2007
87 | %% - First version released.
88 | %%
89 | %% Use this class with pdflatex
90 | %%
91 | %% I have confirmed that this package works with
92 | %% - texlive 2007 and
93 | %% - miktex 2.7
94 | %%
95 | %% It does not seem to work with
96 | %% - miktex 2.2
97 | %% - some old versions of tetex
98 | %%
99 | %%
100 | %% TODO:
101 | %% -) Rename backgrounds back to shaded-tb shade-lr
102 | %% -) Rename textborder back to rounded-small (consistent naming needed!)
103 | %% -) Rename headershade back to shade-lr, shade-tb, shade-tb-inverse
104 | %% -) Rename headershape back to small-rounded
105 | %% -) Option value consistency (small-rounded vs. rounded-small; missing ones)
106 | %% -) Rename \baposterHeaderSetShade, \baposterHeaderDrawText to include @ and verb
107 | %%
108 | %%
109 | %% Licence: GPL
110 | \ProvidesClass{baposter}[2011/11/26 v2.0 baposter class]
111 | \NeedsTeXFormat{LaTeX2e}[1995/06/01]
112 | \LoadClass{article}
113 | \typeout{baposter: Brian Amberg, 2007, 2008, 2009, 2010, 2011 | http://www.brian-amberg.de/uni/poster/}
114 | \typeout{baposter: Reinhold Kainhofer, 2011 | http://reinhold.kainhofer.com/}
115 |
116 | %% Define lengths only once on inclusion, such that we can make multiple posters
117 | \newlength{\baposter@basepaperwidth}
118 | \newlength{\baposter@basepaperheight}
119 | \newlength{\baposter@basemargin}
120 | \newlength{\baposter@finalpaperwidth}
121 | \newlength{\baposter@finalpaperheight}
122 | \newlength{\baposter@finalmargin}
123 | \newlength{\headerheight}%
124 | \newlength{\colwidth}%
125 | \newlength{\colheight}%
126 | \newlength{\baposter@@colspacing}%
127 | \newlength{\baposter@box@@cornerradius}%
128 | \newlength{\baposter@box@@boxheaderheight}%
129 | \newlength{\baposter@box@@boxpadding}%
130 | \newlength{\boxstartx}%
131 | \newlength{\boxstarty}%
132 | \newlength{\boxwidth}%
133 | \newlength{\boxheight}%
134 | \newlength{\baposter@titleimage@left@width}%
135 | \newlength{\baposter@titleimage@right@width}%
136 | \newlength{\baposter@titleimage@textwidth}%
137 | \newbox\baposter@box@content%
138 | \newbox\baposter@titleimage@left%
139 | \newbox\baposter@titleimage@title%
140 | \newbox\baposter@titleimage@right%
141 |
142 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
143 | % Packages
144 | %-------------------------------------------------------------------------------
145 | % The only ``weird'' dependency of this package is pgf. All the rest should be
146 | % installed on any decent system.
147 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
148 | \typeout{Use Packages}
149 | \RequirePackage{xkeyval}
150 | \RequirePackage{calc}
151 | \RequirePackage[cmyk]{xcolor}
152 | \RequirePackage{tikz}
153 | \RequirePackage{pgf}
154 | \RequirePackage{ifthen}
155 | \RequirePackage[T1]{fontenc}
156 | %\RequirePackage[l2tabu, orthodox]{nag}
157 | \usetikzlibrary{decorations}
158 | \usetikzlibrary{fadings}
159 | \usetikzlibrary{snakes}
160 | \usetikzlibrary{calc}
161 |
162 |
163 |
164 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
165 | % Settings
166 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
167 |
168 | % Choose a smaller value for larger fonts
169 | \newcommand{\baposter@fontscale}{0.292}
170 |
171 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
172 | % Zoom
173 | %-------------------------------------------------------------------------------
174 | % We scale the page from fontscale * papersize up to papersize
175 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
176 |
177 |
178 | %% Paper sizes
179 | \newif\if@landscape
180 | \newif\if@geometryKnowsThisSize
181 | \DeclareOptionX{landscape}{\@landscapetrue}
182 | \DeclareOptionX{portrait}{}
183 |
184 | \newcommand{\baposter@setfinalpapersize}[2]{%
185 | \if@geometryKnowsThisSize
186 | \setlength{\baposter@finalpaperwidth}{#1}%
187 | \setlength{\baposter@finalpaperheight}{#2}%
188 | \else
189 | \if@landscape
190 | % Transpose length, if geometry does not handle the papersize based on the key
191 | \setlength{\baposter@finalpaperwidth}{#2}%
192 | \setlength{\baposter@finalpaperheight}{#1}%
193 | \else
194 | \setlength{\baposter@finalpaperwidth}{#1}%
195 | \setlength{\baposter@finalpaperheight}{#2}%
196 | \fi
197 | \fi
198 | }
199 |
200 | % Default paperwidth and paperheight = a0paper
201 | \DeclareOptionX{paperwidth}[841mm]{\setlength{\baposter@finalpaperwidth}{#1}}
202 | \DeclareOptionX{paperheight}[1189mm]{\setlength{\baposter@finalpaperheight}{#1}}
203 | \DeclareOptionX{archA} { \baposter@setfinalpapersize{9in}{12in}}%
204 | \DeclareOptionX{archB} { \baposter@setfinalpapersize{12in}{18in}}%
205 | \DeclareOptionX{archC} { \baposter@setfinalpapersize{18in}{24in}}%
206 | \DeclareOptionX{archD} { \baposter@setfinalpapersize{24in}{36in}}%
207 | \DeclareOptionX{archE} { \baposter@setfinalpapersize{36in}{48in}}%
208 | \DeclareOptionX{archE1} { \baposter@setfinalpapersize{30in}{42in}}%
209 | \DeclareOptionX{archE2} { \baposter@setfinalpapersize{26in}{38in}}%
210 | \DeclareOptionX{archE3} { \baposter@setfinalpapersize{27in}{39in}}%
211 | \DeclareOptionX{a0paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{841mm}{1189mm}}%g
212 | \DeclareOptionX{a1paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{594mm}{841mm}}%g
213 | \DeclareOptionX{a2paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{420mm}{594mm}}%g
214 | \DeclareOptionX{a3paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{297mm}{420mm}}%g
215 | \DeclareOptionX{a4paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{210mm}{297mm}}%g
216 | \DeclareOptionX{a5paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{148mm}{210mm}}%g
217 | \DeclareOptionX{a6paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{105mm}{148mm}}%g
218 | \DeclareOptionX{b0paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{1000mm}{1414mm}}%g
219 | \DeclareOptionX{b1paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{707mm}{1000mm}}%g
220 | \DeclareOptionX{b2paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{500mm}{707mm}}%g
221 | \DeclareOptionX{b3paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{353mm}{500mm}}%g
222 | \DeclareOptionX{b4paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{250mm}{353mm}}%g
223 | \DeclareOptionX{b5paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{176mm}{250mm}}%g
224 | \DeclareOptionX{b6paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{125mm}{176mm}}%g
225 | \DeclareOptionX{ansiapaper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{8.5in}{11in}}%
226 | \DeclareOptionX{ansibpaper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{11in}{17in}}%
227 | \DeclareOptionX{ansicpaper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{17in}{22in}}%
228 | \DeclareOptionX{ansidpaper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{22in}{34in}}%
229 | \DeclareOptionX{ansiepaper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{34in}{44in}}%
230 | \DeclareOptionX{letterpaper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{8.5in}{11in}}%
231 | \DeclareOptionX{legalpaper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{8.5in}{14in}}%
232 | \DeclareOptionX{executivepaper}{\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{7.25in}{10.5in}}%
233 | \DeclareOptionX{screen} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{225mm}{180mm}}%g
234 |
235 | % Margin
236 | \setlength{\baposter@finalmargin}{1.5cm}
237 | \DeclareOptionX{fontscale}[0.292]{\renewcommand{\baposter@fontscale}{#1}}
238 | \DeclareOptionX{margin} [1.5cm]{\setlength{\baposter@finalmargin}{#1}}
239 |
240 | % move text/poster body to the right (or to the left if negative)
241 | \newlength{\baposter@movebody}
242 | \setlength{\baposter@movebody}{0cm}
243 | \DeclareOptionX{movebody}[0cm]{\setlength{\baposter@movebody}{#1}}
244 |
245 |
246 | \newif\if@debug
247 | \DeclareOptionX{debug}{\@debugtrue}
248 | %% Will be passed on to other packages (xcolor and geometry), still we don't want unused warnings
249 | \DeclareOptionX{table}{}
250 | \DeclareOptionX{showframe}{}
251 |
252 | \ProcessOptionsX
253 |
254 | \if@debug
255 | \newcommand{\debug}[1]{\typeout{#1}}
256 | \else
257 | \newcommand{\debug}[1]{}
258 | \fi
259 |
260 |
261 |
262 | \setlength{\baposter@basepaperwidth} {\baposter@fontscale\baposter@finalpaperwidth }
263 | \setlength{\baposter@basepaperheight}{\baposter@fontscale\baposter@finalpaperheight}
264 | \setlength{\baposter@basemargin} {\baposter@fontscale\baposter@finalmargin}
265 | \newlength{\baposter@basemarginright}
266 | \setlength{\baposter@basemarginright}{\baposter@basemargin}
267 | \addtolength{\baposter@basemarginright}{-\baposter@fontscale\baposter@movebody}
268 | \newlength{\baposter@basemarginleft}
269 | \setlength{\baposter@basemarginleft}{\baposter@basemargin}
270 | \addtolength{\baposter@basemarginleft}{\baposter@fontscale\baposter@movebody}
271 |
272 | \typeout{Paperwidth=\the\baposter@finalpaperwidth}
273 | \typeout{Paperheight=\the\baposter@finalpaperheight}
274 | \typeout{BasePaperwidth=\the\baposter@basepaperwidth}
275 | \typeout{BasePaperheight=\the\baposter@basepaperheight}
276 | \usepackage[
277 | paperwidth=\baposter@basepaperwidth,
278 | paperheight=\baposter@basepaperheight,
279 | tmargin=\baposter@basemargin,
280 | bmargin=\baposter@basemargin,
281 | lmargin=\baposter@basemarginleft,
282 | rmargin=\baposter@basemarginright,
283 | ]{geometry}
284 |
285 | \usepackage{pgfpages}
286 | \if@landscape
287 | \if@geometryKnowsThisSize
288 | \pgfpagesuselayout{resize to}[physical paper width=\baposter@finalpaperheight,physical paper height=\baposter@finalpaperwidth]
289 | \else
290 | \pgfpagesuselayout{resize to}[physical paper width=\baposter@finalpaperwidth,physical paper height=\baposter@finalpaperheight]
291 | \fi
292 | \else
293 | \pgfpagesuselayout{resize to}[physical paper width=\baposter@finalpaperwidth,physical paper height=\baposter@finalpaperheight]
294 | \fi
295 |
296 |
297 |
298 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
299 | % Default functions for borders/backgrounds
300 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
301 |
302 | %% These functions will all be redefined from the actual option values. In
303 | %% particular, they will be set to \baposter@optionname@optionvalue, which
304 | %% should do the actual work / setting for that particular optionvalue.
305 |
306 | \newcommand{\baposterPosterDrawBackground}[2]{} % Draw poster background
307 |
308 | \newcommand{\baposterBoxGetShape}{} % Returns path of text box shape
309 | \newcommand{\baposterBoxDrawBackground}[2]{} % Draw bg of boxes
310 | \newcommand{\baposterBoxDrawBorder}[1]{} % Draw border of individual boxes
311 |
312 | \newcommand{\baposterHeaderGetShape}{} % Returns path of text box shape
313 | \newcommand{\baposterHeaderSetShade}[3]{} % Set bg style for box headers
314 | \newcommand{\baposterHeaderDrawBackground}[3]{} % Draw background of box header
315 | \newcommand{\baposterHeaderDrawBorder}[1]{} % Draw border of box header
316 | \newcommand{\baposterHeaderDrawText}[1]{} % Draw text inside box header
317 |
318 | \newcommand{\@@previousbox}{notset} % stores the previously processed box for below=auto
319 |
320 | % Function to set a user-defined background
321 | \newcommand{\baposter@backgroundCmd}{\error{No background command defined. Use \background{...} to define background}}
322 | \newcommand{\background}[1]{\renewcommand{\baposter@backgroundCmd}{#1}}
323 |
324 |
325 |
326 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
327 | % Handle poster and box options
328 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
329 |
330 | \debug{Handling keys}
331 |
332 | %%
333 | %% POSTER OPTIONS
334 | %%
335 | %% Store all poster options in variables of the form \baposter@option
336 | %% choose-keys also store the index in \baposter@optionnr
337 | %% choose-keys typically also assign a function
338 | \definecolor{baposter@silver}{cmyk}{0,0,0,0.7}
339 | \define@boolkey[ba]{poster}[baposter@]{grid} [false] {}
340 | \define@boolkey[ba]{poster}[baposter@]{eyecatcher} [true] {}
341 | \define@cmdkey [ba]{poster}[baposter@]{headerheight} [0.1\textheight]{}
342 | \define@cmdkey [ba]{poster}[baposter@]{columns} [{}] {}
343 | \define@cmdkey [ba]{poster}[baposter@]{colspacing} [1em] {}
344 | \define@cmdkey [ba]{poster}[baposter@]{bgColorOne} [baposter@silver]{}
345 | \define@cmdkey [ba]{poster}[baposter@]{bgColorTwo} [green] {}
346 |
347 | % background can be one of: shadeLR, shadeTB, plain, user, none
348 | \define@choicekey*+[ba]{poster}{background}%
349 | [\baposter@background\baposter@backgroundnr]%
350 | {shadeLR, shadeTB, plain, user, none} [plain] {%
351 | \debug{Poster background: \baposter@background}
352 | \renewcommand{\baposterPosterDrawBackground}[2]{
353 | \csname baposter@background@\baposter@background\endcsname{##1}{##2}}
354 | }{
355 | \PackageWarning{baposter}{Unknown background `\baposter@background' (use
356 | shadeLR, shadeTB, plain, none, or user). If user is used, you also
357 | have to define \background{...}.}
358 | \renewcommand{\baposterPosterDrawBackground}[2]{\baposter@background@none{##1}{##2}}
359 | }
360 |
361 |
362 | %%
363 | %% BOX OPTIONS
364 | %%
365 | \define@cmdkey[ba]{posterbox}[baposter@box@]{cornerradius} [1em] {}
366 | \define@cmdkey[ba]{posterbox}[baposter@box@]{boxheaderheight} [2em] {}
367 | \define@cmdkey[ba]{posterbox}[baposter@box@]{boxpadding} [0.5em] {}
368 |
369 |
370 | % textborder can be one of: none, bars, coils, triangles, rectangle, rounded,
371 | % roundedleft, roundedsmall, faded; UNIMPLEMENTED: roundedright
372 | \edef\baposter@box@textborder@validvalues{none,bars,coils,triangles,rectangle,rounded,roundedleft,roundedsmall,faded}
373 | \define@choicekey*+[ba]{posterbox}{textborder}%
374 | [\baposter@box@textborder\baposter@box@textbordernr]%
375 | {none,bars,coils,triangles,rectangle,rounded,roundedleft,roundedright,roundedsmall,faded} [rectangle] {%
376 | \debug{Text border: \baposter@box@textborder}
377 | \renewcommand{\baposterBoxGetShape}{
378 | \csname baposter@box@boxshape@\baposter@box@textborder\endcsname}
379 | \renewcommand{\baposterBoxDrawBorder}[1]{
380 | \csname baposter@box@drawborder@\baposter@box@textborder\endcsname{##1}}
381 | }{
382 | \PackageWarning{baposter}{Unknown text-border style `\baposter@box@textborder'.
383 | Edit your file to choose a valid option (\baposter@box@textborder@validvalues).}
384 | \renewcommand{\baposterBoxGetShape}{\baposter@boxshape@rectangle}
385 | \renewcommand{\baposterBoxDrawBorder}[1]{\baposter@drawborder@rectangle{##1}}
386 | }
387 |
388 | % boxshade can be one of: shadeLR, shadeTB, plain, none
389 | \define@choicekey*+[ba]{posterbox}{boxshade}%
390 | [\baposter@box@boxshade\baposter@box@boxshadenr]%
391 | {shadelr,shadetb,plain,none} [none] {%
392 | \debug{Box shade: \baposter@box@boxshade}
393 | \renewcommand{\baposterBoxDrawBackground}[2]{
394 | \csname baposter@box@drawbackground@\baposter@box@boxshade\endcsname{##1}{##2}}
395 | }{
396 | \PackageWarning{baposter}{Unknown boxshade style `\baposter@boxshade'.
397 | Edit your file to choose a valid option.}
398 | \renewcommand{\baposterBoxDrawBackground}[2]{\baposter@box@drawbackground@none{##1}{##2}}
399 | }
400 |
401 | % headershade can be one of: shade-lr, shade-tb, shade-tb-inverse, plain
402 | \define@choicekey*+[ba]{posterbox}{headershade}%
403 | [\baposter@box@headershade\baposter@box@headershadenr]%
404 | {shadelr, shadetb, shadetbinverse, plain} [shadelr] {%
405 | \debug{Header shade: \baposter@box@headershade}
406 | \renewcommand{\baposterHeaderSetShade}[3]{
407 | \csname baposter@box@headershade@\baposter@box@headershade\endcsname{##1}{##2}{##3}}
408 | }{
409 | \PackageWarning{baposter}{Unknown headershade style `\baposter@box@headershade'.
410 | Edit your file to choose a valid option.}
411 | \renewcommand{\baposterHeaderSetShade}[3]{\baposter@box@headershade@none{##1}{##2}{##3}}
412 | }
413 |
414 | % headershape can be one of: rectangle, rounded, smallrounded, roundedleft, roundedright
415 | \define@choicekey*+[ba]{posterbox}{headershape}%
416 | [\baposter@box@headershape\baposter@box@headershapenr]%
417 | {rectangle,rounded,smallrounded,roundedleft,roundedright} [roundedright] {%
418 | \debug{Header shape: \baposter@box@headershape}
419 | \renewcommand{\baposterHeaderGetShape}{
420 | \csname baposter@box@headershape@\baposter@box@headershape\endcsname}
421 | \renewcommand{\baposterHeaderDrawText}[1]{
422 | \csname baposter@box@headerdrawtext@\baposter@box@headershape\endcsname{##1}}
423 | \renewcommand{\baposterHeaderDrawBorder}[1]{
424 | \csname baposter@box@headerdrawborder@\baposter@box@headershape\endcsname{##1}}
425 | }{
426 | \PackageWarning{baposter}{Unknown headershape style `\baposter@headershape'.
427 | Edit your file to choose a valid option.}
428 | \renewcommand{\baposterHeaderGetShape}{\baposter@box@headershape@rectangle}
429 | \renewcommand{\baposterHeaderDrawText}[1]{\baposter@box@headerdrawtext@rectangle{##1}}
430 | \renewcommand{\baposterHeaderDrawBorder}[1]{\baposter@box@headerdrawborder@rectangle{##1}}
431 | }
432 |
433 | % headerborder can be one of: open, closed, none
434 | \define@choicekey*+[ba]{posterbox}{headerborder}%
435 | [\baposter@box@headerborder\baposter@box@headerbordernr]%
436 | {open,closed,none} [open] {%
437 | \debug{Header border: \baposter@box@headerborder}
438 | % \renewcommand{\baposterHeaderBorder}{
439 | % \csname baposter@headerborder@\baposter@box@headerborder\endcsname}
440 | }{
441 | \PackageWarning{baposter}{Unknown headerborder style `\baposter@headerborder'.
442 | Edit your file to choose a valid option.}
443 | % \renewcommand{\baposterHeaderBorder}{\baposter@box@headerborder@rectangle}
444 | }
445 |
446 |
447 | \define@cmdkey[ba]{posterbox}[baposter@box@]{borderColor} [yellow] {}
448 | \define@cmdkey[ba]{posterbox}[baposter@box@]{headerColorOne} [red] {}
449 | \define@cmdkey[ba]{posterbox}[baposter@box@]{headerColorTwo} [brown] {}
450 | \define@cmdkey[ba]{posterbox}[baposter@box@]{headerFontColor} [black] {}
451 | \define@cmdkey[ba]{posterbox}[baposter@box@]{boxColorOne} [magenta] {}
452 | \define@cmdkey[ba]{posterbox}[baposter@box@]{boxColorTwo} [cyan] {}
453 | \define@cmdkey[ba]{posterbox}[baposter@box@]{headerfont} [\scshape\Large] {}
454 | \define@cmdkey[ba]{posterbox}[baposter@box@]{textfont} [{}] {}
455 |
456 | \define@cmdkey[ba]{posterbox}[baposter@box@]{linewidth} [2pt] {}
457 |
458 | \define@cmdkey[ba]{posterbox}[baposter@box@]{below} [notset]{}
459 | \define@cmdkey[ba]{posterbox}[baposter@box@]{above} [notset]{}
460 | \define@cmdkey[ba]{posterbox}[baposter@box@]{aligned}[notset]{}
461 | \define@cmdkey[ba]{posterbox}[baposter@box@]{bottomaligned}[notset]{}
462 | \define@cmdkey[ba]{posterbox}[baposter@box@]{column} [0] {}
463 | \define@cmdkey[ba]{posterbox}[baposter@box@]{row} [0] {}
464 | \define@cmdkey[ba]{posterbox}[baposter@box@]{span} [1] {}
465 | \define@cmdkey[ba]{posterbox}[baposter@box@]{height} [auto] {}
466 | \define@cmdkey[ba]{posterbox}[baposter@box@]{name} [noname]{}
467 |
468 | % Set some default values, the poster and posterbox environments can override:
469 | \setkeys[ba]{poster}{
470 | % Debug grid
471 | grid=false,
472 | % Is there an eyecatcher image
473 | eyecatcher=true,
474 | columns={},
475 | % Colours
476 | bgColorOne=baposter@silver,
477 | bgColorTwo=green,
478 | %
479 | colspacing=1em,
480 | headerheight=0.1\textheight,
481 | background=shadeLR,
482 | }{}
483 | \setkeys[ba]{posterbox}{
484 | % Position
485 | column=0,row=0,span=1,
486 | below=notset,above=notset,
487 | bottomaligned=notset,
488 | aligned=notset,
489 | height=auto,
490 | % Name
491 | name=noname,
492 | % Box design: border:
493 | linewidth=2pt,
494 | borderColor=yellow,
495 | cornerradius=1em,
496 | % text box:
497 | textfont={},
498 | boxshade=plain,
499 | boxColorOne=magenta,
500 | boxColorTwo=cyan,
501 | textborder=faded,
502 | boxpadding=0.5em,
503 | % header
504 | headerfont=\scshape\Large,% or headerfont=\color{white}\textsf\textbf
505 | headerFontColor=black,
506 | headerColorOne=red,
507 | headerColorTwo=brown,
508 | headershape=rectangle,
509 | headershade=shadeLR,
510 | headerborder=none,
511 | boxheaderheight=2em,
512 | }{}
513 |
514 |
515 |
516 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
517 | %%% Background options and functions (one function for each possible value)
518 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
519 |
520 | \newcommand{\baposter@background@shadelr}[2]{
521 | \debug{BAPOSTER: Using shade left right background.}
522 | \begin{tikzpicture}[remember picture,overlay]%
523 | \shade [shading=axis,left color=#1,right color=#2] (current page.north west)
524 | rectangle(current page.south east);
525 | \end{tikzpicture}%
526 | }
527 | \newcommand{\baposter@background@shadetb}[2]{
528 | \debug{BAPOSTER: Using shade top to bottom background.}
529 | \begin{tikzpicture}[remember picture,overlay]%
530 | \shade [shading=axis,top color=#1,bottom color=#2] (current page.north west)
531 | rectangle(current page.south east);
532 | \end{tikzpicture}%
533 | }
534 | \newcommand{\baposter@background@plain}[2]{
535 | \debug{BAPOSTER: Using plain background.}
536 | \begin{tikzpicture}[remember picture,overlay]%
537 | \fill [fill=#1] (current page.north west) rectangle(current page.south east);
538 | \end{tikzpicture}%
539 | }
540 | \newcommand{\baposter@background@user}[2]{
541 | \debug{BAPOSTER: Using user background.}
542 | \baposter@backgroundCmd%
543 | }
544 | \newcommand{\baposter@background@none}[2]{
545 | \debug{BAPOSTER: Using no background.}
546 | }
547 |
548 |
549 |
550 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
551 | %%% Return shape path of text box (depending on the box shape)
552 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
553 |
554 | \newcommand{\baposter@box@boxshape@none}{\baposter@box@boxshape@rectangle}
555 | \newcommand{\baposter@box@boxshape@bars}{
556 | (\baposter@box@name tnw) -- (\baposter@box@name sw) %
557 | (\baposter@box@name se) -- (\baposter@box@name tne)
558 | }
559 | \newcommand{\baposter@box@boxshape@coils}{\baposter@box@boxshape@bars}
560 | \newcommand{\baposter@box@boxshape@triangles}{\baposter@box@boxshape@bars}
561 | \newcommand{\baposter@box@boxshape@rectangle}{
562 | (\baposter@box@name tnw) -- (\baposter@box@name sw) -- %
563 | (\baposter@box@name se) -- (\baposter@box@name tne)%
564 | }
565 | \newcommand{\baposter@box@boxshape@faded}{
566 | (\baposter@box@name tnw) -- (\baposter@box@name sw) %
567 | (\baposter@box@name tne) -- (\baposter@box@name se)
568 | }
569 | \newcommand{\baposter@box@boxshape@rounded}{
570 | [rc] \baposter@box@boxshape@rectangle%
571 | }
572 | \newcommand{\baposter@box@boxshape@roundedsmall}{
573 | [src] \baposter@box@boxshape@rectangle
574 | }
575 | \newcommand{\baposter@box@boxshape@roundedleft}{
576 | (\baposter@box@name tnw) {[rc]-- (\baposter@box@name sw)} -- %
577 | (\baposter@box@name se) -- (\baposter@box@name tne)%
578 | }
579 | \newcommand{\baposter@box@boxshape@roundedright}{
580 | (\baposter@box@name tnw) -- (\baposter@box@name sw) {[rc]-- %
581 | (\baposter@box@name se)} -- (\baposter@box@name tne)%
582 | }
583 |
584 |
585 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
586 | %%% Draw box background (one function for each possible value)
587 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
588 |
589 | % These functions take no arguments
590 | \newcommand{\baposter@box@drawbackground@none}[2]{
591 | \tikzstyle{box colors}=[]
592 | }
593 | \newcommand{\baposter@box@drawbackground@plain}[2]{
594 | \tikzstyle{box colors}=[fill=#1]
595 | \fill[box colors] \baposterBoxGetShape;
596 | }
597 | \newcommand{\baposter@box@drawbackground@shadelr}[2]{
598 | \tikzstyle{box colors}=[shading=axis, left color=#1, right color=#2]%
599 | \fill[box colors] \baposterBoxGetShape;
600 | }
601 | \newcommand{\baposter@box@drawbackground@shadetb}[2]{
602 | \tikzstyle{box colors}=[shading=axis, top color=#1, bottom color=#2]%
603 | \fill[box colors] \baposterBoxGetShape;
604 | }
605 |
606 |
607 |
608 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
609 | %%% Draw box border
610 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
611 |
612 | % These functions take two arguments: borderColor
613 | \newcommand{\baposter@box@drawborder@none}[1]{}
614 | \newcommand{\baposter@box@drawborder@bars}[1]{
615 | \draw[color=#1] \baposterBoxGetShape;%
616 | }
617 | \newcommand{\baposter@box@drawborder@coils}[1]{
618 | \draw[color=#1,segment amplitude=0.35em,segment length=0.4em,snake=coil] \baposterBoxGetShape;%
619 | }
620 | \newcommand{\baposter@box@drawborder@triangles}[1]{
621 | \draw[color=#1,segment amplitude=0.2em,segment length=0.4em,snake=triangles] \baposterBoxGetShape;%
622 | }
623 | \newcommand{\baposter@box@drawborder@rectangle}[1]{
624 | \draw[color=#1] \baposterBoxGetShape;%
625 | }
626 | \newcommand{\baposter@box@drawborder@rounded}[1]{
627 | \draw[color=#1] \baposterBoxGetShape;%
628 | }
629 | \newcommand{\baposter@box@drawborder@roundedleft}[1]{
630 | \draw[color=#1] \baposterBoxGetShape;%
631 | }
632 | \newcommand{\baposter@box@drawborder@roundedright}[1]{
633 | \draw[color=#1] \baposterBoxGetShape;%
634 | }
635 | \newcommand{\baposter@box@drawborder@faded}[1]{
636 | % This is the right way to do it, but it does not work with evince, and has problems during printing, so instead we do
637 | %\draw[color=#1,path fading=south] \baposterBoxGetShape;%
638 | % this
639 | \foreach \x in {0,1,...,90} \draw[color=#1!\x] ($(\baposter@box@name tnw)!{(100-\x)/100}!(\baposter@box@name sw)$) -- ($(\baposter@box@name tnw)!{(100-(\x+10))/100}!(\baposter@box@name sw)$);%
640 | \foreach \x in {0,1,...,90} \draw[color=#1!\x] ($(\baposter@box@name tne)!{(100-\x)/100}!(\baposter@box@name se)$) -- ($(\baposter@box@name tne)!{(100-(\x+10))/100}!(\baposter@box@name se)$);%
641 | }
642 | \newcommand{\baposter@box@drawborder@roundedsmall}[1]{
643 | \draw[color=#1] \baposterBoxGetShape;%
644 | }
645 |
646 |
647 |
648 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
649 | %%% Return shape path of text box (depending on the box shape)
650 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
651 |
652 | % These functions take no arguments
653 | % TODO: For headerborder==none, use (\baposter@box@name outer tnw) instead!
654 | \newcommand{\baposter@box@headershape@rectangle}{%
655 | (\baposter@box@name tnw) -- (\baposter@box@name nw) -- %
656 | (\baposter@box@name ne) -- (\baposter@box@name tne)%
657 | }
658 | \newcommand{\baposter@box@headershape@smallrounded}{%
659 | (\baposter@box@name tnw) {[src] -- (\baposter@box@name nw) -- %
660 | (\baposter@box@name ne)} -- (\baposter@box@name tne)%
661 | }
662 | \newcommand{\baposter@box@headershape@roundedright}{%
663 | (\baposter@box@name tnw) -- (\baposter@box@name nw) {[rc] -- %
664 | (\baposter@box@name ne)} -- (\baposter@box@name tne)%
665 | }
666 | \newcommand{\baposter@box@headershape@roundedleft}{%
667 | (\baposter@box@name tnw) {[rc]-- (\baposter@box@name nw)} -- %
668 | (\baposter@box@name ne) -- (\baposter@box@name tne)%
669 | }
670 | \newcommand{\baposter@box@headershape@rounded}{%
671 | (\baposter@box@name tnw) {[rc] -- (\baposter@box@name nw) -- %
672 | (\baposter@box@name ne) } -- (\baposter@box@name tne)%
673 | }
674 |
675 |
676 |
677 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
678 | %%% Header text drawing (one function for each possible value of headershape)
679 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
680 |
681 | % These functions take one argument: the header text
682 | \newcommand{\baposter@box@headerdrawtext@rectangle}[1]{
683 | \path (\baposter@box@name nw) +(0em,-0.5\baposter@box@@boxheaderheight) node[anchor=west,inner sep=0.4em] {#1};%
684 | }
685 | \newcommand{\baposter@box@headerdrawtext@smallrounded}[1]{
686 | \path (\baposter@box@name nw) +(0.5\boxwidth,-0.5\baposter@box@@boxheaderheight) node[anchor=center] {#1};%
687 | }
688 | \newcommand{\baposter@box@headerdrawtext@roundedright}[1]{
689 | \path (\baposter@box@name nw) +(0em,-0.5\baposter@box@@boxheaderheight)%
690 | node[anchor=west,inner sep=0.4em,text depth=0.0em] {#1};%
691 | }
692 | \newcommand{\baposter@box@headerdrawtext@roundedleft}[1]{
693 | \path (\baposter@box@name nw) +(0em,-0.5\baposter@box@@boxheaderheight)%
694 | node[anchor=west,inner sep=0.4em] {#1};%
695 | }
696 | \newcommand{\baposter@box@headerdrawtext@rounded}[1]{
697 | \path (\baposter@box@name nw) +(0.5\boxwidth,-0.5\baposter@box@@boxheaderheight) node[anchor=center] {#1};%
698 | }
699 |
700 |
701 |
702 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
703 | %%% Header shade options and functions (one function for each possible value)
704 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
705 |
706 | % These functions take two arguments: headerColorOne, headerColorTwo and borderColor
707 | \newcommand{\baposter@box@headershade@shadelr}[3]{
708 | \debug{Header-Shade: Shade Left - Right}
709 | \tikzstyle{header colors}=[%
710 | color=#3,%
711 | shading=axis,%
712 | left color=#1,%
713 | right color=#2%
714 | ]%
715 | }
716 | \newcommand{\baposter@box@headershade@shadetb}[3]{
717 | \debug{Header-Shade: Shade Top - Bottom}
718 | \tikzstyle{header colors}=[%
719 | color=#3,%
720 | shading=axis,%
721 | top color=#1,%
722 | bottom color=#2%
723 | ]%
724 | }
725 | \newcommand{\baposter@box@headershade@shadetbinverse}[3]{
726 | \tikzstyle{header colors}=[%
727 | top color=#1!75!#2,%
728 | bottom color=#2!100!#1,%
729 | shading angle=20%
730 | ]%
731 | \colorlet{baposterHeaderFontColor}{white}%
732 | }
733 | \newcommand{\baposter@box@headershade@plain}[3]{
734 | \debug{Header-Shade: Plain}
735 | \tikzstyle{header colors}=[%
736 | color=#3,%
737 | fill=#1%
738 | ]%
739 | }
740 | \newcommand{\baposter@box@headershade@none}[3]{
741 | \debug{Header-Shade: none}
742 | \tikzstyle{header colors}=[]
743 | }
744 |
745 |
746 |
747 |
748 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
749 | %%% The main poster environment
750 | %%% \begin{baposter}{settings}{Eye Catcher}{Title}{Author}{University Logo}
751 | %%%-----------------------------------------------------------------------------
752 | %%% The settings are
753 | %%% - grid=true,[false]:Show grid to help with alignment
754 | %%% - colspacing=0.7em: Column spacing
755 | %%% - columns=4: number of columns (default 4 in landscape and 3 in portrait format) (maximum number is 6)
756 | %%% - color=[orange]: xcolor color definition used as the main color of the poster
757 | %%% - colortwo=[white]: The other color for gradient based layouts
758 | %%% - textborder=none,bars,coils,triangles,rectangle,rounded,roundedsmall,roundedleft,roundedright,[faded]
759 | %%% The style of the box around the text area
760 | %%% - headerborder=none,closed,open
761 | %%% No extra border around box header, full border around box header or border that is open below.
762 | %%% - headershape=rectangle,rounded,roundedleft,roundedright
763 | %%% Shape of the box-header region
764 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
765 | \newenvironment{poster}[5]{%
766 | \thispagestyle{empty}% Suppress Page Number
767 | \debug{Poster Starts}%
768 | % This setkeys call parses all provided options and depending on the option
769 | % value, assigns different handler functions to the \baposter(Box|Header)*
770 | % functions. Once that is done, we don't have to care about particular
771 | % values for border, shading, etc. All we have to do is call the
772 | % handler functions and let them do their job.
773 | % This also allows the user to override the poster-wide defaults on a per-box
774 | % basis.
775 | \setkeys[ba]{posterbox,poster}{#1}%
776 | %
777 | % TODO: Move all those assignments to the key macros!
778 | % Parse Keys%
779 | \colorlet{bgColorOne}{\baposter@bgColorOne}
780 | \colorlet{bgColorTwo}{\baposter@bgColorTwo}
781 | %
782 | %% Boxes%
783 | \setlength{\headerheight}{\baposter@headerheight}%
784 | \setlength{\colheight}{\textheight-\baposter@headerheight}%
785 | \renewcommand{\@@previousbox}{notset}
786 |
787 | \debug{Format}%
788 | % Set default for columns if unset (4 for landscape, 3 for portrait)
789 | \ifthenelse{\equal{\baposter@columns}{}}{%
790 | \renewcommand{\baposter@columns}{\if@landscape4\else3\fi}%
791 | }{}
792 | %
793 | \debug{Columns: \baposter@columns}%
794 | \setlength{\baposter@@colspacing}{\baposter@colspacing}%
795 | \setlength{\colwidth}{\textwidth}%
796 | \addtolength{\colwidth}{\baposter@@colspacing*(1-\baposter@columns)}%
797 | \ifcase\baposter@columns\relax
798 | \error{You need to have at least one column!}
799 | \or % 1
800 | \setlength{\colwidth}{\colwidth}%
801 | \or % 2
802 | \setlength{\colwidth}{0.5\colwidth}%
803 | \or % 3
804 | \setlength{\colwidth}{0.3333333333333\colwidth}%
805 | \or % 4
806 | \setlength{\colwidth}{0.25\colwidth}%
807 | \or % 5
808 | \setlength{\colwidth}{0.2\colwidth}%
809 | \or % 6
810 | \setlength{\colwidth}{0.16666666666\colwidth}%
811 | \else % >6
812 | \error{You do not want so many columns}
813 | \fi
814 | %
815 | \newcommand{\baposter@reference}{north west}%
816 | %
817 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
818 | % A box with a header and some content. The basic unit of the poster%
819 | %---------------------------------------------------------------------------%
820 | % Each box has a name and can be placed absolutely or relatively.%
821 | % The only inconvenience is that you can only specify a relative position %
822 | % towards an already declared box. So if you have a box attached to the %
823 | % bottom, one to the top and a third one which should be inbetween, you %
824 | % have to specify the top and bottom boxes before you specify the middle %
825 | % box.%
826 | %%
827 | % below= name of other node%
828 | % above= name of other node%
829 | % aligned=name of other node%
830 | % bottomaligned=name of other node%
831 | % column= [0] %
832 | % row= [0] %
833 | % span= [1] %
834 | % height= ,[auto]%
835 | % name= [noname]%
836 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
837 |
838 | % Backward-compatibility definition (\headerbox command uses posterbox env):
839 | \newcommand{\headerbox}[3]{%
840 | \begin{posterbox}[##2]{##1}
841 | ##3
842 | \end{posterbox}
843 | }
844 |
845 | \newenvironment{posterbox}[2][]{%
846 | \debug{Poster box options: ##1}%
847 | % Override the poster-wide defaults on a per-box basis
848 | \setkeys[ba]{posterbox}{##1}%
849 | %
850 | \def\baposter@box@title{##2}
851 | %
852 | \colorlet{borderColor}{\baposter@box@borderColor}
853 | \colorlet{headerColorOne}{\baposter@box@headerColorOne}
854 | \colorlet{headerColorTwo}{\baposter@box@headerColorTwo}
855 | \colorlet{headerFontColor}{\baposter@box@headerFontColor}
856 | \colorlet{boxColorOne}{\baposter@box@boxColorOne}
857 | \colorlet{boxColorTwo}{\baposter@box@boxColorTwo}
858 | %
859 | \setlength{\baposter@box@@cornerradius}{\baposter@box@cornerradius}%
860 | \setlength{\baposter@box@@boxheaderheight}{\baposter@box@boxheaderheight}%
861 | \setlength{\baposter@box@@boxpadding}{\baposter@box@boxpadding}%
862 |
863 |
864 | %% The columns is always given absolute
865 | % boxstartx = column * colwidth + column * colspacing
866 | \setlength{\boxstartx}{(\colwidth+\baposter@@colspacing)*\baposter@box@column}%
867 | %
868 | %% The width is gvien absolute
869 | % Box Width = span * colwidth + (span-1) * colspacing
870 | \setlength{\boxwidth}{\baposter@box@span\colwidth} %
871 | \addtolength{\boxwidth}{\baposter@@colspacing*(\baposter@box@span-1)}%
872 | %
873 | %% Measure the content of the box%
874 | \setbox\baposter@box@content=\hbox\bgroup%
875 | \begin{pgfinterruptpicture}%
876 | \begin{minipage}[t]{\boxwidth-\baposter@box@@boxpadding*2}%
877 | \baposter@box@textfont\bgroup%
878 | }% End of posterbox preamble
879 | %%% HERE COME THE ACTUAL CONTENTS OF THE HEADERBOX ENVIRONMENT
880 | {% posterbox handling after contents (i.e. drawing everything)
881 | \egroup%
882 | \end{minipage}%
883 | \end{pgfinterruptpicture}%
884 | \egroup%
885 | \setlength{\boxheight}{\ht\baposter@box@content}%
886 | \addtolength{\boxheight}{\dp\baposter@box@content}%
887 | \addtolength{\boxheight}{\baposter@box@@boxheaderheight} % Header%
888 | \addtolength{\boxheight}{2\baposter@box@@boxpadding} % Inner Sep
889 | %
890 | \ifthenelse{\equal{\baposter@box@height}{bottom}}{%
891 | }{\ifthenelse{\equal{\baposter@box@height}{auto}}{%
892 | }{ % Neither auto nor bottom%
893 | \setlength{\boxheight}{\baposter@box@height\colheight}%
894 | }}%
895 | %
896 | %% Determine the box position%
897 | \debug{Setting Coordinates}%
898 | \debug{Upper Right}%
899 | \debug{\baposter@box@name}%
900 | %
901 | %%% Upper Right Corner%
902 | % if below=auto, set it to the previous box
903 | % TODO: We should generalize this to the previous box of the used column,
904 | % currently we use the previous box, which might be in a different column
905 | \ifthenelse{\equal{\baposter@box@below}{auto}}{%
906 | \edef\baposter@box@below{\@@previousbox}
907 | \debug{Box \baposter@box@name has below=auto, placing it below box \baposter@box@below.}
908 | }{}
909 | \xdef\@@previousbox{\baposter@box@name}
910 |
911 | \ifthenelse{\not\equal{\baposter@box@below}{notset} }{%
912 | %% Below%
913 | \debug{Below}%
914 | \path[shape=coordinate] (\boxstartx,0pt |- \baposter@box@below se) ++(0pt,-\baposter@@colspacing) coordinate(\baposter@box@name nw);%
915 | }{%
916 | \ifthenelse{\not\equal{\baposter@box@aligned}{notset} }{%
917 | %% Aligned%
918 | \debug{Aligned: \baposter@box@aligned}%
919 | \path[shape=coordinate] (\boxstartx,0pt |- \baposter@box@aligned nw) coordinate(\baposter@box@name nw);%
920 | }{%
921 | %% Fixed%
922 | \debug{Fixed}%
923 | \setlength{\boxstarty}{\baposter@box@row\colheight}%
924 | \path[shape=coordinate] (\boxstartx,\colheight-\boxstarty) coordinate(\baposter@box@name nw);%
925 | }}%
926 | %
927 | %% Lower Left Corner%
928 | \debug{Lower Left}%
929 | \ifthenelse{\equal{\baposter@box@above}{bottom}}{%
930 | %% Above = Bottom%
931 | \debug{Above bottom}%
932 | \ifthenelse{\equal{\baposter@box@below}{notset} \and \equal{\baposter@box@aligned}{notset}}{%
933 | \path[shape=coordinate] (\boxstartx,\boxheight) coordinate(\baposter@box@name nw);%
934 | }{}%
935 | \path[shape=coordinate] (\boxstartx+\boxwidth,0pt) coordinate(\baposter@box@name se);%
936 | }{\ifthenelse{\not \equal{\baposter@box@bottomaligned}{notset}}{%
937 | \path[shape=coordinate] (\boxstartx+\boxwidth,0pt |- \baposter@box@bottomaligned se) coordinate(\baposter@box@name se);%
938 | }{{\ifthenelse{\not \equal{\baposter@box@above}{notset}}{%
939 | %% Above = Node%
940 | \path[shape=coordinate] (\boxstartx+\boxwidth,0pt |- \baposter@box@above nw) +(0pt,\baposter@@colspacing) coordinate(\baposter@box@name se);%
941 | }{%
942 | %% Above = notset%
943 | \debug{Above=not set}%
944 | \ifthenelse{\equal{\baposter@box@height}{bottom}}{%
945 | %% height=bottom%
946 | \debug{height=bottom}%
947 | \path[shape=coordinate] (\boxstartx+\boxwidth,0pt) coordinate(\baposter@box@name se);%
948 | }{ %% height=auto or fixed%
949 | \debug{height=auto or fixed}%
950 | \path[shape=coordinate] (\baposter@box@name nw) ++(\boxwidth,-\boxheight) coordinate(\baposter@box@name se);%
951 | }}}}}%
952 | %
953 | %
954 | % Set coordinates relative to nw,se%
955 | \debug{Fixing Coordinates}%
956 | \path[shape=coordinate]%
957 | (\baposter@box@name nw) +(0pt,-\baposter@box@@boxheaderheight) coordinate(\baposter@box@name tnw)%
958 | (\baposter@box@name nw |- \baposter@box@name se) coordinate(\baposter@box@name sw)%
959 | (\baposter@box@name se |- \baposter@box@name nw) coordinate(\baposter@box@name ne)%
960 | (\baposter@box@name ne) +(0pt,-\baposter@box@@boxheaderheight) coordinate(\baposter@box@name tne)%
961 | %
962 | (\baposter@box@name nw) +(-0.025em,0pt) coordinate(\baposter@box@name outer nw)%
963 | (\baposter@box@name tnw) +(-0.025em,0pt) coordinate(\baposter@box@name outer tnw)%
964 | (\baposter@box@name sw) +(-0.025em,0pt) coordinate(\baposter@box@name outer sw)%
965 | %
966 | (\baposter@box@name ne) +( 0.025em,0pt) coordinate(\baposter@box@name outer ne)%
967 | (\baposter@box@name tne) +( 0.025em,0pt) coordinate(\baposter@box@name outer tne)%
968 | (\baposter@box@name se) +( 0.025em,0pt) coordinate(\baposter@box@name outer se);%
969 | %
970 | %% Setting the bg colors of the box header
971 | \baposterHeaderSetShade{headerColorOne}{headerColorTwo}{borderColor}
972 | %
973 | \tikzstyle{rc}=[rounded corners=\baposter@box@@cornerradius];%
974 | \tikzstyle{src}=[rounded corners=0.5em];%
975 | %
976 |
977 | %% Now that everything is set up, draw the actual box, with bg and header
978 | \begin{scope}[line width=\baposter@box@linewidth]
979 | %% Header%
980 | \debug{Header}%
981 | \debug{Header-Shape: \baposter@box@headershape, header-border: \baposter@box@headerborder (\baposter@box@headerbordernr)}%
982 | % TODO: Also turn this last ifcase construct into a handler function
983 | % We only need to determine (fill|shade)(draw|)...
984 | % \baposterHeaderDrawBackground{bgColorOne}{bgColorTwo}{borderColor}
985 | % \baposterHeaderDrawBorder{borderColor}
986 | \ifcase\baposter@box@headerbordernr\relax%
987 | % open
988 | \ifthenelse{\equal{\baposter@box@headershade}{plain}}{
989 | \filldraw [style=header colors] \baposterHeaderGetShape;%
990 | }{
991 | \shadedraw [style=header colors] \baposterHeaderGetShape;%
992 | }
993 | \or
994 | % closed
995 | \ifthenelse{\equal{\baposter@box@headershade}{plain}}{
996 | \filldraw [style=header colors] \baposterHeaderGetShape -- cycle;%
997 | }{
998 | \shadedraw [style=header colors] \baposterHeaderGetShape -- cycle;%
999 | }
1000 | \or
1001 | % none
1002 | \ifthenelse{\equal{\baposter@box@headershade}{plain}}{
1003 | \fill [style=header colors] \baposterHeaderGetShape;%
1004 | }{
1005 | \shade [style=header colors] \baposterHeaderGetShape;%
1006 | }
1007 | \fi
1008 | %
1009 | %% Draw the text inside the box header:
1010 | \baposterHeaderDrawText{\color{headerFontColor}\baposter@box@headerfont{\baposter@box@title}};%
1011 | %
1012 | %% Text borders (border around boxes)
1013 | \debug{Poster boxes}%
1014 | % First set box shade
1015 | \baposterBoxDrawBackground{boxColorOne}{boxColorTwo}
1016 | \baposterBoxDrawBorder{borderColor}
1017 | %%
1018 | %% Text Box%
1019 | \debug{Drawing Text}%
1020 | \path (\baposter@box@name tnw) node(text) [anchor=north west,
1021 | outer sep=-0.000em,text width=\boxwidth-2\baposter@box@@boxpadding,inner sep=\baposter@box@@boxpadding,
1022 | text justified] {\usebox{\baposter@box@content}};%
1023 | \end{scope}
1024 | %
1025 | % Finally store the box name as the previous box for the next call
1026 | % \xdef\@@previousbox{\baposter@box@name}%
1027 | }% END of posterbox definition
1028 | %
1029 | %% Poster Background%
1030 | \baposterPosterDrawBackground{bgColorOne}{bgColorTwo}%
1031 | %% Poster header/title
1032 | \hspace{-1.5em}%
1033 | \begin{tikzpicture}[inner sep=0pt,outer sep=0pt,line width=0.05em]%
1034 | \useasboundingbox (0em,0em) rectangle(\textwidth,\textheight);%
1035 | \path[shape=coordinate]%
1036 | (0pt,\colheight) coordinate(north west) (\textwidth,\colheight) coordinate(north east)%
1037 | (0pt,0pt) coordinate(south west) (\textwidth,0pt) coordinate(south east);%
1038 | %
1039 | \ifbaposter@eyecatcher% Has eye catcher
1040 | \debug{Eyecatcher found!}
1041 | \setbox\baposter@titleimage@left=\hbox{#2}%
1042 | \else% Has no eye catcher%
1043 | \setbox\baposter@titleimage@left=\hbox{}%
1044 | \fi%
1045 | \setlength{\baposter@titleimage@left@width}{\wd\baposter@titleimage@left}%
1046 | \setbox\baposter@titleimage@right=\hbox{#5}%
1047 | \setlength{\baposter@titleimage@right@width}{\wd\baposter@titleimage@right}%
1048 | \setlength{\baposter@titleimage@textwidth}{\textwidth}%
1049 | \addtolength{\baposter@titleimage@textwidth}{-\baposter@titleimage@left@width}%
1050 | \addtolength{\baposter@titleimage@textwidth}{-\baposter@titleimage@right@width}%
1051 |
1052 | \debug{#3}
1053 | %
1054 | %
1055 | % % Draw Header%
1056 | \draw (north west) +(0em,1em+0.5\headerheight) node(image)[anchor=west] { {\usebox{\baposter@titleimage@left }} };%
1057 | \draw (north east) +(0em,1em+0.5\headerheight) node(logo) [anchor=east] { {\usebox{\baposter@titleimage@right}} };%
1058 | %
1059 | \ifbaposter@eyecatcher% Has eye catcher%
1060 | \draw (image.east) node(title)[anchor=west,text width=\baposter@titleimage@textwidth]{%
1061 | \begin{minipage}{\baposter@titleimage@textwidth}%
1062 | \begin{center}%
1063 | \textbf{\Huge #3}\\%
1064 | {\Large #4}%
1065 | \end{center}%
1066 | \end{minipage}
1067 | };%
1068 | \else% Has no eye catcher
1069 | \draw (image.east) node(title)[anchor=west] { {\begin{minipage}{\baposter@titleimage@textwidth}{\bfseries\Huge #3}\\{\Large #4}\end{minipage}} };%
1070 | \fi
1071 | }% END poster begin
1072 | % The body
1073 | {% BEGIN poster end
1074 | % The end, draw gridlines if neccesary
1075 | \ifbaposter@grid
1076 | \newdimen{\gridpos}
1077 | \pgfmathsetmacro{\z}{\baposter@columns-1}
1078 | \foreach \y in {0,...,\z}
1079 | {
1080 | \setlength{\gridpos}{\y\colwidth+\y\baposter@@colspacing}
1081 | \draw[draw=green,draw opacity=0.7] (\gridpos,0pt) -- (\gridpos,\colheight)
1082 | (\gridpos+\colwidth,0pt) -- (\gridpos+\colwidth,\colheight);%
1083 | }
1084 | % Horizontal lines, every 0.1:
1085 | %% Explicitly list all percentages, because with {0.0, 0.1, ..., 1.0} we
1086 | %% get rounding errors in the displayed numbers!
1087 | \foreach \y in {0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0}
1088 | \draw[draw=green,draw opacity=0.7] (0pt,\colheight-\y\colheight) --
1089 | (\textwidth,\colheight-\y\colheight) node[anchor=west] {\y};%
1090 | \fi%
1091 | \end{tikzpicture}%
1092 | % \xkvview{}
1093 | \par
1094 | }% END poster end
1095 |
--------------------------------------------------------------------------------
/poster/dd.smt2:
--------------------------------------------------------------------------------
1 | (set-logic HORN)
2 | (declare-fun Inv (Int) Bool)
3 | ;; fact
4 | (assert (forall ((x Int)) (=> (= x 0) (Inv x))))
5 | ;; chc
6 | (assert (forall ((x Int) (y Int))
7 | (=> (and (Inv x) (<= x 10) (= y (+ x 1))) (Inv y))))
8 | ;; query
9 | (assert (forall ((x Int)) (=> (and (Inv x) (> x 15)) false)))
10 | (check-sat)
11 | (get-model)
12 |
--------------------------------------------------------------------------------
/poster/images/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/images/.DS_Store
--------------------------------------------------------------------------------
/poster/images/bsi_res.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/images/bsi_res.pdf
--------------------------------------------------------------------------------
/poster/images/chart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/images/chart.png
--------------------------------------------------------------------------------
/poster/images/code-hunter.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/images/code-hunter.pdf
--------------------------------------------------------------------------------
/poster/images/example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/images/example.png
--------------------------------------------------------------------------------
/poster/images/hunter.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/images/hunter.pdf
--------------------------------------------------------------------------------
/poster/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/images/logo.png
--------------------------------------------------------------------------------
/poster/images/logo1.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/images/logo1.jpeg
--------------------------------------------------------------------------------
/poster/images/logo2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/images/logo2.png
--------------------------------------------------------------------------------
/poster/images/pintu.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/images/pintu.jpg
--------------------------------------------------------------------------------
/poster/images/pliny.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/images/pliny.png
--------------------------------------------------------------------------------
/poster/images/taiji.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/images/taiji.png
--------------------------------------------------------------------------------
/poster/images/ut.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/images/ut.png
--------------------------------------------------------------------------------
/poster/images/viz-overview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fredfeng/CS190I/6a95f769f0c1a00e1fca1526f96bfc4094d179af/poster/images/viz-overview.png
--------------------------------------------------------------------------------
/poster/lijuan.aux:
--------------------------------------------------------------------------------
1 | \relax
2 | \bibstyle{ieee}
3 | \bibcite{amberg11:graphtrack}{1}
4 | \bibcite{awf:tracking}{2}
5 | \pgfsyspdfmark {pgfid1}{1780200}{797160}
6 |
--------------------------------------------------------------------------------
/poster/lijuan.log:
--------------------------------------------------------------------------------
1 | This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019) (preloaded format=pdflatex 2019.5.8) 5 DEC 2020 22:29
2 | entering extended mode
3 | restricted \write18 enabled.
4 | %&-line parsing enabled.
5 | **lijuan.tex
6 | (./lijuan.tex
7 | LaTeX2e <2018-12-01>
8 | (./baposter.cls
9 | Document Class: baposter 2011/11/26 v2.0 baposter class
10 | (/usr/local/texlive/2019/texmf-dist/tex/latex/base/article.cls
11 | Document Class: article 2018/09/03 v1.4i Standard LaTeX document class
12 | (/usr/local/texlive/2019/texmf-dist/tex/latex/base/size10.clo
13 | File: size10.clo 2018/09/03 v1.4i Standard LaTeX file (size option)
14 | )
15 | \c@part=\count80
16 | \c@section=\count81
17 | \c@subsection=\count82
18 | \c@subsubsection=\count83
19 | \c@paragraph=\count84
20 | \c@subparagraph=\count85
21 | \c@figure=\count86
22 | \c@table=\count87
23 | \abovecaptionskip=\skip41
24 | \belowcaptionskip=\skip42
25 | \bibindent=\dimen102
26 | )
27 | baposter: Brian Amberg, 2007, 2008, 2009, 2010, 2011 | http://www.brian-amberg.
28 | de/uni/poster/
29 | baposter: Reinhold Kainhofer, 2011 | http://reinhold.kainhofer.com/
30 | \baposter@basepaperwidth=\skip43
31 | \baposter@basepaperheight=\skip44
32 | \baposter@basemargin=\skip45
33 | \baposter@finalpaperwidth=\skip46
34 | \baposter@finalpaperheight=\skip47
35 | \baposter@finalmargin=\skip48
36 | \headerheight=\skip49
37 | \colwidth=\skip50
38 | \colheight=\skip51
39 | \baposter@@colspacing=\skip52
40 | \baposter@box@@cornerradius=\skip53
41 | \baposter@box@@boxheaderheight=\skip54
42 | \baposter@box@@boxpadding=\skip55
43 | \boxstartx=\skip56
44 | \boxstarty=\skip57
45 | \boxwidth=\skip58
46 | \boxheight=\skip59
47 | \baposter@titleimage@left@width=\skip60
48 | \baposter@titleimage@right@width=\skip61
49 | \baposter@titleimage@textwidth=\skip62
50 | \baposter@box@content=\box27
51 | \baposter@titleimage@left=\box28
52 | \baposter@titleimage@title=\box29
53 | \baposter@titleimage@right=\box30
54 | Use Packages
55 | (/usr/local/texlive/2019/texmf-dist/tex/latex/xkeyval/xkeyval.sty
56 | Package: xkeyval 2014/12/03 v2.7a package option processing (HA)
57 |
58 | (/usr/local/texlive/2019/texmf-dist/tex/generic/xkeyval/xkeyval.tex
59 | (/usr/local/texlive/2019/texmf-dist/tex/generic/xkeyval/xkvutils.tex
60 | \XKV@toks=\toks14
61 | \XKV@tempa@toks=\toks15
62 |
63 | (/usr/local/texlive/2019/texmf-dist/tex/generic/xkeyval/keyval.tex))
64 | \XKV@depth=\count88
65 | File: xkeyval.tex 2014/12/03 v2.7a key=value parser (HA)
66 | ))
67 | (/usr/local/texlive/2019/texmf-dist/tex/latex/tools/calc.sty
68 | Package: calc 2017/05/25 v4.3 Infix arithmetic (KKT,FJ)
69 | \calc@Acount=\count89
70 | \calc@Bcount=\count90
71 | \calc@Adimen=\dimen103
72 | \calc@Bdimen=\dimen104
73 | \calc@Askip=\skip63
74 | \calc@Bskip=\skip64
75 | LaTeX Info: Redefining \setlength on input line 80.
76 | LaTeX Info: Redefining \addtolength on input line 81.
77 | \calc@Ccount=\count91
78 | \calc@Cskip=\skip65
79 | )
80 | (/usr/local/texlive/2019/texmf-dist/tex/latex/xcolor/xcolor.sty
81 | Package: xcolor 2016/05/11 v2.12 LaTeX color extensions (UK)
82 |
83 | (/usr/local/texlive/2019/texmf-dist/tex/latex/graphics-cfg/color.cfg
84 | File: color.cfg 2016/01/02 v1.6 sample color configuration
85 | )
86 | Package xcolor Info: Driver file: pdftex.def on input line 225.
87 |
88 | (/usr/local/texlive/2019/texmf-dist/tex/latex/graphics-def/pdftex.def
89 | File: pdftex.def 2018/01/08 v1.0l Graphics/color driver for pdftex
90 | )
91 | Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1348.
92 | Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1352.
93 | Package xcolor Info: Model `RGB' extended on input line 1364.
94 | Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1366.
95 | Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1367.
96 | Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1368.
97 | Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1369.
98 | Package xcolor Info: Model `Gray' substituted by `gray' on input line 1370.
99 | Package xcolor Info: Model `wave' substituted by `hsb' on input line 1371.
100 | )
101 | (/usr/local/texlive/2019/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty
102 | (/usr/local/texlive/2019/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty
103 | (/usr/local/texlive/2019/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty
104 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.te
105 | x
106 | \pgfutil@everybye=\toks16
107 | \pgfutil@tempdima=\dimen105
108 | \pgfutil@tempdimb=\dimen106
109 |
110 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/utilities/pgfutil-common-li
111 | sts.tex))
112 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def
113 | \pgfutil@abb=\box31
114 | (/usr/local/texlive/2019/texmf-dist/tex/latex/ms/everyshi.sty
115 | Package: everyshi 2001/05/15 v3.00 EveryShipout Package (MS)
116 | ))
117 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex
118 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/pgf.revision.tex)
119 | Package: pgfrcs 2019/04/04 v3.1.2 (3.1.2)
120 | ))
121 | Package: pgf 2019/04/04 v3.1.2 (3.1.2)
122 |
123 | (/usr/local/texlive/2019/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty
124 | (/usr/local/texlive/2019/texmf-dist/tex/latex/graphics/graphicx.sty
125 | Package: graphicx 2017/06/01 v1.1a Enhanced LaTeX Graphics (DPC,SPQR)
126 |
127 | (/usr/local/texlive/2019/texmf-dist/tex/latex/graphics/graphics.sty
128 | Package: graphics 2017/06/25 v1.2c Standard LaTeX Graphics (DPC,SPQR)
129 |
130 | (/usr/local/texlive/2019/texmf-dist/tex/latex/graphics/trig.sty
131 | Package: trig 2016/01/03 v1.10 sin cos tan (DPC)
132 | )
133 | (/usr/local/texlive/2019/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
134 | File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration
135 | )
136 | Package graphics Info: Driver file: pdftex.def on input line 99.
137 | )
138 | \Gin@req@height=\dimen107
139 | \Gin@req@width=\dimen108
140 | )
141 | (/usr/local/texlive/2019/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty
142 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex
143 | Package: pgfsys 2019/04/04 v3.1.2 (3.1.2)
144 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex
145 | \pgfkeys@pathtoks=\toks17
146 | \pgfkeys@temptoks=\toks18
147 |
148 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/utilities/pgfkeysfiltered.c
149 | ode.tex
150 | \pgfkeys@tmptoks=\toks19
151 | ))
152 | \pgf@x=\dimen109
153 | \pgf@y=\dimen110
154 | \pgf@xa=\dimen111
155 | \pgf@ya=\dimen112
156 | \pgf@xb=\dimen113
157 | \pgf@yb=\dimen114
158 | \pgf@xc=\dimen115
159 | \pgf@yc=\dimen116
160 | \w@pgf@writea=\write3
161 | \r@pgf@reada=\read1
162 | \c@pgf@counta=\count92
163 | \c@pgf@countb=\count93
164 | \c@pgf@countc=\count94
165 | \c@pgf@countd=\count95
166 | \t@pgf@toka=\toks20
167 | \t@pgf@tokb=\toks21
168 | \t@pgf@tokc=\toks22
169 | \pgf@sys@id@count=\count96
170 |
171 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg
172 | File: pgf.cfg 2019/04/04 v3.1.2 (3.1.2)
173 | )
174 | Driver file for pgf: pgfsys-pdftex.def
175 |
176 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.d
177 | ef
178 | File: pgfsys-pdftex.def 2019/04/04 v3.1.2 (3.1.2)
179 |
180 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-p
181 | df.def
182 | File: pgfsys-common-pdf.def 2019/04/04 v3.1.2 (3.1.2)
183 | )))
184 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.
185 | code.tex
186 | File: pgfsyssoftpath.code.tex 2019/04/04 v3.1.2 (3.1.2)
187 | \pgfsyssoftpath@smallbuffer@items=\count97
188 | \pgfsyssoftpath@bigbuffer@items=\count98
189 | )
190 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.
191 | code.tex
192 | File: pgfsysprotocol.code.tex 2019/04/04 v3.1.2 (3.1.2)
193 | ))
194 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex
195 | Package: pgfcore 2019/04/04 v3.1.2 (3.1.2)
196 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex
197 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex
198 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex)
199 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex
200 | \pgfmath@dimen=\dimen117
201 | \pgfmath@count=\count99
202 | \pgfmath@box=\box32
203 | \pgfmath@toks=\toks23
204 | \pgfmath@stack@operand=\toks24
205 | \pgfmath@stack@operation=\toks25
206 | )
207 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.
208 | tex
209 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic
210 | .code.tex)
211 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigo
212 | nometric.code.tex)
213 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.rando
214 | m.code.tex)
215 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.compa
216 | rison.code.tex)
217 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.
218 | code.tex)
219 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round
220 | .code.tex)
221 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.
222 | code.tex)
223 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integ
224 | erarithmetics.code.tex)))
225 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex
226 | \c@pgfmathroundto@lastzeros=\count100
227 | ))
228 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.co
229 | de.tex
230 | File: pgfcorepoints.code.tex 2019/04/04 v3.1.2 (3.1.2)
231 | \pgf@picminx=\dimen118
232 | \pgf@picmaxx=\dimen119
233 | \pgf@picminy=\dimen120
234 | \pgf@picmaxy=\dimen121
235 | \pgf@pathminx=\dimen122
236 | \pgf@pathmaxx=\dimen123
237 | \pgf@pathminy=\dimen124
238 | \pgf@pathmaxy=\dimen125
239 | \pgf@xx=\dimen126
240 | \pgf@xy=\dimen127
241 | \pgf@yx=\dimen128
242 | \pgf@yy=\dimen129
243 | \pgf@zx=\dimen130
244 | \pgf@zy=\dimen131
245 | )
246 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconst
247 | ruct.code.tex
248 | File: pgfcorepathconstruct.code.tex 2019/04/04 v3.1.2 (3.1.2)
249 | \pgf@path@lastx=\dimen132
250 | \pgf@path@lasty=\dimen133
251 | )
252 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage
253 | .code.tex
254 | File: pgfcorepathusage.code.tex 2019/04/04 v3.1.2 (3.1.2)
255 | \pgf@shorten@end@additional=\dimen134
256 | \pgf@shorten@start@additional=\dimen135
257 | )
258 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.co
259 | de.tex
260 | File: pgfcorescopes.code.tex 2019/04/04 v3.1.2 (3.1.2)
261 | \pgfpic=\box33
262 | \pgf@hbox=\box34
263 | \pgf@layerbox@main=\box35
264 | \pgf@picture@serial@count=\count101
265 | )
266 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicst
267 | ate.code.tex
268 | File: pgfcoregraphicstate.code.tex 2019/04/04 v3.1.2 (3.1.2)
269 | \pgflinewidth=\dimen136
270 | )
271 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransform
272 | ations.code.tex
273 | File: pgfcoretransformations.code.tex 2019/04/04 v3.1.2 (3.1.2)
274 | \pgf@pt@x=\dimen137
275 | \pgf@pt@y=\dimen138
276 | \pgf@pt@temp=\dimen139
277 | )
278 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.cod
279 | e.tex
280 | File: pgfcorequick.code.tex 2019/04/04 v3.1.2 (3.1.2)
281 | )
282 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.c
283 | ode.tex
284 | File: pgfcoreobjects.code.tex 2019/04/04 v3.1.2 (3.1.2)
285 | )
286 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathproce
287 | ssing.code.tex
288 | File: pgfcorepathprocessing.code.tex 2019/04/04 v3.1.2 (3.1.2)
289 | )
290 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.co
291 | de.tex
292 | File: pgfcorearrows.code.tex 2019/04/04 v3.1.2 (3.1.2)
293 | \pgfarrowsep=\dimen140
294 | )
295 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.cod
296 | e.tex
297 | File: pgfcoreshade.code.tex 2019/04/04 v3.1.2 (3.1.2)
298 | \pgf@max=\dimen141
299 | \pgf@sys@shading@range@num=\count102
300 | \pgf@shadingcount=\count103
301 | )
302 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.cod
303 | e.tex
304 | File: pgfcoreimage.code.tex 2019/04/04 v3.1.2 (3.1.2)
305 |
306 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.
307 | code.tex
308 | File: pgfcoreexternal.code.tex 2019/04/04 v3.1.2 (3.1.2)
309 | \pgfexternal@startupbox=\box36
310 | ))
311 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.co
312 | de.tex
313 | File: pgfcorelayers.code.tex 2019/04/04 v3.1.2 (3.1.2)
314 | )
315 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretranspare
316 | ncy.code.tex
317 | File: pgfcoretransparency.code.tex 2019/04/04 v3.1.2 (3.1.2)
318 | )
319 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns.
320 | code.tex
321 | File: pgfcorepatterns.code.tex 2019/04/04 v3.1.2 (3.1.2)
322 | )
323 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code.
324 | tex
325 | File: pgfcorerdf.code.tex 2019/04/04 v3.1.2 (3.1.2)
326 | )))
327 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.cod
328 | e.tex
329 | File: pgfmoduleshapes.code.tex 2019/04/04 v3.1.2 (3.1.2)
330 | \pgfnodeparttextbox=\box37
331 | )
332 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code.
333 | tex
334 | File: pgfmoduleplot.code.tex 2019/04/04 v3.1.2 (3.1.2)
335 | )
336 | (/usr/local/texlive/2019/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version
337 | -0-65.sty
338 | Package: pgfcomp-version-0-65 2019/04/04 v3.1.2 (3.1.2)
339 | \pgf@nodesepstart=\dimen142
340 | \pgf@nodesepend=\dimen143
341 | )
342 | (/usr/local/texlive/2019/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version
343 | -1-18.sty
344 | Package: pgfcomp-version-1-18 2019/04/04 v3.1.2 (3.1.2)
345 | ))
346 | (/usr/local/texlive/2019/texmf-dist/tex/latex/pgf/utilities/pgffor.sty
347 | (/usr/local/texlive/2019/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty
348 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex)
349 | ) (/usr/local/texlive/2019/texmf-dist/tex/latex/pgf/math/pgfmath.sty
350 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex))
351 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex
352 | Package: pgffor 2019/04/04 v3.1.2 (3.1.2)
353 |
354 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex)
355 | \pgffor@iter=\dimen144
356 | \pgffor@skip=\dimen145
357 | \pgffor@stack=\toks26
358 | \pgffor@toks=\toks27
359 | ))
360 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.cod
361 | e.tex
362 | Package: tikz 2019/04/04 v3.1.2 (3.1.2)
363 |
364 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothan
365 | dlers.code.tex
366 | File: pgflibraryplothandlers.code.tex 2019/04/04 v3.1.2 (3.1.2)
367 | \pgf@plot@mark@count=\count104
368 | \pgfplotmarksize=\dimen146
369 | )
370 | \tikz@lastx=\dimen147
371 | \tikz@lasty=\dimen148
372 | \tikz@lastxsaved=\dimen149
373 | \tikz@lastysaved=\dimen150
374 | \tikzleveldistance=\dimen151
375 | \tikzsiblingdistance=\dimen152
376 | \tikz@figbox=\box38
377 | \tikz@figbox@bg=\box39
378 | \tikz@tempbox=\box40
379 | \tikz@tempbox@bg=\box41
380 | \tikztreelevel=\count105
381 | \tikznumberofchildren=\count106
382 | \tikznumberofcurrentchild=\count107
383 | \tikz@fig@count=\count108
384 |
385 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/modules/pgfmodulematrix.cod
386 | e.tex
387 | File: pgfmodulematrix.code.tex 2019/04/04 v3.1.2 (3.1.2)
388 | \pgfmatrixcurrentrow=\count109
389 | \pgfmatrixcurrentcolumn=\count110
390 | \pgf@matrix@numberofcolumns=\count111
391 | )
392 | \tikz@expandcount=\count112
393 |
394 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/frontendlayer/tikz/librarie
395 | s/tikzlibrarytopaths.code.tex
396 | File: tikzlibrarytopaths.code.tex 2019/04/04 v3.1.2 (3.1.2)
397 | )))
398 | (/usr/local/texlive/2019/texmf-dist/tex/latex/base/ifthen.sty
399 | Package: ifthen 2014/09/29 v1.1c Standard LaTeX ifthen package (DPC)
400 | )
401 | (/usr/local/texlive/2019/texmf-dist/tex/latex/base/fontenc.sty
402 | Package: fontenc 2018/08/11 v2.0j Standard LaTeX package
403 |
404 | (/usr/local/texlive/2019/texmf-dist/tex/latex/base/t1enc.def
405 | File: t1enc.def 2018/08/11 v2.0j Standard LaTeX file
406 | LaTeX Font Info: Redeclaring font encoding T1 on input line 48.
407 | ))
408 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/frontendlayer/tikz/librarie
409 | s/tikzlibrarydecorations.code.tex
410 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/modules/pgfmoduledecoration
411 | s.code.tex
412 | \pgfdecoratedcompleteddistance=\dimen153
413 | \pgfdecoratedremainingdistance=\dimen154
414 | \pgfdecoratedinputsegmentcompleteddistance=\dimen155
415 | \pgfdecoratedinputsegmentremainingdistance=\dimen156
416 | \pgf@decorate@distancetomove=\dimen157
417 | \pgf@decorate@repeatstate=\count113
418 | \pgfdecorationsegmentamplitude=\dimen158
419 | \pgfdecorationsegmentlength=\dimen159
420 | )
421 | \tikz@lib@dec@box=\box42
422 | )
423 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/frontendlayer/tikz/librarie
424 | s/tikzlibraryfadings.code.tex
425 | File: tikzlibraryfadings.code.tex 2019/04/04 v3.1.2 (3.1.2)
426 |
427 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/libraries/pgflibraryfadings
428 | .code.tex
429 | File: pgflibraryfadings.code.tex 2019/04/04 v3.1.2 (3.1.2)
430 | ))
431 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/frontendlayer/tikz/librarie
432 | s/tikzlibrarysnakes.code.tex
433 | File: tikzlibrarysnakes.code.tex 2019/04/04 v3.1.2 (3.1.2)
434 |
435 |
436 | Package pgf Warning: Snakes have been superseded by decorations. Please use the
437 | decoration libraries instead of the snakes library on input line 14.
438 |
439 |
440 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/frontendlayer/tikz/librarie
441 | s/tikzlibrarydecorations.pathmorphing.code.tex
442 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/libraries/decorations/pgfli
443 | brarydecorations.pathmorphing.code.tex))
444 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/frontendlayer/tikz/librarie
445 | s/tikzlibrarydecorations.pathreplacing.code.tex
446 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/libraries/decorations/pgfli
447 | brarydecorations.pathreplacing.code.tex))
448 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/frontendlayer/tikz/librarie
449 | s/tikzlibrarydecorations.shapes.code.tex
450 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/libraries/decorations/pgfli
451 | brarydecorations.shapes.code.tex)))
452 | (/usr/local/texlive/2019/texmf-dist/tex/generic/pgf/frontendlayer/tikz/librarie
453 | s/tikzlibrarycalc.code.tex
454 | File: tikzlibrarycalc.code.tex 2019/04/04 v3.1.2 (3.1.2)
455 | )
456 | \baposter@movebody=\skip66
457 | \baposter@basemarginright=\skip67
458 | \baposter@basemarginleft=\skip68
459 |
460 | Paperwidth=2392.87677pt
461 | Paperheight=3383.03267pt
462 | BasePaperwidth=681.97864pt
463 | BasePaperheight=964.1767pt
464 | (/usr/local/texlive/2019/texmf-dist/tex/latex/geometry/geometry.sty
465 | Package: geometry 2018/04/16 v5.8 Page Geometry
466 |
467 | (/usr/local/texlive/2019/texmf-dist/tex/generic/oberdiek/ifpdf.sty
468 | Package: ifpdf 2018/09/07 v3.3 Provides the ifpdf switch
469 | )
470 | (/usr/local/texlive/2019/texmf-dist/tex/generic/oberdiek/ifvtex.sty
471 | Package: ifvtex 2016/05/16 v1.6 Detect VTeX and its facilities (HO)
472 | Package ifvtex Info: VTeX not detected.
473 | )
474 | (/usr/local/texlive/2019/texmf-dist/tex/generic/ifxetex/ifxetex.sty
475 | Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional
476 | )
477 | \Gm@cnth=\count114
478 | \Gm@cntv=\count115
479 | \c@Gm@tempcnt=\count116
480 | \Gm@bindingoffset=\dimen160
481 | \Gm@wd@mp=\dimen161
482 | \Gm@odd@mp=\dimen162
483 | \Gm@even@mp=\dimen163
484 | \Gm@layoutwidth=\dimen164
485 | \Gm@layoutheight=\dimen165
486 | \Gm@layouthoffset=\dimen166
487 | \Gm@layoutvoffset=\dimen167
488 | \Gm@dimlist=\toks28
489 | )
490 | (/usr/local/texlive/2019/texmf-dist/tex/latex/pgf/utilities/pgfpages.sty
491 | Package: pgfpages 2011/01/05 ver 0.02
492 | \pgf@logicalpages=\count117
493 | \pgf@firstshipout=\count118
494 | \pgf@lastshipout=\count119
495 | \pgf@currentshipout=\count120
496 | \pgf@cpn=\count121
497 | \pgf@shipoutnextto=\count122
498 | \pgfphysicalheight=\dimen168
499 | \pgfphysicalwidth=\dimen169
500 | \pgfpages@shipoutbox=\box43
501 | )
502 | \pgfpages@box@1=\box44
503 | )
504 | (/usr/local/texlive/2019/texmf-dist/tex/latex/amsmath/amsmath.sty
505 | Package: amsmath 2018/12/01 v2.17b AMS math features
506 | \@mathmargin=\skip69
507 |
508 | For additional information on amsmath, use the `?' option.
509 | (/usr/local/texlive/2019/texmf-dist/tex/latex/amsmath/amstext.sty
510 | Package: amstext 2000/06/29 v2.01 AMS text
511 |
512 | (/usr/local/texlive/2019/texmf-dist/tex/latex/amsmath/amsgen.sty
513 | File: amsgen.sty 1999/11/30 v2.0 generic functions
514 | \@emptytoks=\toks29
515 | \ex@=\dimen170
516 | ))
517 | (/usr/local/texlive/2019/texmf-dist/tex/latex/amsmath/amsbsy.sty
518 | Package: amsbsy 1999/11/29 v1.2d Bold Symbols
519 | \pmbraise@=\dimen171
520 | )
521 | (/usr/local/texlive/2019/texmf-dist/tex/latex/amsmath/amsopn.sty
522 | Package: amsopn 2016/03/08 v2.02 operator names
523 | )
524 | \inf@bad=\count123
525 | LaTeX Info: Redefining \frac on input line 223.
526 | \uproot@=\count124
527 | \leftroot@=\count125
528 | LaTeX Info: Redefining \overline on input line 385.
529 | \classnum@=\count126
530 | \DOTSCASE@=\count127
531 | LaTeX Info: Redefining \ldots on input line 482.
532 | LaTeX Info: Redefining \dots on input line 485.
533 | LaTeX Info: Redefining \cdots on input line 606.
534 | \Mathstrutbox@=\box45
535 | \strutbox@=\box46
536 | \big@size=\dimen172
537 | LaTeX Font Info: Redeclaring font encoding OML on input line 729.
538 | LaTeX Font Info: Redeclaring font encoding OMS on input line 730.
539 | \macc@depth=\count128
540 | \c@MaxMatrixCols=\count129
541 | \dotsspace@=\muskip10
542 | \c@parentequation=\count130
543 | \dspbrk@lvl=\count131
544 | \tag@help=\toks30
545 | \row@=\count132
546 | \column@=\count133
547 | \maxfields@=\count134
548 | \andhelp@=\toks31
549 | \eqnshift@=\dimen173
550 | \alignsep@=\dimen174
551 | \tagshift@=\dimen175
552 | \tagwidth@=\dimen176
553 | \totwidth@=\dimen177
554 | \lineht@=\dimen178
555 | \@envbody=\toks32
556 | \multlinegap=\skip70
557 | \multlinetaggap=\skip71
558 | \mathdisplay@stack=\toks33
559 | LaTeX Info: Redefining \[ on input line 2844.
560 | LaTeX Info: Redefining \] on input line 2845.
561 | )
562 | (/usr/local/texlive/2019/texmf-dist/tex/latex/amsfonts/amssymb.sty
563 | Package: amssymb 2013/01/14 v3.01 AMS font symbols
564 |
565 | (/usr/local/texlive/2019/texmf-dist/tex/latex/amsfonts/amsfonts.sty
566 | Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support
567 | \symAMSa=\mathgroup4
568 | \symAMSb=\mathgroup5
569 | LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold'
570 | (Font) U/euf/m/n --> U/euf/b/n on input line 106.
571 | ))
572 | (/usr/local/texlive/2019/texmf-dist/tex/latex/relsize/relsize.sty
573 | Package: relsize 2013/03/29 ver 4.1
574 | )
575 | (/usr/local/texlive/2019/texmf-dist/tex/latex/multirow/multirow.sty
576 | Package: multirow 2019/01/01 v2.4 Span multiple rows of a table
577 | \multirow@colwidth=\skip72
578 | \multirow@cntb=\count135
579 | \multirow@dima=\skip73
580 | \bigstrutjot=\dimen179
581 | )
582 | (/usr/local/texlive/2019/texmf-dist/tex/latex/graphics/rotating.sty
583 | Package: rotating 2016/08/11 v2.16d rotated objects in LaTeX
584 | \c@r@tfl@t=\count136
585 | \rotFPtop=\skip74
586 | \rotFPbot=\skip75
587 | \rot@float@box=\box47
588 | \rot@mess@toks=\toks34
589 | )
590 | (/usr/local/texlive/2019/texmf-dist/tex/latex/tools/bm.sty
591 | Package: bm 2017/01/16 v1.2c Bold Symbol Support (DPC/FMi)
592 | \symboldoperators=\mathgroup6
593 | \symboldletters=\mathgroup7
594 | \symboldsymbols=\mathgroup8
595 | LaTeX Font Info: Redeclaring math alphabet \mathbf on input line 141.
596 | LaTeX Info: Redefining \bm on input line 207.
597 | )
598 | (/usr/local/texlive/2019/texmf-dist/tex/latex/url/url.sty
599 | \Urlmuskip=\muskip11
600 | Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc.
601 | )
602 | (/usr/local/texlive/2019/texmf-dist/tex/latex/tools/multicol.sty
603 | Package: multicol 2018/12/27 v1.8v multicolumn formatting (FMi)
604 | \c@tracingmulticols=\count137
605 | \mult@box=\box48
606 | \multicol@leftmargin=\dimen180
607 | \c@unbalance=\count138
608 | \c@collectmore=\count139
609 | \doublecol@number=\count140
610 | \multicoltolerance=\count141
611 | \multicolpretolerance=\count142
612 | \full@width=\dimen181
613 | \page@free=\dimen182
614 | \premulticols=\dimen183
615 | \postmulticols=\dimen184
616 | \multicolsep=\skip76
617 | \multicolbaselineskip=\skip77
618 | \partial@page=\box49
619 | \last@line=\box50
620 | \maxbalancingoverflow=\dimen185
621 | \mult@rightbox=\box51
622 | \mult@grightbox=\box52
623 | \mult@gfirstbox=\box53
624 | \mult@firstbox=\box54
625 | \@tempa=\box55
626 | \@tempa=\box56
627 | \@tempa=\box57
628 | \@tempa=\box58
629 | \@tempa=\box59
630 | \@tempa=\box60
631 | \@tempa=\box61
632 | \@tempa=\box62
633 | \@tempa=\box63
634 | \@tempa=\box64
635 | \@tempa=\box65
636 | \@tempa=\box66
637 | \@tempa=\box67
638 | \@tempa=\box68
639 | \@tempa=\box69
640 | \@tempa=\box70
641 | \@tempa=\box71
642 | \c@columnbadness=\count143
643 | \c@finalcolumnbadness=\count144
644 | \last@try=\dimen186
645 | \multicolovershoot=\dimen187
646 | \multicolundershoot=\dimen188
647 | \mult@nat@firstbox=\box72
648 | \colbreak@box=\box73
649 | \mc@col@check@num=\count145
650 | )
651 | (/usr/local/texlive/2019/texmf-dist/tex/latex/psnfss/palatino.sty
652 | Package: palatino 2005/04/12 PSNFSS-v9.2a (SPQR)
653 | )
654 |
655 | LaTeX Warning: Unused global option(s):
656 | [final].
657 |
658 | (./lijuan.aux)
659 | \openout1 = `lijuan.aux'.
660 |
661 | LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 65.
662 | LaTeX Font Info: ... okay on input line 65.
663 | LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 65.
664 | LaTeX Font Info: ... okay on input line 65.
665 | LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 65.
666 | LaTeX Font Info: ... okay on input line 65.
667 | LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 65.
668 | LaTeX Font Info: ... okay on input line 65.
669 | LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 65.
670 | LaTeX Font Info: ... okay on input line 65.
671 | LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 65.
672 | LaTeX Font Info: ... okay on input line 65.
673 | LaTeX Font Info: Try loading font information for T1+ppl on input line 65.
674 | (/usr/local/texlive/2019/texmf-dist/tex/latex/psnfss/t1ppl.fd
675 | File: t1ppl.fd 2001/06/04 font definitions for T1/ppl.
676 | )
677 | (/usr/local/texlive/2019/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
678 | [Loading MPS to PDF converter (version 2006.09.02).]
679 | \scratchcounter=\count146
680 | \scratchdimen=\dimen189
681 | \scratchbox=\box74
682 | \nofMPsegments=\count147
683 | \nofMParguments=\count148
684 | \everyMPshowfont=\toks35
685 | \MPscratchCnt=\count149
686 | \MPscratchDim=\dimen190
687 | \MPnumerator=\count150
688 | \makeMPintoPDFobject=\count151
689 | \everyMPtoPDFconversion=\toks36
690 | ) (/usr/local/texlive/2019/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty
691 | Package: epstopdf-base 2016/05/15 v2.6 Base part for package epstopdf
692 |
693 | (/usr/local/texlive/2019/texmf-dist/tex/generic/oberdiek/infwarerr.sty
694 | Package: infwarerr 2016/05/16 v1.4 Providing info/warning/error messages (HO)
695 | )
696 | (/usr/local/texlive/2019/texmf-dist/tex/latex/oberdiek/grfext.sty
697 | Package: grfext 2016/05/16 v1.2 Manage graphics extensions (HO)
698 |
699 | (/usr/local/texlive/2019/texmf-dist/tex/generic/oberdiek/kvdefinekeys.sty
700 | Package: kvdefinekeys 2016/05/16 v1.4 Define keys (HO)
701 |
702 | (/usr/local/texlive/2019/texmf-dist/tex/generic/oberdiek/ltxcmds.sty
703 | Package: ltxcmds 2016/05/16 v1.23 LaTeX kernel commands for general use (HO)
704 | )))
705 | (/usr/local/texlive/2019/texmf-dist/tex/latex/oberdiek/kvoptions.sty
706 | Package: kvoptions 2016/05/16 v3.12 Key value format for package options (HO)
707 |
708 | (/usr/local/texlive/2019/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty
709 | Package: kvsetkeys 2016/05/16 v1.17 Key value parser (HO)
710 |
711 | (/usr/local/texlive/2019/texmf-dist/tex/generic/oberdiek/etexcmds.sty
712 | Package: etexcmds 2016/05/16 v1.6 Avoid name clashes with e-TeX commands (HO)
713 |
714 | (/usr/local/texlive/2019/texmf-dist/tex/generic/oberdiek/ifluatex.sty
715 | Package: ifluatex 2016/05/16 v1.4 Provides the ifluatex switch (HO)
716 | Package ifluatex Info: LuaTeX not detected.
717 | ))))
718 | (/usr/local/texlive/2019/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty
719 | Package: pdftexcmds 2018/09/10 v0.29 Utility functions of pdfTeX for LuaTeX (HO
720 | )
721 | Package pdftexcmds Info: LuaTeX not detected.
722 | Package pdftexcmds Info: \pdf@primitive is available.
723 | Package pdftexcmds Info: \pdf@ifprimitive is available.
724 | Package pdftexcmds Info: \pdfdraftmode found.
725 | )
726 | Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4
727 | 38.
728 | Package grfext Info: Graphics extension search list:
729 | (grfext) [.pdf,.png,.jpg,.mps,.jpeg,.jbig2,.jb2,.PDF,.PNG,.JPG,.JPE
730 | G,.JBIG2,.JB2,.eps]
731 | (grfext) \AppendGraphicsExtensions on input line 456.
732 |
733 | (/usr/local/texlive/2019/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
734 | File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv
735 | e
736 | ))
737 | ABD: EveryShipout initializing macros
738 | *geometry* driver: auto-detecting
739 | *geometry* detected driver: pdftex
740 | *geometry* verbose mode - [ preamble ] result:
741 | * driver: pdftex
742 | * paper: custom
743 | * layout:
744 | * layoutoffset:(h,v)=(0.0pt,0.0pt)
745 | * modes: landscape
746 | * h-part:(L,W,R)=(12.1637pt, 939.8493pt, 12.1637pt)
747 | * v-part:(T,H,B)=(12.1637pt, 657.65125pt, 12.1637pt)
748 | * \paperwidth=964.1767pt
749 | * \paperheight=681.97864pt
750 | * \textwidth=939.8493pt
751 | * \textheight=657.65125pt
752 | * \oddsidemargin=-60.1063pt
753 | * \evensidemargin=-60.1063pt
754 | * \topmargin=-97.1063pt
755 | * \headheight=12.0pt
756 | * \headsep=25.0pt
757 | * \topskip=10.0pt
758 | * \footskip=30.0pt
759 | * \marginparwidth=65.0pt
760 | * \marginparsep=11.0pt
761 | * \columnsep=14.99634pt
762 | * \skip\footins=9.0pt plus 4.0pt minus 2.0pt
763 | * \hoffset=0.0pt
764 | * \voffset=0.0pt
765 | * \mag=1000
766 | * \@twocolumnfalse
767 | * \@twosidefalse
768 | * \@mparswitchfalse
769 | * \@reversemarginfalse
770 | * (1in=72.27pt=25.4mm, 1cm=28.453pt)
771 |
772 | \FSZ=\skip78
773 |
774 | File: images/logo1.jpeg Graphic file (type jpg)
775 |