Commit Graph
151 Commits
Author SHA1 Message Date
Gordon WoodhullandClaude Opus 4.5 e07a3f3454 LaTeX writer: Add PDF standard support via DocumentMetadata (#11407)
Add `pdfstandard` metadata variable for specifying PDF standards
(PDF/A, PDF/X, PDF/UA) in LaTeX output. Uses LaTeX's \DocumentMetadata
command which requires LuaLaTeX.

- PDF version requirements are automatically inferred, but can be explicitly
  overridden.
- Automatic tagging for standards that require it (ua-1, ua-2, a-2a, a-3a).
- Warning for unsupported standards
- Documentation in MANUAL.txt (Variables for LaTeX, Accessible PDFs)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 20:00:57 +01:00
John MacFarlane 0cdb430110 LaTeX template: don't emit empty linkcolor= in hypersetup.
Closes #11098.
2025-09-02 09:39:39 +02:00
John MacFarlane 27851bbe9d LaTeX writer: include cancel package only if needed.
That is, only if there is math that contains `\cancel`,
`\bcancel`, or `\xcancel`.
2025-08-27 13:09:07 +02:00
Albert Krewinkel 3a185fb5d0 LaTeX writer: set pdf-trailer-id if SOURCE_DATE_EPOCH envvar is set
The `SOURCE_DATE_EPOCH` environment variable is used to trigger
reproducible PDF compilation, i.e., PDFs that are identical down to the
byte level for repeated runs.

Closes: #6539
2025-08-06 12:48:59 -07:00
John MacFarlane 9be0963327 LaTeX writer/template: Improve babel support.
Previously we used the `.ini` files for every language, but
for European languages these tend to provide inferior results
to the `.ldf` files used by classic Babel. Currently Babel
documentation recommends using the classic system for European
languages written in Latin and Cyrillic scripts and Vietnamese.
So the LaTeX writer and template now follow this guidance.

Main languages in the list of languages with good "classic" support
are added to global documentclass options and will be automatically
handled by Babel using the `.ldf` files.

If the main language is not in this list, the `babeloptions` variable
will be set to `provide=*`, which will cause support to be loaded from
the `.ini` file rather than an `.ldf`. So, for example, setting
`-V babeloptions=''` with a polytonic Greek document will cause the
`.ldf` support to be used instead of the `.ini`.

The default setting of this variable can be overwritten, but in most
cases the default should give good results.

Closes #8283.
2025-02-08 10:45:11 -08:00
Thomas Hodgson 7d1962b617 Move nocites from LaTeX preamble to body (#10465)
Closes #10461.

Putting `\nocite` in the preamble works only with biblatex.
2024-12-17 10:17:13 -08:00
John MacFarlane 516931f4b5 LaTeX/Beamer template changes.
- Split fonts.latex partial into two parts: fonts.latex and
  font-settings.latex.
- In beamer template, load beamer theme between fonts.latex and
  font-settings.latex. This allows a theme (such as metropolis)
  to set its own default font, while still allowing the user to
  override it.

This fixes a regression in pandoc 3.5.

Users who have custom templates based on pandoc 3.5 templates will
need to add `font-settings.latex()` after `fonts.latex()` in the
latex template. In a beamer template, the beamer theme-setting
code needs to be moved between these two partials.

Closes #10297.
2024-10-23 19:17:51 -07:00
Thomas Hodgson f2b1de5397 Make --number-sections work with beamer (#10245)
+ Remove section numbering code from common.latex
+ Add section numbering to default.latex
+ Add logic for numbering sections in default.beamer. I moved the template setting
   code to where other beamer templates are set. This makes the section-titles and
   numbersections variables independent.

This should make --number-sections work with beamer.
2024-10-01 12:26:28 -07:00
John MacFarlane 0dc660550d Move beamerarticle code from beamer -> latex template. 2024-10-01 09:06:43 -07:00
John MacFarlane c9c40eee8f Beamer template doesn't need amsmath,amssym.
These are loaded by beamer automatically.
2024-09-29 21:27:01 -07:00
John MacFarlane 2406ec1cdb Remove font-settings.tex partial.
We incorporate this into fonts.tex, and move the beamer theme-setting
commands before both of them.
2024-09-29 21:26:56 -07:00
John MacFarlane 2a6268de67 Refactor latex template using partials.
+ Split out common parts of latex template into partials: common.latex,
  fonts.latex, font-settings.latex, passoptions.latex, hypersetup.latex,
  after-header-includes.latex.
+ Split out old latex template into default.latex and default.beamer.
+ Make default.beamer the default template for beamer.
2024-09-29 14:18:31 -07:00
Jonathan d89681179d default.latex: wrong beamer color in (sub)section page
The default.latex template defines "part title", "section title" and
"subsection title" via \setbeamertemplate. But for "section title" and
"subsection title", the beamercolorbox also used the "part title"
parameter instead of the "(sub)section title". This had the effect that
for (sub)section pages the color attributes of the part title were used.
2024-07-29 10:52:16 -07:00
John MacFarlane 26b25a4428 LaTeX writer: new method for ensuring images don't overflow.
Previously we relied on graphicx internals and made global
changes to Gin to force images to be resized if they exceed
textwidth.  This approach is brittle and caused problems
with `\includesvg` (see #9660).

The new approach uses a new macro `\pandocbounded` that is
now defined in the LaTeX template. (Thanks here to Falk Hanisch in
https://github.com/mrpiggi/svg/issues/60.)

The LaTeX writer has been changed to enclose `\includegraphics`
and `\includesvg` commands in this macro when they don't explicitly
specify a width or height.

In addition, the writer now adds `keepaspectratio` to the
`\includegraphics` or `\includesvg` options if `height` is specified
without width, or vice versa. Previously, this was set in the preamble
as a global option.

Compatibility issues:

- If custom templates are used with the new LaTeX writer, they will have
  to be updated to include the new `\pandocbounded` macro, or an error
  will be raised because of the undefined macro.

- Documents that specify explicit dimensions for an image may render
  differently, if the dimensions are greater than the line width or
  page height. Previously pandoc would shrink these images to fit,
  but the new behavior takes the specified dimensions literally.
  In addition, pandoc previously always enforced `keepaspectratio`,
  even when width and height were both specified, so images with
  width and height specified that do not conform to their intrinsic
  aspect ratio will appear differently.

Closes #9660.
2024-06-23 16:12:37 -07:00
John MacFarlane cd9753d4af LaTeX writer/template: specify language option for selnolig...
...and only include it if `english` or `german` is used.

Since 3d8f011, the babel language is not specified as a
class option any more; so now we need to explicitly specify
the language option when we load `selnolig`.  Only `german`
and `english` are valid, so we construct the variable
`selnolig-langs` in the writer and include `selnolig` if it
is nonempty.

This should restore proper ligature suppression when
lualatex is used.

Closes #9863. Supersedes #9864.

Thanks to @fkohrt for the initial fix.
2024-06-10 19:33:43 -07:00
John MacFarlane 8e227ab059 LaTeX template: put babel-lang in options to beamer.
This is required to make beamer use proper localized terms for
things like "Section." Closes #9868.
2024-06-10 08:57:05 -07:00
John MacFarlane 684668db1e Fix --toc-depth with beamer output.
Previously only top-level sections were ever included in the TOC,
regardless of the setting of `--toc-depth`.

Closes #9861.
2024-06-08 17:35:00 -07:00
Guilhem Saurel bd8529257e LaTeX template: add titlegraphicoptions variable (#9207)
Including a title graphic on a beamer template might require some
options, like e.g. `height=1.5cm` to ensure some image will fit at its
place in a given template.
2024-05-02 09:35:29 -07:00
Oliver Fabel f20f74512c Fix block headings support for unnumbered paragraphs (#9542)
`block-headings: true` seems to break unnumbered paragraphs and subparagraphs. This is due to the fact, that the unnumbered version uses the star macros \paragraph* and \subparagraph*. See issue #6018 for details.
2024-03-09 08:46:27 -08:00
Max Heller 74f4ae25d2 LaTeX writer: set font fallback for babel main font 2024-01-20 09:47:12 -08:00
lawcho 0110f59053 LaTeX template: support font fallback
* LuaLaTeX-specific (uses luaotfload)
* Configured in YAML metadata
* Sans/main/mono fonts have separate fallback chains
2024-01-19 17:41:27 -08:00
mh4ckt3mh4ckt1c4s dce7f7a6a8 Fix beamer highlighting 2024-01-05 22:26:49 -07:00
John MacFarlane bb36f127e2 LaTeX template: include bookmark package unconditionally.
This package produces better PDF bookmarks than hyperref
and does it on the first pass.

As a consequence, we now default to running LaTeX only
once in producing a PDF (instead of twice). If a table
of contents is present, we still have to run three times
to get the page numbers.
2023-11-03 10:40:38 -07:00
John Purnell c9fe8b81ca LaTeX template: fix \CSLBlock vertical space 2023-09-10 21:22:54 -07:00
John MacFarlane 254e22f3e7 LaTeX template: remove space around \strut in CSL commands.
See #9058.
2023-09-07 15:40:55 -07:00
John MacFarlane d051aa9c9d Fix typo in latex template. 2023-09-07 13:02:25 -07:00
John MacFarlane 6273220449 Adjust default latex template to improve citeproc output.
- Add a strut to avoid inconsistencies in spacing.
- Remove a break at the end of CSLRightInline to avoid
  inconsistencies in spacing. It shouldn't be necessary
  because the paragraph should extend to the right margin.

See #9058.
2023-09-07 09:04:56 -07:00
John MacFarlane b7e1ce422c Rewrite CSLReferences environment...
...to avoid depending on enumitem, which plays badly with
beamer.  Instead we use a regular list environment.
Thanks to @jpcirrus for the concept.

We also restore the pre-3.1.7 format of the CSLReferences
environment, which again has two parameters. The first
determines whether a hanging indent is used (1 = yes, 0 = no),
and the second is the entry line spacing (0 = none).

Closes #9053.
2023-09-05 20:24:20 -07:00
John MacFarlane 4b1fc4de72 LaTeX template: fix regression with CSL display="block".
We no longer got a line break before the block; this restores it.
Closes #7363.
2023-09-04 16:55:47 -07:00
John MacFarlane c017bbed58 LaTeX template: add code allow \cite to break across lines.
Closes #9050.
2023-09-03 15:29:28 -06:00
John MacFarlane 353177f9e7 Use \cite and \bibitem to link up citations, even with citeproc.
See #9031 and discussion in #9020. This will give us better
accessibility; when tagging is enabled, the citation can be
linked to the bibliography entry.

This changes some of the details of the layout and the default
template. We now make CSLReferences a special enumitem list
that will contain `\bibitem`s.

Internal links inside citations to ids beginning in `ref-` are
put inside a `\cite` instead of `\hyperref`.

Closes #9031.
2023-08-29 09:23:50 -07:00
John MacFarlane 65985f5405 LaTeX template: special definition of \st for CJK.
soul's version raises on error on CJK text.
Closes #9019.
2023-08-26 17:18:55 -07:00
John MacFarlane a5159c2c50 Fix \babelfont in default latex template.
The first invocation should not specify a language, because
it's the default.  If we specify a language, we get an error
in some cases.  Closes #8728.
2023-03-28 16:23:51 -07:00
John MacFarlane 22996abf69 LaTeX template: set mainfontoptions with \babelfont too.
Closes #8721.
2023-03-25 15:16:54 -07:00
John MacFarlane 5af2d70b0d Fix highlight/underline with lualatex.
We need the lua-ul package instead of soul, which doesn't
work with lualatex.

Updates default latex template.

Closes #8707.
2023-03-20 08:05:28 -07:00
John MacFarlane 369e7b52e8 Fix template for babelfonts so it conforms with documentation.
Closes #8697.
2023-03-15 09:20:39 -07:00
John MacFarlane 9b04036f6b Add babelfonts variable to default LaTeX template.
This allows specifying certain fonts to be used with
certain babel languages.

Thanks to Frederik Elwert.
2023-03-10 14:19:02 -08:00
Martín Pozo 5f82c4fd10 Fix background image in Beamer when there are figure environments (#8671) 2023-03-06 08:42:59 -08:00
Yudong Jin a1b7078bd3 LaTeX template: Add CJKsansfont and CJKmonofont for XeLaTeX (#8656)
`CJKsansfont` and `CJKmonofont` will be set for xelatex only if `CJKmainfont` is also provided.
2023-02-26 13:47:23 -08:00
Albert KrewinkelandAner Lucero 909ced5153 Support complex figures. [API change]
Thanks and credit go to Aner Lucero, who laid the groundwork for this
feature in the 2021 GSoC project. He contributed many changes, including
modifications to the readers for HTML, JATS, and LaTeX, and to the HTML
and JATS writers.

Shared (Albert Krewinkel):

- The new function `figureDiv`, exported from `Text.Pandoc.Shared`,
  offers a standardized way to convert a figure into a Div element.

Readers (Aner Lucero):

- HTML reader: `<figure>` elements are parsed as figures, with the
  caption taken from the respective `<figcaption>` elements.

- JATS reader: The `<fig>` and `<caption>` elements are parsed into
  figure elements, even if the contents is more complex.

- LaTeX reader: support for figures with non-image contents and for
  subfigures.

- Markdown reader: paragraphs containing just an image are treated as
  figures if the `implicit_figures` extension is enabled. The identifier
  is used as the figure's identifier and the image description is also
  used as figure caption; all other attributes are treated as belonging
  to the image.

Writers (Aner Lucero, Albert Krewinkel):

- DokuWiki, Haddock, Jira, Man, MediaWiki, Ms, Muse, PPTX, RTF, TEI,
  ZimWiki writers: Figures are rendered like Div elements.

- Asciidoc writer: The figure contents is unwrapped; each image in the
  the figure becomes a separate figure.

- Classic custom writers: Figures are passed to the global function
  `Figure(caption, contents, attr)`, where `caption` and `contents` are
  strings and `attr` is a table of key-value pairs.

- ConTeXt writer: Figures are wrapped in a "placefigure" environment
  with `\startplacefigure`/`\endplacefigure`, adding the features
  caption and listing title as properties. Subfigures are place in a
  single row with the `\startfloatcombination` environment.

- DocBook writer: Uses `mediaobject` elements, unless the figure contains
  subfigures or tables, in which case the figure content is unwrapped.

- Docx writer: figures with multiple content blocks are rendered as
  tables with style `FigureTable`; like before, single-image figures are
  still output as paragraphs with style `Figure` or `Captioned Figure`,
  depending on whether a caption is attached.

- DokuWiki writer: Caption and "alt-text" are no longer combined. The
  alt text of a figure will now be lost in the conversion.

- FB2 writer: The figure caption is added as alt text to the images in
  the figure; pre-existing alt texts are kept.

- ICML writer: Only single-image figures are supported. The contents of
  figures with additional elements gets unwrapped.

- HTML writer: the alt text is no longer constructed from the caption,
  as was the case with implicit figures. This reduces duplication, but
  comes at the risk of images that are missing alt texts. Authors should
  take care to provide alt texts for all images.

  Some readers, most notably the Markdown reader with the
  `implicit_figures` extension, add a caption that's identical to the
  image description. The writer checks for this and adds an
  `aria-hidden` attribute to the `<figcaption>` element in that case.

- JATS writer: The `<fig>` and `<caption>` elements are used write
  figures.

- LaTeX writer: complex figures, e.g. with non-image contents and
  subfigures, are supported. The `subfigure` template variable is set if
  the document contains subfigures, triggering the conditional loading
  of the *subcaption* package. Contants of figures that contain tables
  are become unwrapped, as longtable environments are not allowed within
  figures.

- Markdown writer: figures are output as implicit figures if possible,
  via HTML if the `raw_html` extension is enabled, and as Div elements
  otherwise.

- OpenDocument writer: A separate paragraph is generated for each block
  element in a figure, each with style `FigureWithCaption`. Behavior for
  single-image figures therefore remains unchanged.

- Org writer: Only the first element in a figure is given a caption;
  additional block elements in the figure are appended without any
  caption being added.

- RST writer: Single-image figures are supported as before; the contents
  of more complex images become nested in a container of type `float`.

- Texinfo writer: Figures are rendered as float with type `figure`.

- Textile writer: Figures are rendered with the help of HTML elements.

- XWiki: Figures are placed in a group.

Co-authored-by: Aner Lucero <4rgento@gmail.com>
2023-01-13 09:13:27 -08:00
John MacFarlane 8a2418cc29 LaTeX template: set \babelfont...
when `mainlang` and a lang are specified and pdflatex is not being used.
This is needed for good results in Arabic and doesn't seem to hurt
for other languages we've tried.

Closes #8538.
2023-01-11 09:40:31 -08:00
John MacFarlane 144bf90ab9 LaTeX writer: Use soul instead of ulem for strikeout, underline.
This handles things like hyphenation, line breaks, and nonbreaking
spaces better.

Closes #8411.
2022-11-19 12:28:41 -08:00
Amar Al-Zubaidi 03e478ee2c Add LaTeX variable urlstyle (#8429)
This is set to `same` by default, so users should not experience any change.
2022-11-10 08:39:14 -08:00
Jeremie Knuesel 644c984169 latex template: set fonts after Beamer theme
Beamer themes such as metropolis and saintpetersburg change the default
fonts. This change gives precedence to the user font settings by moving
them after the loading of the Beamer theme.
2022-10-06 10:14:38 -07:00
John MacFarlane 1393037f4e LaTeX writer: use \includesvg for SVGs...
...and include the `svg` package.
Closes #8334.
2022-09-29 09:31:39 -07:00
Albert Krewinkel eb18267407 LaTeX template: fix behavior of colorlinks variable
Fixes a regression that required the `boxlinks` variable to be set in
addition to the usual link coloring variables. Otherwise links were
never colored in LaTeX PDF output.

Fixes: #8226
2022-08-12 00:11:10 +02:00
John MacFarlane c97c4761a8 Add boxlinks variable for LaTeX/PDF output.
If `boxlinks` is set but `colorlinks` is not, then boxes will
be printed around links (`hidelinks` will not be set in `hypersetup`).

Addresses #8198.
2022-07-26 09:48:17 -07:00
Albert Krewinkel 9c29d840ff LaTeX template: fix links-as-notes
The redefinition of `\href` when using `links-as-notes` must happen
after the hyperref package has been loaded.

Fixes: #8077
2022-05-17 16:12:53 +02:00
Hos Es b1990b0657 LaTeX template: Fix <200c> character rendering (#8036)
Renamed `\textormath` to `\TextOrMath`.
2022-04-23 11:38:47 +02:00
John MacFarlane 9053214fba LaTeX template: Move urlstyle and xurl commands to after hyperref.
Closes #7978.
2022-03-21 10:42:18 -07:00