Germán Rodríguez
Stata Markdown Princeton University

PDF Files

Stata 15 has a putpdf command that can automate the production of PDF files using low-level instructions. The markstat command can achieve equivalent results using Markdown to author the document.

The example below, taken from Stata 15's announcement of putpdf, shows the code in samplereport.do and the equivalent markstat script, which reproduces all results but skips changing the background color of text1.

sysuse auto, replace

putpdf begin

// Create a paragraph
putpdf paragraph
putpdf text ("putpdf "), bold
putpdf text ("can add formatted text to a paragraph.  You can ")
putpdf text ("italicize, "), italic
putpdf text ("striketout, "), strikeout
putpdf text ("underline"), underline
putpdf text (", sub/super script")
putpdf text ("2 "), script(sub)
putpdf text (", and   ")
putpdf text ("bgcolor"), bgcolor("blue")
qui sum mpg
local sum : display %4.2f `r(sum)'
putpdf text (".  Also, you can easily add Stata results to your paragraph (mpg total = `sum')")

// Embed a graph
histogram rep
graph export hist.png, replace
putpdf paragraph, halign(center)
putpdf image hist.png

// Embed Stata output
putpdf paragraph
putpdf text ("Embed the output from a regression command into your pdf file.")
regress mpg price
putpdf table mytable = etable

// Embed Stata dataset
putpdf paragraph
putpdf text ("Embed the data in Stata's memory into a table in your pdf file.")
statsby Total=r(N) Average=r(mean) Max=r(max) Min=r(min), by(foreign): summarize mpg
rename foreign Origin
putpdf table tbl1 = data("Origin Total Average Max Min"), varnames  ///
        border(start, nil) border(insideV, nil) border(end, nil)

putpdf save myreport.pdf, replace
Create PDF
==========

```s/
    quietly sysuse auto, replace	
    quietly sum mpg
    local sum = r(sum)
    quietly histogram rep
    quietly graph export hist.png, replace	
```
	
`markstat` can add formatted text to a paragraph. You can *italicize*,
~~strikeout~~, and sub/super script~2~.
Also, you can easily add Stata results to your paragraph 
(mpg total = `s %4.2f `sum'`)

![](hist.png)

Embeb the output from a regression command into your pdf file.

```s/
    quietly regress mpg price
    _coef_table
```

Embeb the data in Stata's memory into a table in your pdf file.

```s/
    quietly statsby Total=r(N) Average=r(mean) Max=r(max) Min=r(min), ///
        by(foreign): summarize mpg
    rename foreign Origin
    list Origin Total Average Max Min, noobs
```

This example is not very representative because it doesn't have a lot of text. The output of putpdf is available from the Stata website here. The output from markstat is here, with a reduced screen capture below. The input script is here.


1The background color can be changed in HTML using the Markdown syntax [bgcolor]{style="background-color:rgba(0,0,255, 0.3)"} or a span tag, and in PDF by using LaTeX code as shown here with output here. In both cases I changed the opacity of the blue background to make the black text more readable than in Stata's original.