Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ideate new approach to formatting table/diagram structure in template #85

Open
snairdesai opened this issue Jul 25, 2023 · 40 comments · May be fixed by #97
Open

Ideate new approach to formatting table/diagram structure in template #85

snairdesai opened this issue Jul 25, 2023 · 40 comments · May be fixed by #97
Assignees

Comments

@snairdesai
Copy link
Contributor

snairdesai commented Jul 25, 2023

The purpose of this issue (#85) is to address a request from @gentzkow following ongoing discussions around our approach to formatting and autofilling .tex and .tikz tables and diagrams in template and other lab projects. In order to populate draft tables/diagrams, we currently either:

  • Write code in R (i.e., with kable or xtable) which converts dataframe objects into .tex outputs, which are then written to table formats in Overleaf. Here, we are directly defining the table skeleton in R.
    • The problem with this approach is that the R code to generate these skeletons is often very finicky, limited in use cases, and requires us to rerun pipeline code anytime we want to recompile tables.
  • Use the gslab-make Python library and the gs.tablefill function to port scalars generated from R code into skeleton files from LyX. Here, we are generating the desired table skeleton externally in LyX, computing the scalars in R (or another computing language), and populating the skeleton from LyX with these scalars.

The purpose of this thread will be a discussion between lab members to propose alternative approaches (with the above benchmarks in mind for comparison). The requirements of any proposals must be:

  • Reproducibility within the standard template structure.
  • Feasibility/lack of complexity for replicators/lab members.
  • Optimization/efficiency in reducing any pipeline computation time required for formatting/filling.
  • Confidence in future maintenance of any underlying softwares required.

At baseline, @jc-cisneros and I would hope for the following:

  • We can achieve this process entirely within a single program/software/compiler which is well-maintained, easy to use, and replicable (i.e., Overleaf).
  • We do not need to re-run any pipeline code to reformat any table/diagram skeletons, and simply use the code to compute scalars which are populated externally.
  • We reduce as much as possible any manual steps required in building table/diagram skeletons (though some manual steps are acceptable, and the first and second bullets above should be prioritized).

Given the above, if possible, we were thinking of finding a way to build skeletons on Overleaf in .tex/.tikz which would enable replicators/lab members to modify skeletons visually (i.e., without needing to touch the raw .tex/.tikz source code, as is possible when viewing documents in LyX), and would enable us to compute relevant scalars in our programming language of choice, and then populate the skeletons with these scalars.

@snairdesai
Copy link
Contributor Author

@ShiqiYang2022; @simonepandit; and @Erick11293: tagging you here as for #84. @jc-cisneros and I will handle all of the implementation steps here, but if you have any suggestions/ideas please do let us know in this thread!

@gentzkow
Copy link
Owner

@snairdesai Thanks! I'm looking forward to this discussion.

One other desideratum I'd add to your list: So far, I find the easiest & most flexible interface for editing tables to be spreadsheets like Excel or Google Sheets. I think we want whatever solution we settle on here to be close to that level of simplicity & flexibility.

My prior continues to be that we may want to use Excel / Google Sheets rather than keeping everything in Latex/Overleaf. But I'm open to alternatives provided they can hit the desideratum.

@gentzkow
Copy link
Owner

@ShiqiYang2022 I am adding you to this issue, as I think this would be a good time to revisit. Let me know if you have any thoughts on the above.

cc @snairdesai @jc-cisneros

@gentzkow
Copy link
Owner

@ShiqiYang2022 @snairdesai @jc-cisneros

One other thought here: Whatever we decide here, there may be cases where we still want to output .tex tables directly from R, Stata, or the like. When we do that, we should have a rule that the R (etc.) code that creates tables is separate from the code that does analysis -- i.e., the analysis scripts still output tables as simple matrices of numbers and then a separate script downstream converts the output to formatted LaTex. That way we can revise table formatting without re-running any analysis scripts.

@snairdesai
Copy link
Contributor Author

@gentzkow: Thanks for the note here! As an update, @ShiqiYang2022, @jc-cisneros and I met today to discuss this. We came up with 4-5 potential options, but want to explore the feasibility of each a bit more. We will post additional updates here shortly.

@gentzkow
Copy link
Owner

Great. Thanks.

To record, my preferred idea so far is to use Excel / Google Sheets / or similar to build tables. I'm imagining something like:

  1. For each table, we have a table tab and a raw data tab
  2. The raw data tab imports the matrix of numbers from the /analysis/ output (which could be .txt, .csv, .xlsx, etc.)
  3. The tables tab has the formatted table and fills the numbers by reference to the raw data tab
  4. We figure out some way to automate (re-)importing the raw data and exporting the formatted tables to separate PDFs

It would be great if you guys could make this one of the options you test.

Let's also make sure we don't spend a ton of time exploring options before we've had a chance to sync on them. Fine to take a few hours to check feasibility, but I'd like to check in on what you're thinking about at that point.

@snairdesai
Copy link
Contributor Author

snairdesai commented Oct 30, 2023

Thanks @gentzkow. Based on this preference, our primary proposal (which we will test for feasibility) is as follows:

(1) PI (or, as needed, RA) creates an Excel spreadsheet in the repository (for example, in ~/paper_slides/input), with the two tabs you proposed. At this stage, the "table tab" would include the table skeleton. The "raw" tab would at this stage include random scalars, which will eventually be mapped to the skeleton in "table tab" (through links referencing the sheets -- we need to test this). HA produced a Google Sheet similar to what we envision here on another project (Table 1 - AE).

(2) RA replaces the random numbers in the "raw" tab with the correct computations produced through code (exactly as you note). We would need to ensure the order of the scalars exactly matches the corresponding placement in the "table tab". What's nice about this is that depending on the lfs-filters, we can also track changes to the underlying skeleton with Git (as new, random placeholder scalars will be added/deleted with any edits).

(3) The "table tab" then fills the computed numbers by reference (exactly as you note).

(4) The RA exports the Excel "table tab" sheet to a .tex format, which is then compiled as a PDF in ~/paper_slides. We need to test how straightforward it is to transfer and maintain spacing/text edits/bolding, etc. from an Excel sheet with these formatting edits to .tex.

We don't yet know if this is fully possible (especially linking the scalars across the sheets and how comprehensive the translations from Excel to .tex are), but conceptually it makes sense. In essence, Excel is just replacing the role LyX previously held. We would only need to rerun ~/analysis if changes are made to the underlying computations of the table.

We will prioritize the testing of this proposal above the others we considered -- it seems most likely to deliver what we hope.

@gentzkow
Copy link
Owner

@snairdesai Thanks!

First, I didn't mean to suggest that this is the only option you should consider. Happy to hear the other options too if at least one of you thinks they may be better.

Second, a few clarifications on what I'm thinking, using the numbering above.

(1) I think we would want this to be ~/paper_slides/tables. I don't think there is any problem in Excel / Google Sheets referencing cells across sheets. I'm not sure what you mean about random scalars -- I'm imagining that step 1 would be to import the current version of the output and step 2 would be to format the tables, so there wouldn't normally be a point at which we have placeholder values. But we can of course use those where it's helpful.

(2) I think the data import / updating should be automatic. E.g., if we can have the code output directly in .xlsx format (which I think R, Stata, Python can all do), we can link as described here. I didn't understand the sentence beginning "What's nice..."

(4) I'm imagining we export to .pdf not to .tex. The whole point is that we want to be able to use the spreadsheet program's flexible formatting w/out being bound by the limits of LaTex tables.

@snairdesai
Copy link
Contributor Author

Thanks @gentzkow! We will think through these clarifications further. Here are our initial replies for now:


First, I didn't mean to suggest that this is the only option you should consider. Happy to hear the other options too if at least one of you thinks they may be better.

Definitely -- our plan is still to explore the other options. Some other considered approaches are in the dropdown below:

(1) Try to sync editing with Overleaf in combination with another software (Mathcha) so PIs can interactively edit tables on the Overleaf draft and sync with master. This is on Overleaf's end -- we would need to check if such software exists in a way that would would work with template.

(2) Find an equivalent software to LyX, which fulfills the same role but is more closely maintained.

(3) RA manually creates .tex skeleton from an Excel/Google Drive skeleton provided by PI, and autofills with tablefill.

(4) Think of ways to reduce the complexity of autofilling with R or Python, and move table compiles to ~/paper_slides.

Additional Proposals

We do think the approach you outlined is closest to what we need.


(1) I think we would want this to be ~/paper_slides/tables.

Populating this in ~/paper_slides/tables makes sense to us.


(1) ...I'm not sure what you mean about random scalars -- I'm imagining that step 1 would be to import the current version of the output and step 2 would be to format the tables, so there wouldn't normally be a point at which we have placeholder values.

I think we were thinking about this process in reverse. In our proposal, the PI would first come up with a proposed skeleton format for a table we want to build in Excel, and the RAs would then work towards computing, and then autofilling the required values into the Excel sheet.

It seems that your proposal from 2. (above) is for the RA to first produce the outputs in .xlsx (or .txt/.csv) format, and then for the PI/RA to format the outputs and export these as PDFs (meaning, we generally produce no .tex versions of the tables at all, though we can allow for this if needed).

In our proposal, the RA may start with a clearer sense of the intended deliverable. By referencing a skeleton table with the intended format we hope to arrive at, the RA knows exactly what scalars/outputs to produce, and can write code with this in mind (even if we don't need to automate the format itself in code). Of course, there's nothing preventing us from creating a desired skeleton in advance of creating outputs in either approach. Other than this, they both seem like viable procedures.


(4) I'm imagining we export to .pdf not to .tex. The whole point is that we want to be able to use the spreadsheet program's flexible formatting w/out being bound by the limits of LaTex tables.

  • In the last step, it seems we intend to export directly from the formatted Excel to PDF (with no LaTeX formatting). We are not sure that Excel allows for all the formatting we would need to produce publication-ready tables. Is the idea these would be "LaTeX" quality by the time of the export to PDF? If so, we will look into whether this is reasonable.
  • If we want the direct conversion from .xlsx to .pdf seamlessly, we would need to update gslab_make to automate the exports (whereas we already have this process defined for .tex to .pdf). We also would need to think about how to import this into the Overleaf draft with a neat format. This should be feasible, but noting it here.

I didn't understand the sentence:

What's nice about this is that depending on the lfs-filters, we can also track changes to the underlying skeleton with Git (as new, random placeholder scalars will be added/deleted with any edits).


Here, we just meant that in our proposal, where the PI directly edits a skeleton Excel sheet in the repo , we can easily track (non-formatting) updates to the underlying spreadsheet and any new placeholder scalars which the PI adds or deletes when proposing changes (if it is not stored with lfs).

Let us know if our understanding here matches your proposed approach.

@gentzkow
Copy link
Owner

Thanks @snairdesai. Getting closer to convergence.

  • I don't think we should worry at this level about who is doing what (RAs, PIs). Let's just imagine that we have a set of results in R/Stata/Python that we know we'd like to output and format as a table. We all understand what that table should look like. The question is how to implement.

  • Excel can definitely format production-ready tables at the same quality level as what can be produced w/ LaTex (or better)

  • Once tables are output as PDFs there should be no issue importing them into the LaTex doc (Overleaf, Lyx). They'll be just like any other figure.

  • I agree that how to automate the export to PDF is a key issue -- probably the key issue. I'm hoping that we can maybe have a VBA script that we can call from the command line? I'd vote we investigate this first because it may be the key blocker. Note that a key question will be whether we can export to a PDF that is just the size of the table itself, not a full-page sized PDF with the table appearing on part of it.

  • I don't think Git/Github can diff (binary) Excel files?

@snairdesai
Copy link
Contributor Author

Thanks @gentzkow! Got it, all of your points here make sense.

  • I don't think Git/Github can diff (binary) Excel files?

Yes, we were thinking of creating separate CSV/txt versions along with the Excel sheets (which would not preserve the formatting, but should maintain and track the general structure if we populate placeholders). However, we realize now that by simply tracking the results produced from the code (the matrix of numbers from the ~/analysis/ output) as a .csv or .txt file, we would achieve the same goal.

We will keep you posted on progress on this proposal and the additional ones outlined above. For this proposal, we'll start by testing the exports with VBA (including table sizing).

@gentzkow
Copy link
Owner

However, we realize now that by simply tracking the results produced from the code (the matrix of numbers from the ~/analysis/ output) as a .csv or .txt file, we would achieve the same goal.

Yes! I agree. If we are going to output from code directly to .xlsx, we should also output to .csv, similar to the way we output two formats for figures to enable diffing.

@snairdesai
Copy link
Contributor Author

snairdesai commented Nov 15, 2023

TODOs for me:

  • Automate formatting of significance values for stars.
  • See if we can (should?) remove the first prompt asking the user for permissions (I would vote no; this only pops up for each new file on the first time it is run).
  • Remove temporary Excel files created during the run.
  • Add workable example with longtable.
  • Preserve bolding and italicizing of skeletons during automated exports.
  • Test on WindowsOS machine and other Mac chips.
    • Works on Apple M2 Chip.
    • Works on Apple Intel Chip.
  • Test with different versions of Excel.
  • For later: - Switch to formatting all scalars in Excel (rather than storing as strings w/ relevant formatting imposed in R).

@gentzkow
Copy link
Owner

@snairdesai Just a reminder that we should iterate on this often -- I'd like to know what you have in mind before you go too deep into a particular solution.

@snairdesai
Copy link
Contributor Author

snairdesai commented Nov 20, 2023

EDITED

@gentzkow: Thanks for the reminder! Let me provide an update on the (exploratory) work I've done here so far.

I've been focusing on your proposed approach above -- and in particular exporting from Excel to PDF and cropping the resulting PDF to only include the table object (from your point below):

I agree that how to automate the export to PDF is a key issue -- probably the key issue. I'm hoping that we can maybe have a VBA script that we can call from the command line? I'd vote we investigate this first because it may be the key blocker. Note that a key question will be whether we can export to a PDF that is just the size of the table itself, not a full-page sized PDF with the table appearing on part of it.

I've written a (rough) function in gslab_make which automates these exports and trimmings. I had some issues with VBA, but I was able to implement this by natively calling Excel with AppleScript (I wrote an analogous process for Windows, but this has not been tested yet). I also confirmed that the linking procedure across sheets works as expected. Here is an outline of the current process:


WIP Procedure (follows comment above)


  • We compute matrices of numbers in ~/analysis/output which will eventually fill the corresponding tables in ~/paper_slides (these are stored as both .xlsx and .csv format, for git tracking).
  • These files from ~/analysis/output are linked to ~/paper_slides/tables/scalars, and populate when we run this module in ~/paper_slides/tables/scalars.
  • For each table, we produce a .xlsx file in ~/paper_slides/tables/skeletons with two sheets:
    • The first sheet stores imports of the matrices of numbers stored in the corresponding ~/paper_slides/tables/scalars file (which is defined based on the call for run_excel()).
    • The second sheet stores the skeleton of the table, with the desired formatting. It is defined with references to the first sheet, and autofills when ~/paper_slides compiles.
  • We export the filled Excel sheet to a PDF object, and use pdfCropMargins to trim the resulting PDF to only display the formatted table. An example of a PDF table produced using this method is here (based on Table 1 of the public draft of APD).

I will post a minimal example which you can test shortly, to see if this method is on the right track.

@gentzkow
Copy link
Owner

Brilliant! This sounds excellent. : )

snairdesai added a commit that referenced this issue Nov 21, 2023
@gentzkow
Copy link
Owner

gentzkow commented Dec 4, 2023

@ShiqiYang2022 thanks! addressing the parentheses issue separately sounds good to me.

@snairdesai
Copy link
Contributor Author

snairdesai commented Dec 4, 2023

Lingering TODOs and Tasklist:

  • Move the contents of ~/paper_slides/tables/scalars to ~/paper_slides/input/tables.
  • Create a tables subdirectory in ~/analysis/output.
  • Change the core command name from run_excel() to export_excel_tables().
  • Port the table building functionality out of the template structure, and add it to ~/extensions/.
  • Write a README for ~/extensions/excel_tables which details the skeleton constructions.
  • In the above README, outline how users can export tables from Excel manually, without the Python call.

@snairdesai
Copy link
Contributor Author

@jc-cisneros @ShiqiYang2022: as I work in parallel through the final action items, I think we are at a good point for the two of you to test this process, and tinker with the skeleton tables to see if any additional functionalities should be added.

I don't think we should fully build out every imaginable functionality at this stage, but it would definitely help to iterate on necessities to get to a minimal working version (we should already be quite close). Per #85 (comment), let's not worry about the file path issue here.

@snairdesai
Copy link
Contributor Author

snairdesai commented Dec 8, 2023

The action items above have been completed. Following testing by @ShiqiYang2022 and @jc-cisneros, I'll work on ensuring this works across OS/chips.

@snairdesai
Copy link
Contributor Author

@ShiqiYang2022 @jc-cisneros Let me know whenever you get a chance to test this out -- thanks for the support!

@jc-cisneros
Copy link
Contributor

@snairdesai flagging that I got the error below:

***********************************************************************************************************************************************************************************************************************************************************
* ERROR! The following Python packages were not properly installed: `pywin32`. 
Please ensure that you have the correct conda environment activated.
If you are not using conda, ensure you have installed all dependencies from ~/setup/dependencies.md. *
***********************************************************************************************************************************************************************************************************************************************************

@snairdesai
Copy link
Contributor Author

snairdesai commented Jan 16, 2024

@jc-cisneros I think you'll just need to comment this line out in conda_env.yaml if you're running on a Mac (this will be part of the instructions in the README and should be flagged in conda_env.yaml). Let me know if that doesn't do the trick.

@jc-cisneros
Copy link
Contributor

@snairdesai, that indeed fixed it. Got a successful run on my end! Aside from the small inconvenience of manually having to interact with Excel windows to grant permissions, it works smoothly.

@snairdesai the idea is that this would be the default practice, right (i.e., using Excel to create table skeletons)?

@snairdesai
Copy link
Contributor Author

Great, thanks @jc-cisneros! That's good to hear. Some quick replies:

@snairdesai, that indeed fixed it. Got a successful run on my end! Aside from the small inconvenience of manually having to interact with Excel windows to grant permissions, it works smoothly.

Agree that this is a bit annoying (especially since permissions must be granted for each additional file in the process). Users can also grant disk access for Excel directly (see here). While this is annoying and we could potentially find a workaround, this is a built-in security feature on Mac devices which I might recommend we do not try bypass.

@snairdesai the idea is that this would be the default practice, right (i.e., using Excel to create table skeletons)?

This I'm not sure about - I think the process is straightforward enough once users run through this a couple of times. I suppose it would depend on users' preferences.

@jc-cisneros
Copy link
Contributor

Thanks @snairdesai! I've modified the skeleton and confirm that all the changes are properly reflected in the final output. This properly replaces LyX + tablefill.

@snairdesai
Copy link
Contributor Author

Thanks @jc-cisneros! @ShiqiYang2022 Let us know when you get a chance to run through this a final time and we can proceed to merge (maybe it would be useful to test this on Windows as well as your Mac, I definitely expect some bugs to arise there).

@ShiqiYang2022
Copy link
Collaborator

@snairdesai Confirming the testing works well on my end! I am attaching the logs below.

(template) SIEPR-C02G50GUML86:template shiqiyang$ python run_all.py /Users/shiqiyang/Documents/github_folders/template/lib/gslab_make/gslab_make/private/utility.py:140: SyntaxWarning: invalid escape sequence '\#' array = [line for line in array if not re.match('\#',line)] /Users/shiqiyang/Documents/github_folders/template/lib/gslab_make/gslab_make/private/movedirective.py:109: SyntaxWarning: invalid escape sequence '\*' if re.findall('\*', self.source) != re.findall('\*', self.destination): /Users/shiqiyang/Documents/github_folders/template/lib/gslab_make/gslab_make/private/movedirective.py:109: SyntaxWarning: invalid escape sequence '\*' if re.findall('\*', self.source) != re.findall('\*', self.destination): /Users/shiqiyang/Documents/github_folders/template/lib/gslab_make/gslab_make/private/movedirective.py:112: SyntaxWarning: invalid escape sequence '\*' if re.search('\*', self.source): /Users/shiqiyang/Documents/github_folders/template/lib/gslab_make/gslab_make/private/movedirective.py:126: SyntaxWarning: invalid escape sequence '\*' if re.search('\*', self.source): /Users/shiqiyang/Documents/github_folders/template/lib/gslab_make/gslab_make/private/movedirective.py:156: SyntaxWarning: invalid escape sequence '\*' regex = regex.split('\*') /Users/shiqiyang/Documents/github_folders/template/lib/gslab_make/gslab_make/private/movedirective.py:186: SyntaxWarning: invalid escape sequence '\*' f = re.sub('\*', w, f, 1) /Users/shiqiyang/Documents/github_folders/template/lib/gslab_make/gslab_make/run_program.py:1044: SyntaxWarning: invalid escape sequence '\s' regex = "end of do-file[\s]*r\([0-9]*\);" /Users/shiqiyang/Documents/github_folders/template/lib/gslab_make/gslab_make/tablefill.py:195: SyntaxWarning: invalid escape sequence '\{' if not is_table and re.search('label\{tab:', doc[i]): /Users/shiqiyang/Documents/github_folders/template/lib/gslab_make/gslab_make/tablefill.py:222: SyntaxWarning: invalid escape sequence '\{' if re.search('end\{tabular\}', doc[i], flags = re.IGNORECASE): /Users/shiqiyang/Documents/github_folders/template/lib/gslab_make/gslab_make/tablefill.py:252: SyntaxWarning: invalid escape sequence '\.' if re.search('\.lyx', template): /Users/shiqiyang/Documents/github_folders/template/lib/gslab_make/gslab_make/tablefill.py:254: SyntaxWarning: invalid escape sequence '\.' elif re.search('\.tex', template): /Users/shiqiyang/Documents/github_folders/template/lib/gslab_make/gslab_make/tablefill.py:261: SyntaxWarning: invalid escape sequence '\s' """.. Fill tables for template using inputs. /Users/shiqiyang/Documents/github_folders/template/lib/gslab_make/gslab_make/textfill.py:185: SyntaxWarning: invalid escape sequence '\e' '\end_layout' /Users/shiqiyang/Documents/github_folders/template/lib/gslab_make/gslab_make/textfill.py:188: SyntaxWarning: invalid escape sequence '\e' '\end_layout\n' \ /Users/shiqiyang/Documents/github_folders/template/lib/gslab_make/gslab_make/textfill.py:189: SyntaxWarning: invalid escape sequence '\e' '\end_inset\n' \ /Users/shiqiyang/Documents/github_folders/template/lib/gslab_make/gslab_make/textfill.py:190: SyntaxWarning: invalid escape sequence '\e' '\end_layout'
  • Running module data *

{'root': '..', 'config': '/Users/shiqiyang/Documents/github_folders/template/config.yaml', 'lib': '/Users/shiqiyang/Documents/github_folders/template/lib', 'config_user': '/Users/shiqiyang/Documents/github_folders/template/config_user.yaml', 'input_dir': 'input', 'external_dir': 'external', 'output_dir': 'output', 'output_local_dir': 'output_local', 'makelog': 'log/make.log', 'output_statslog': 'log/output_stats.log', 'source_maplog': 'log/source_map.log', 'source_statslog': 'log/source_stats.log', 'versions_log': 'log/versions.log'}
Cleared: output
Cleared: log
Starting makelog file at: /Users/shiqiyang/Documents/github_folders/template/data/log/make.log
Input links successfully created!
External links successfully created!
Source logs successfully written!
Version logs successfully written!
Executing command: python "/Users/shiqiyang/Documents/github_folders/template/data/code/merge_data.py"
Executing command: python "/Users/shiqiyang/Documents/github_folders/template/data/code/clean_data.py"
Output logs successfully written!
WARNING! Certain files tracked by git exceed the config size limit (0.5 MB). See makelog for list of files.
Ending makelog file at: /Users/shiqiyang/Documents/github_folders/template/data/log/make.log


  • Running module analysis *

Cleared: output
Cleared: log
Starting makelog file at: /Users/shiqiyang/Documents/github_folders/template/analysis/log/make.log
Input links successfully created!
External links successfully created!
Source logs successfully written!
WARNING! The following target files have been modified according to git status:
/Users/shiqiyang/Documents/github_folders/template/data/output/data_cleaned.csv
Version logs successfully written!
Executing command: python "/Users/shiqiyang/Documents/github_folders/template/analysis/code/analyze_data.py"
Executing command: Rscript --no-save "/Users/shiqiyang/Documents/github_folders/template/analysis/code/gen_scalars.R"
Output logs successfully written!
Ending makelog file at: /Users/shiqiyang/Documents/github_folders/template/analysis/log/make.log


  • Running module paper_slides *

Removed: /Users/shiqiyang/Documents/github_folders/template/paper_slides/input
Cleared: output
Cleared: log
Starting makelog file at: /Users/shiqiyang/Documents/github_folders/template/paper_slides/log/make.log
Input copies successfully created!
External copies successfully created!
Source logs successfully written!
WARNING! The following target files have been modified according to git status:
/Users/shiqiyang/Documents/github_folders/template/analysis/output/tables/gs_primary_scalars.xlsx
/Users/shiqiyang/Documents/github_folders/template/analysis/output/regression.csv
/Users/shiqiyang/Documents/github_folders/template/data/output/chips_sold.pdf
Version logs successfully written!
Executing command: pdflatex -output-directory=../latex_auxiliary_dir "/Users/shiqiyang/Documents/github_folders/template/paper_slides/code/paper.tex"
Executing command: pdflatex -output-directory=../latex_auxiliary_dir "/Users/shiqiyang/Documents/github_folders/template/paper_slides/code/online_appendix.tex"
Executing command: pdflatex -output-directory=../latex_auxiliary_dir "/Users/shiqiyang/Documents/github_folders/template/paper_slides/code/slides.tex"
pdf-crop-margins not found. Installing it now...
pdf-crop-margins has been successfully installed.
Output logs successfully written!
Ending makelog file at: /Users/shiqiyang/Documents/github_folders/template/paper_slides/log/make.log

One other thing to flag is that, when we run the repository, it is important for us to run it without other Excel files opening. The program will close all existing Excel files instead of only the file which produce the table.

@snairdesai
Copy link
Contributor Author

snairdesai commented Jan 22, 2024

Thanks @jc-cisneros and @ShiqiYang2022! I'll update the instructions to notify users to save any work on Excel (and close windows if they wish). After this, I think we are ready to merge (given that these action items have been addressed).

Next steps (for future issues):

  • Resolve syntax warning for escape characters.
  • Fix path issue relating to parentheses naming.
  • Extend skeleton capabilities to handle more complex formatting needs (these will arise naturally as we begin to use the skeleton for lab table constructions).

cc @gentzkow

@snairdesai
Copy link
Contributor Author

Thread continues in the associated PR (#97).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
4 participants