Convert xypic matrix to eps. (LaTeX) - latex

I have a lot of BIG xypic-matrices in my LaTeX file for one of my papers, and it takes long/infinite time to compile. Is there a way to convert just the separate xypic-pieces to eps files, that I include in my main document?
I suppose I use LaTeX to compile the xypic part, but then I will get an entire document, right?
(Can someone add the tag xypic to this question?)
Update: The solution I came up with was to have separate LaTeX documents for each xymatrix, and then use dvips -E to capture the figure. I created a script for Compiling + Create eps in Kile, the editor I use.

Use latex to compile, then a
dvips -E -o temp.eps temp.dvi
to make an eps out of it, then epscrop to make a small eps you can include later.

There are a few ways to run Latex on just a portion of a document; the most widely used is likely Emacs/Auctex's TeX-command-region (C-c C-r), which generates a temporary Latex file whose dvi/eps/pdf/whatever output is just that from the selected region.

You can use the preview package to only process your pictures. For example:
$ cat a.tex
\documentclass{article}
\usepackage[active,tightpage]{preview}
\setlength\PreviewBorder{5pt}
\usepackage [arrow]{xy}
\begin{document}
\begin{preview}
\begin{xy}
(0,-20)="a", (0,0)="b"
\ar#{<.||} #<24mm> "a";"b"
\ar#^{<.||} #<16mm> "a";"b"
\ar#_{<.||} #<8mm> "a";"b"
\ar#0{<.||} "a";"b"
\ar#1{<.||} #<-8mm> "a";"b"
\ar#2{<.||} #<-16mm> "a";"b"
\ar#3{<.||} #<-24mm> "a";"b"
\end{xy}
\end{preview}
\end{document}
Then, when you run pdflatex, preview will generate a pdf with only the pictures in it. You can convert them to eps by ghostscript:
$ latex a
$ dvips -E -i -Pwww -o figure.000 a
or you can generate PNG images:
$ pdflatex a
$ gs -dNOPAUSE -r400 -dGraphicsAlphaBits=4 -dTextAlphaBits=4 \
-sDEVICE=png16m -sOutputFile=figure.png -dBATCH a.pdf
Then, you can include the generated files in your document.

Related

Converting from latex to markdown with pandoc, images not converted

I'm trying to convert a latex file to markdown using Pandoc. The latex file contains linked images, for example like this:
\begin{figure}[htbp]
\begin{center}
\leavevmode
\scalebox{0.4}{\includegraphics{microsatsFigures/Figure_traceView.png}}
\end{center}
\caption{The Traces view}
\label{traces}
\end{figure}
However in the markdown file all I get is
::: center
:::
Is this a known limitation of Pandoc, or is there some command I'm missing that will convert the image instructions? The command I used in pandoc was just the standard format:
pandoc -f latex -t markdown Inputfile.tex -o Outputfile.md

Compile two versions of a document from the same latex source

How to automatically compile two versions of the same document, for example version without answers for the students and another version with answers for myself?
I have a small bash script to do a dual format.
function latex-ans () {
n=$(basename $1 .tex) # strip .tex in filename foo.tex -> foo
ln -s $n.tex $n-ans.tex # create a soft link (for instance foo-ans.tex -> foo.tex)
pdflatex '\def\withanswer{1} \input{'$n-ans'}' && pdflatex $n
% first format the version with answers and then the normal version
rm $n-ans.tex $n-ans.log
% remove useless files
}
If I have a file foo.tex, this commands formats both versions of the file and generates two pdf: foo.pdf and foo-ans.pdf. Thanks to the renaming of foo.tex through the ln -s, it also keeps separate foo.aux and foo-ans.aux to preserve useful information on both versions.
At the latex level, I basically do the same and use the macro \withanswers to configure my packages.
There are several packages that allow to conditionally exclude certain parts of the document, for example the exercise package.
With TeXstudio, the following magic comment can be used to automatically compile both versions at once (including repeated compilation for cross-references, bibliographies, indices etc.):
% !TeX program = latexmk -pdf -pdflatex="pdflatex -synctex=1 -interaction=nonstopmode -shell-escape" -jobname=% -pretex="\newcommand{\version}{noanswer}" -usepretex % | latexmk -pdf -pdflatex="pdflatex -synctex=1 -interaction=nonstopmode -shell-escape" -jobname=%_solution -pretex="\newcommand{\version}{}" -usepretex % | txs:///view-pdf "?am)_solution.pdf"
\documentclass{article}
% setting a default value in case it is compiled without the magic comment
\ifdefined\version
\else
\def\version{noanswer}
\fi
\usepackage[\version]{exercise}
\begin{document}
\begin{Exercise}[title={Title},label=ex1]
question text
\end{Exercise}
\begin{Answer}[ref={ex1}]
solution
\end{Answer}
\end{document}

How to set the font size for code blocks in pandoc markdown?

this small example:
An example code snippet:
~~~{.cpp}
class A
{
public:
static void f1 () {};
virtual void f2 () = override;
};
~~~
can be used to generate a PDF output with:
pandoc -o block-code.pdf block-code.txt
resulting in
The font sizes of both the code and the text that are equal. How can I change the font size of the code snippets for the pdf (LaTex) pandoc output?
You can simply add \small before the beginning of the code snippet and \normalsize after (to return to normal).
You can also add other similar commands. For instance, if your document is doublespaced, you can add \singlespace before the code snippet and \doublespacing after.
For this to work you need to add in the yaml at the beginning of your document the following:
---
header-includes:
- \usepackage{setspace}
---
I solved this problem for me by writing several LaTeX snippets into extra files I keep around:
cat make-code-footnotesize.tex
\renewenvironment{Shaded} {\begin{snugshade}\footnotesize} {\end{snugshade}}
I have such snippets for all different sizes: huge, LARGE, Large, large, normalsize, small, footnotesize, scriptsize, tiny.
To apply them when running pandoc, just include the respective LaTeX snippet with the -H parameter:
pandoc -o block-code.pdf block-code.txt \
-H make-code-scriptsize.tex --highlight-style=espresso
Result:
Note, this controls the font sizes for all code blocks in the PDF. It does not allow you to vary sizes from block to block. Of course, it also doesn't work for HTML, ODT, EPUB or other output -- only for LaTeX and PDF output.
I've developed a filter for pandoc https://github.com/chdemko/pandoc-latex-fontsize for this purpose:
Install this filter with pip:
$ pip install pandoc-latex-fontsize
add for example
---
pandoc-latex-fontsize:
- classes: [c, listing]
size: footnotesize
---
to your metadata block and specify the listings you want to be of size footnotesize:
~~~{.c .listing}
int main(void) {
return 0;
}
~~~
then run pandoc with
$ pandoc --filter pandoc-latex-fontsize ...
On pandoc 1.16.0.2 I did get the same problem but wasn't solved by previous answers.
When using default code highlighting of this version and exporting it with beamer (-t beamer) I got following generated output (for outputting a jmeter command):
\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{./jmeter.sh} \NormalTok{-q prod.properties -p jmeter.properties -n -t mytest.jmx -l mylog.log}
\end{Highlighting}
\end{Shaded}
By searching directly in the pandoc code with grep -r "Highlighting" * I found following code:
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}}
And I replaced it with the following to have a tiny font size in my custom pandoc template (see pandoc -D beamer):
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\},fontsize=\tiny}
Now I have a tinier font size by running the following command:
pandoc -t beamer input.md -o output.pdf --template beamer.template
I use pandoc with the --listings option and a custom eisvogel.latex template.
Download the original eisvogel-template to a new file eisvogel_custom.latex
Open the file, find the line basicstyle = \color{listing-text-color}\small\ttfamily{}\linespread{1.15},
Change the \small to \footnotesize, or \tiny
Save the file
Now run pandoc with the following options:
pandoc --pdf-engine=xelatex --template=eisvogel_custom --listings -o block-code.pdf block-code.txt
To disable the line-numbering, add the following lines at the top of block-code.txt
---
listings-disable-line-numbers: true
...
All options can be found here: https://github.com/Wandmalfarbe/pandoc-latex-template#custom-template-variables
Tested with pandoc 2.6 using docker-image dalibo/pandocker:stable

Synchronise pdf to Rnw in Knitr with texshop

Would anyone know how to get synctex to work from the pdf to the Rnw in knitr with texshop? It does work from Rnw to pdf. Many thanks.
This is how I worked this out. Not tried on multiple .Rnw files.
In TeXShop Preferences, make sure your "Sync Method" is set as "SyncTeX (TeX ≥ 2010)".
On your Mac, make the directory "~/Library/TeXShop/Rscripts" and put the R file "patchKnitrSynctex.R" downloaded from https://github.com/jan-glx/patchKnitrSynctex in this directory.
Create an executable file "Knitr.engine" including the following shell scripts and put it in "~/Library/TeXShop/Engines/":
#!/bin/bash
# export PATH=$PATH:/usr/texbin:/usr/local/bin # already on my path!
Rscript -e "library(knitr); knit('$1')"
latexmk -pdf -pdflatex='pdflatex -shell-escape -synctex=1 -file-line-error' "${1%.*}"
Rscript -e "source('~/Library/TeXShop/Rscripts/patchKnitrSynctex.R', echo=FALSE, encoding='UTF-8'); patchKnitrSynctex('${1%.*}')"
In R, install the package "patchDVI".
In your .Rnw file, add "% !TEX TS-program = Knitr" on the top line of the document. Also inside the .Rnw document somewhere around the top of the document add an R code chunk
<<setup, include=FALSE>>=
patchDVI::useknitr()
… #any other knitr global setups
#
Happy knitting!

Markdown to PDF using Pandoc since Xetex Deprecation

On my MacBook (OSX Mountain Lion), I used to use this Pandoc command to convert Markdown to PDF:
$ markdown2pdf -N -o pandoc_output.pdf --xetex --toc --template=mytemplate.tex myfile.md
But markdown2pdf no longer works, and --xetex option in markdown2pdf -N -o ../../Desktop/pandoc_output.pdf --xetex --toc --template=mytemplate-headers-garamond_date.tex is deprecated.
If I do this:
$ pandoc -N -o Desktop/pandoc_output.pdf --xetex --toc --template=mytemplate.tex myfile.md
I get this:
pandoc: unrecognized option `--xetex'
But if I take out --xetex and do this:
$ pandoc -N -o Desktop/pandoc_output.pdf --toc --template=mytemplate.tex myfile.md
then I get this:
pandoc: Error producing PDF from TeX source.
! Package hyperref Error: Wrong driver option `xetex',
(hyperref) because XeTeX is not detected.
See the hyperref package documentation for explanation.
Type H <return> for immediate help.
...
l.3925 \ProcessKeyvalOptions{Hyp}
What's the solution?
Try --latex-engine=xelatex instead of --xetex
The prior answers to this question were helpful to me, as I had installed pandoc a couple years ago, but never Tex Live. Consequently I had no idea if I had installed it correctly, so putting in the entire path helped me to see that it was working, as follows:
pandoc --latex-engine=/usr/local/texlive/2012basic/bin/universal-darwin/xelatex
This is the default install location for the BasicTex setup which you download from the Pandoc install page.
I had also forgotten about using pandoc -D Latex >my-latex-template.tex to generate a template. After giving a .tex template instead of my .html one (which caused a 'you don't have BEGIN {' error) , I got .PDF: In other words, the default template worked.
Also, I had inaccurately entered -t pdf (not shown above) to set pdf as an output format, but this was not correct. The output format is Latex, which is then translated to PDF. It is not necessary to specify an output format with the dash -t option.
I hope this record of my minor stumbles saves someone some time.
See the pandoc User's Guide (or man page) for the --latex-engine option.

Resources