-
Notifications
You must be signed in to change notification settings - Fork 163
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
Updated pdf version specs #400
Changes from 35 commits
b6d9875
30e3aab
b3ddd2e
877a303
5a5dc3f
4fefe5b
4a2601c
8aa83e6
4794112
a5667bf
c00d029
a3efecf
e9538f4
626f1a4
0ec12cb
3476e74
1574bcb
1ea328e
62328e7
ff41bde
206255d
fce1b0f
354ca4e
20f9388
37e9e87
24e34a1
4f34472
caa442b
621f329
6232eb5
1ddeadf
39aa2e5
6dbb810
725a87c
68db019
d1ecfd9
8de0662
f524d78
e6e912a
98658b9
6475ad3
21b5b20
3a353cf
d1a2d3c
29ca8ef
400712e
44be12f
898f7cd
1b11312
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,3 @@ | ||
site/ | ||
site/ | ||
node_modules/ | ||
package-lock.json |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
# pdf-version of BIDS specification | ||
|
||
The `pdf_build_src` directory contains the scripts and tex files required to build a pdf document of the BIDS specification from multiple markdown files using the pandoc library. | ||
|
||
Pandoc is command line tool which is also a Haskell library that converts files from one markup format to another. More here: https://pandoc.org/index.html | ||
|
||
## Requirements | ||
|
||
For the pdf build to be successful, the following need to be installed: | ||
|
||
- Python 3.x | ||
- pandoc | ||
- Latest version of LaTeX: By default, Pandoc creates PDFs using LaTeX. Because a full MacTeX installation uses four gigabytes of disk space, pandoc recommends BasicTeX or TinyTeX and using the tlmgr tool to install additional packages as needed. | ||
|
||
Installation instructions for both pandoc and LaTeX: https://pandoc.org/installing.html | ||
|
||
## Building pdf document | ||
|
||
Run the `build_pdf.sh` from the `pdf_build_src` with the command `sh build_pdf.sh` from the command line terminal | ||
|
||
List of warnings are for missing characters like emojis while converting from markdown to pdf. Except for losing those characters in the final document, it doesn't affect the formatting or contents and therefore, can be ignored. | ||
|
||
## Technical Overview | ||
|
||
Pandoc comes with a plethora of options to format the resulting document. For building a pdf from multiple markdowns, a consolidated intermediate tex file is first built, which is then converted to a pdf document. To achieve the desired formatting in the final pdf, additional tex files are used with options offered by pandoc. | ||
|
||
### Formatting files | ||
|
||
`listings_setup.tex` - Listings is a LaTeX package used for typestting programming code in TeX. This file sets up the listings package to suit our needs and is used with the `--listings` option. | ||
|
||
`cover.tex` - BIDS Logo is used as a cover page for the document. `cover.tex` is used with the option `--include-before-body` | ||
|
||
`header.tex` - Header tex file that's updated with the latest version number and date when `build_pdf.sh` is run. Used with the `-H` header option. | ||
|
||
### Scripts | ||
|
||
`process_markdowns.py` - Script that processes markdown files in the `src` directory that are duplicated and modified for the needs of the pdf. | ||
|
||
`pandoc_script.py` - Prepares and runs the final pandoc command through the `build_pdf.sh` script | ||
|
||
`build_pdf.sh` - Shell script that organizes the directory structure and runs the above two python scripts |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
# Shell script that runs process_markdowns.py and pandoc_script.py in sequence to build the pdf document | ||
|
||
# prepare the copied src directory | ||
python3 process_markdowns.py | ||
|
||
# copy pandoc_script into the temp src_copy directory | ||
cp pandoc_script.py header.tex cover.tex listings_setup.tex src_copy | ||
|
||
# run pandoc_script from src_copy directory | ||
cd src_copy | ||
python3 pandoc_script.py | ||
mv bids-spec.pdf .. | ||
cd .. | ||
|
||
# delete the duplicated src directory | ||
rm -rf src_copy |
Original file line number | Diff line number | Diff line change | ||
---|---|---|---|---|
@@ -0,0 +1,27 @@ | ||||
% adds the bids logo as the cover page of the pdf | ||||
\begin{titlepage} | ||||
|
||||
\newcommand{\HRule}{\rule{\linewidth}{0.5mm}} % Defines a new command for the horizontal lines, change thickness here | ||||
|
||||
\center % Center everything on the page | ||||
|
||||
|
||||
|
||||
%---------------------------------------------------------------------------------------- | ||||
% LOGO SECTION | ||||
%---------------------------------------------------------------------------------------- | ||||
|
||||
\includegraphics[width=0.6\textwidth]{images/BIDS_logo.jpg}\\[1cm] | ||||
|
||||
%---------------------------------------------------------------------------------------- | ||||
% TITLE SECTION | ||||
%---------------------------------------------------------------------------------------- | ||||
|
||||
\HRule \\[0.4cm] | ||||
{ \huge \bfseries Brain Imaging Data Structure Specification}\\[0.4cm] % Title of your document | ||||
\HRule \\[1.5cm] | ||||
|
||||
% \textsc{\large v1.2.1}\\[0.5cm]{\large 2019-08-14}\\[2cm] | ||||
|
||||
% \vfill % Fill the rest of the page with whitespace | ||||
\textsc{\large v1.2.2}\\[0.5cm]{\large 2020-02-12}\\[2cm]\vfill\end{titlepage} | ||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We need the version and date (here: v1.2.2 and 2020-02-12) to be updated automatically. The version needs to be scraped from this line: Line 1 in 3e5b1e8
i.e., here it would be: And the date should be available from the machine that's building the PDF. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. EDIT: I realize now that you DO automatically extract version and date within your However, please extract the version from the Also: I would highly recommend to "inject" the following line into the
instead of having it already there and then merely update it during each build. The advantage of this is, that for each release, Also, it'd be less confusing to reviewers. In short: remove line Do similarly for There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fixed this for both |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
% header file | ||
\usepackage{fancyhdr} | ||
\pagestyle{fancy} | ||
\fancyhf{} | ||
\chead{Brain Imaging Data Structure v1.2.2 2020-02-12} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. version and date need to be automatically determined, see my comment above on the see #400 (comment) and discuss there, please. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. see here: #400 (comment) |
||
\fancyfoot[LE,RO]{\thepage} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
% Contents of listings-setup.tex | ||
\usepackage{xcolor} | ||
\usepackage{graphicx} | ||
|
||
\lstset{ | ||
basicstyle=\ttfamily, | ||
numbers=left, | ||
keywordstyle=\color[rgb]{0.13,0.29,0.53}\bfseries, | ||
stringstyle=\color[rgb]{0.31,0.60,0.02}, | ||
commentstyle=\color[rgb]{0.56,0.35,0.01}\itshape, | ||
numberstyle=\footnotesize, | ||
stepnumber=1, | ||
numbersep=5pt, | ||
backgroundcolor=\color[RGB]{248,248,248}, | ||
showspaces=false, | ||
showstringspaces=false, | ||
showtabs=false, | ||
tabsize=2, | ||
captionpos=b, | ||
breaklines=true, | ||
breakautoindent=true, | ||
escapeinside={\%*}{*)}, | ||
linewidth=\textwidth, | ||
basewidth=0.5em | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
"""Use the pandoc library as a final step to build the pdf. | ||
|
||
This is done once the duplicate src directory is processed. | ||
""" | ||
import os | ||
import subprocess | ||
|
||
|
||
def build_pdf(filename): | ||
"""Construct command with required pandoc flags and run using subprocess. | ||
|
||
Parameters | ||
---------- | ||
filename : str | ||
Name of the output file. | ||
|
||
""" | ||
markdown_list = [] | ||
for root, dirs, files in os.walk('.'): | ||
for file in files: | ||
if file.endswith(".md") and file != 'index.md': | ||
markdown_list.append(os.path.join(root, file)) | ||
elif file == 'index.md': | ||
index_page = os.path.join(root, file) | ||
|
||
default_pandoc_cmd = "pandoc " | ||
|
||
# creates string of file paths in the order we'd like them to be appear | ||
# ordering is taken care of by the inherent file naming | ||
files_string = index_page + " " + " ".join(sorted(markdown_list)) | ||
|
||
flags = (" -f markdown_github --include-before-body cover.tex --toc " | ||
"-V documentclass=report --listings -H listings_setup.tex " | ||
"-H header.tex -V linkcolor:blue -V geometry:a4paper " | ||
"-V geometry:margin=2cm --pdf-engine=xelatex -o ") | ||
output_filename = filename | ||
|
||
cmd = default_pandoc_cmd + files_string + flags + output_filename | ||
subprocess.run(cmd.split()) | ||
|
||
|
||
if __name__ == "__main__": | ||
build_pdf('bids-spec.pdf') |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think you may be creating yourself some problems with the paths you are specifying in
working_directory
andcheckout
.I would leave the
working_directory
line alone (i.e., remove line 33 here) ... then we will have the default working directory of~/project
(see https://discuss.circleci.com/t/working-directory-is-no-longer-required-defaults-to-project/14363/2)Then I would also remove line 38, corresponding to the
path
parameter of thecheckout
setting ... that will mean that thebids-specification
will be cloned (checked out) to the default directory, which is the working directory, which will be~/project
Then you should take a look at your python scripts and how they handle paths. All the while assuming that you are working from a directory
~/project/