Pandoc-generated PDF: Change list numbering style - latex

What is the way to change the style of numbers in ordered lists generated by Pandoc?
For the following Markdown input
1. One
2. Two
1. Sub 1
2. Sub 2
Pandoc generates the following Latex output
\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\itemsep1pt\parskip0pt\parsep0pt
\item
One
\item
Two
\begin{enumerate}
\def\labelenumii{\arabic{enumii}.}
\itemsep1pt\parskip0pt\parsep0pt
\item
Sub 1
\item
Sub 2
\end{enumerate}
\end{enumerate}
This results in the following PDF output:
1. One
2. Two
1. Sub 1
2. Sub 2
While I'm trying to achieve
1. One
2. Two
2.1. Sub 1
2.2. Sub 2
I tried to redefine style of numbering in the default template with these commands
\renewcommand{\labelenumii}{\theenumii}
\renewcommand{\theenumii}{\theenumi.\arabic{enumii}.}
but as Pandoc generates explicit definition for labelenumii this solution does not work.
Update
It turns out that the problem could be resolved by using #. notation instead of 1. one. For whatever reason Pandoc skips styling only for lists defined this way and interprets the standard Markdown notation as an instruction to style list with plain numbers. Hopefully in future versions it will be a bit more flexible and will add the support for nested numbers in lists.

edit
This function of the latex writer that adds the \def\labelenumi{} part checks for numstyle == DefaultStyle && numdelim == DefaultDelim. As #oleg found out, this might be accomplished with #. list markers, so that this should work:
---
header-includes:
- \renewcommand{\labelenumii}{\theenumii}
- \renewcommand{\theenumii}{\theenumi.\arabic{enumii}.}
---
#. One
#. Two
#. Sub 1
#. Sub 2
There are two feature requests asking for a native markdown solution on the issue tracker (336 and 1627), as well as a discussion on the mailing list.
pre-edit answer
Of course, you could always compile to latex, postprocess the file to remove those \def\labelenumi{} lines, and then compile the latex file. Here is an example that works with the standard latex template.
test.md
---
header-includes:
- \renewcommand{\labelenumii}{\theenumii}
- \renewcommand{\theenumii}{\theenumi.\arabic{enumii}.}
---
1. One
2. Two
1. Sub 1
2. Sub 2
commands:
pandoc test.md -t latex -s | sed '/\\def\\labelenumi/d' > test.tex
xelatex test.tex
But all the lists of your document will be affected, and you need to write the latex compilation commands yourself.

Related

How to remove number from toc title with pandoc+beamer

I am using pandoc to generate a beamer slideshow. I activated the generation of a TOC and specified a TOC headline. But there is an extra number added to this title as if the TOC would span several slides, but it does not.
My source file
---
toc: true
toc-title: the overview
...
# my section
and I compile with pandoc -t beamer -o x.pdf < x.md. The title of the TOC has this extra roman I which beamer normally adds if a slide is split into two (or more).
How can I get rid of this number?
Edit
In the end I put it in the yaml preamble of the pandoc file as raw latex code:
header-includes: |
```{=latex}
\setbeamertemplate{frametitle continuation}[from second]
% more stuff
```
You can disable the continuation count for frames that consist only of a single one by using this command:
\setbeamertemplate{frametitle continuation}[from second]
In the response from #samcarter_is_at_topanswers.xyz, I had to delimit the command with backticks and indicate as latex code:
`\setbeamertemplate{frametitle continuation}[from second]`{=latex}

using command line arguments to include/exclude text sections

I have a main document defined of which I need to extract different versions. For example, in:
\section*{5\\animalia}
\vspace{\oneline}
\includegraphics[page={33}, trim=1cm 0 0 0]{\pdfsource}
\includepdf[page={34-37}]{\pdfsource}
the last line would be compiled only if I would run pdflatex with the argument AA.
There should be around 20 different versions to prepare, so it would be great if I could compile all these in a batch, instead of preparing 20 different files. There are no common elements to select, so the lines from AA will all be different ones from AB or AJ.
I had a look at \newcommand and \xparse, but I think I didn't find exactly what I needed. Any suggestions?
One other detail: the argument would also be passed to a text line at the start, namely:
\subsection*{ARGUMENT}
would print as AA. I think that is easy to do, but I couldn't also find a concrete example.
If you compile the following with
pdflatex "\newcommand{\version}{KK}\input{filename.tex}"
you can test for the value of \version:
\documentclass{article}
\usepackage{ifthen}
\ifdefined\version
\else
\def\version{AK}
\fi
\begin{document}
\section{\version}
\ifthenelse{ \equal{\version}{KK} }{
KK version
}{
other version
}
\end{document}

Pandoc generation of pdf from markdown 4th header is rendered differently

I am using pandoc to generate a pdf from some markdown. I am using h1 through h4 via hash symbols. Example h1=#, h4=####. When I generate my document like this:
pandoc input.md -o output.pdf
I get a document where h1, h2 and h3 have a newline after them but h4 does not have a new line. The text starts on the same line as the header (it isn't formatted the same way, but there isn't a newline character between).
I've tried adding spaces after the #### and adding manual line returns using my editor but nothing seems to work.
Any ideas?
While the mentioned solutions work fine, pandoc offers a build-in variable to enable block-headings for \paragraph.
pandoc -s -o out.pdf some.md -V block-headings
Pandoc Manual
pandoc generates PDFs via LaTeX. In LaTeX, "headers" are generated using the following commands:
\section
\subsection
\subsubsection
\paragraph
\subparagraph
As you can see, a "level four heading" corresponds to the \paragraph command, which is rendered as you describe. There simply isn't a \subsubsubsection command to use.
The only way to get what you want is to redefine the \paragraph command, which is quite tricky. I haven't been able to make it work with Pandoc.
While #tarleb’s answer is surely the best (except that it specifies a
wrong amount of vertical space), here is a “simpler” (by some measure)
but more hacky (in LaTeX terms at least) solution which optionally uses a Pandoc Lua filter or a LaTeX hack but avoids loading another LaTeX package.
We want the LaTeX source to look something like this:
\hypertarget{level-4-heading}{%
\paragraph{Level 4 heading}\label{level-4-heading}}
\hfill
Lorem ipsum dolor sit amet.
This LaTeX looks awful, but if you don’t need to keep or share the LaTeX
source it does what you probably want: a space between the level 4
heading and the paragraph after it equal to the space between a level 3
heading and the paragraph after it.
Here is how it works: since a \hfill on a line on its own is about as
close as you can get to an empty paragraph in LaTeX you get a first
paragraph — the one running in with the heading — containing only
horizontal white space until the end of the line, and then immediately
after a new paragraph — the actual first paragraph after the heading —
with just a normal paragraph space between it and the heading. This
probably also upsets LaTeX’s idea about what a \paragraph should be
like as little as possible.
The “manual” way to do this is as follows:
#### Level 4 heading
````{=latex}
\hfill
````
Lorem ipsum dolor sit amet.
This uses Pandoc’s relatively new raw markup syntax — the “code block”
is actually a raw LaTeX block — but it looks even more awful than the
resulting LaTeX source! It is also a tedious chore to have to insert
this after every level 4 heading. In other words you want to insert that
raw LaTeX automatically, and that can be done with a Lua filter:
--[======================================================================[
latex-h4-break.lua - Pandoc filter to get break after a level 4 heading.
Usage:
$ pandoc --lua-filter latex-h4-break.lua input.md -o output.pdf
--]======================================================================]
-- create it once, use it many times!
local hfill_block = pandoc.RawBlock('latex', '\\hfill')
function Header (elem)
if 4 == elem.level then
return { elem, hfill_block }
else -- ignore headings at other levels!
return nil
end
end
However you can also do a simple LaTeX hack in a header-includes
metadata block to get the same effect:
---
header-includes:
- |
``` {=latex}
\let\originAlParaGraph\paragraph
\renewcommand{\paragraph}[1]{\originAlParaGraph{#1} \hfill}
```
---
#### Level 4 heading
Lorem ipsum dolor sit amet.
This works by first creating an “alias” of the \paragraph command and
then redefining the \paragraph command itself, using the alias in the
new definition so that now wherever the LaTeX source created by Pandoc
contains \paragraph{Foo} it is if it instead had contained
\paragraph{Foo} \hfill which does what we want with zero extra
dependencies! (In case you wonder the wacky spelling of the “aliased”
command is to minimize the risk that it collides with anything which
already exists, since the TeX \let command doesn’t check for that. We
certainly don’t want to overwrite any existing command!)
NOTE: If you really should want more or less space than a normal
paragraph break after the heading just add an appropriate \vspace
command after the \hfill: \hfill \vspace{-0.5\parskip}.
Shifting Headers
Arguably the best way to solve this would be to avoid the problem altogether by shifting what a level 4 header corresponds to. The default for pandoc is to use \section commands for 1st level and \paragraph for 4th level headers. This can be altered via the --top-level-division parameter:
--top-level-division=[default|section|chapter|part]
Treat top-level headers as the given division type in LaTeX [...] output. The hierarchy order is part, chapter, then section; all headers are shifted such that the top-level header becomes the specified type. The default behavior is to determine the best division type via heuristics [...]
So with --top-level-division=chapter, a 4th-level header would be generated via the \subsubsection command.
Styling via LaTeX
If this is not an option, the next best way is to configure the layout of the corresponding LaTeX command: for level-four headers, this is \paragraph by default. The following methods are taken from TeX StackExchange answers.
Please also check the answer by bpj, which is much simpler than what's proposed below.
Default document-classes
The default way would be to configure \paragraph via the titlesec package. We can use the header-includes metadata field for this, which pandoc will include in the intermediate LaTeX document.
---
header-includes: |
``` {=latex}
\usepackage{titlesec}
\titlespacing*{\paragraph}{0pt}{1ex}{-\parskip}
\titleformat{\paragraph}[hang]
{\normalfont\bfseries}
{}
{0pt}
{}
```
---
KOMA document-classes
Using titlesec won't work properly for documents using KOMA classes (like scrartcl), as KOMA has it's own ways of doing things. For these, use this alternative snippet:
---
documentclass: scrartcl
header-includes: |
``` {=latex}
\makeatletter
\renewcommand\paragraph{\#startsection{paragraph}{4}{\z#}%
{-3.25ex \#plus -1ex \#minus -0.2ex}%
{0.01pt}%
{\raggedsection\normalfont\sectfont\nobreak\size#paragraph}%
}
\makeatother
```
---
I am not sure, why, but this works for me:
Put $\ \\ $ in the first line after your #### headline

Redefining sectioning commands in latex, issues with references and labels

I'm trying to change the appearance of one of the native sectioning commands in LaTeX. But after doing so, latex cannot handle references as expected.
The code given later is expected to output a document with the text
1 One
See section 2.
2 Two
See section 1.
But instead I get the following.
1 One
See section .
2 Two
See section .
What can I change in the renewed command, such that the references will work again.
The code for the document is as follows:
\documentclass{article}
\newcounter{seccnt}
\renewcommand{\section}[1]{\vspace{2em}\stepcounter{seccnt} \theseccnt~ {\Large #1}\vspace{0.5em}}
\begin{document}
\section{One}
\label{secOne}
See section \ref{secTwo}.
\section{Two}
\label{secTwo}
See section \ref{secOne}.
\end{document}
I think you need to use \refstepcounter instead of \stepcounter, so that the reference is stored.

Custom appendix in Latex

I'm Trying to solve a little problem that I have with a book I'm writing, I was wondering if could you give me a hand with my work.
I'm trying to rename the automatic captions in the appendix's tables
that I have. By default Latex do this:
Appendix A:
Table A.1
Table A.2
.
.
Appendix B:
Table B.1
Table B.2
.
.
The problem is: I have 6 chapters in my book, but each chapter except
the first one have appendices and All appendix go in the end of the
book. And All tables and figures in the appendix are A not B or C,
like this:
Anexo 2 <- The renamed appendix 2
Table A2_1
Table A2_2
Table A2_3
.
.
Anexo 3
Table A3_1
Table A3_2
Table A3_3
.
.
Could you help me??? I'll appreciate it so much
Thanks,
Dennis
Firstly, to change 'appendix' to 'Anexo',
\renewcommand{\appendixname}{Anexo}
The \appendix command changes the way sectional units are numbered. I too have found the \appendix command sometimes causes problems since everything which follows it is treated as part of the appendix.
You can create a section labelled 'Appendix' with distinctive numbering by using the \section command with suitably redefined commands for the counters. The following example generates a single 'Appendix' with equations numbered A-1, A-2, ...
\renewcommand{\theequation}{A-\arabic{equation}}
% redefine the command that creates the equation no.
\setcounter{equation}{0} % reset counter
\section*{APPENDIX} % use *-form to suppress numbering
With several appendices you can get appropriate numbering by redefining the \thesection command and resetting the section counter.
Look into the appendix package and its appendices environment. For localized names, look into the babel package instead.

Resources