逐字“breakanywhere”对使用 fvextra 包转换为 Pandoc 的 pdf 的 markdown 没有任何影响

逐字“breakanywhere”对使用 fvextra 包转换为 Pandoc 的 pdf 的 markdown 没有任何影响

我正在pdfmarkdown以如下方式开头的文件生成一个:

---
header-includes:
- \usepackage{fvextra}
- \DefineVerbatimEnvironment{Highlighting}{Verbatim}{breaklines, breakanywhere, commandchars=\\\{\}}

title: "Geomatique"
subtitle: "web mapping"
author: Marc Le Bihan
geometry: margin=2cm
fontsize: 11pt
classoption: fleqn
urlcolor: blue
---

# Installation de l'environnement

```bash
wget https://download.geofabrik.de/europe/france/midi-pyrenees-latest-free.shp.zip
wget https://www.data.gouv.fr/fr/datasets/contours-des-departements-francais-issus-d-openstreetmap/
wget https://www.data.gouv.fr/fr/datasets/decoupage-administratif-communal-francais-issu-d-openstreetmap/
```

当我使用命令生成它时pandoc

pandoc geomatique.md -o geomatique.pdf

我偶然发现线条并没有完全断掉,即使breakanywhere是坐着的。

在此处输入图片描述

您可以看到箭头 → 以及紧接着其后的空格处的换行符wget,这表明潘多克已经考虑到了该Verbatim指令,但是命令的第二部分没有正确分离。

如果我复制并粘贴生成的一些文本pdf,它看起来不完整,有些部分丢失了:

wget https://www.data.gouv.fr/fr/datasets/decoupage-administratif-communal-francais-issu-d-openstr

代替

wget https://www.data.gouv.fr/fr/datasets/decoupage-administratif-communal-francais-issu-d-openstreetmap/

@Marijin:这是它在.tex文件中生成的内容:

% Options for packages loaded elsewhere
\PassOptionsToPackage{unicode}{hyperref}
\PassOptionsToPackage{hyphens}{url}
\PassOptionsToPackage{dvipsnames,svgnames*,x11names*}{xcolor}
%
\documentclass[
  11pt,
  fleqn]{article}
\usepackage{amsmath,amssymb}
\usepackage{lmodern}
\usepackage{iftex}
\ifPDFTeX
  \usepackage[T1]{fontenc}
  \usepackage[utf8]{inputenc}
  \usepackage{textcomp} % provide euro and other symbols
\else % if luatex or xetex
  \usepackage{unicode-math}
  \defaultfontfeatures{Scale=MatchLowercase}
  \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1}
\fi
% Use upquote if available, for straight quotes in verbatim environments
\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
\IfFileExists{microtype.sty}{% use microtype if available
  \usepackage[]{microtype}
  \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
}{}
\makeatletter
\@ifundefined{KOMAClassName}{% if non-KOMA class
  \IfFileExists{parskip.sty}{%
    \usepackage{parskip}
  }{% else
    \setlength{\parindent}{0pt}
    \setlength{\parskip}{6pt plus 2pt minus 1pt}}
}{% if KOMA class
  \KOMAoptions{parskip=half}}
\makeatother
\usepackage{xcolor}
\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available
\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}}
\hypersetup{
  pdftitle={Geomatique},
  pdfauthor={Marc Le Bihan},
  colorlinks=true,
  linkcolor={Maroon},
  filecolor={Maroon},
  citecolor={Blue},
  urlcolor={blue},
  pdfcreator={LaTeX via pandoc}}
\urlstyle{same} % disable monospaced font for URLs
\usepackage[margin=2cm]{geometry}
\usepackage{color}
\usepackage{fancyvrb}
\newcommand{\VerbBar}{|}
\newcommand{\VERB}{\Verb[commandchars=\\\{\}]}
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}}
% Add ',fontsize=\small' for more characters per line
\newenvironment{Shaded}{}{}
\newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{#1}}}
\newcommand{\AnnotationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
\newcommand{\AttributeTok}[1]{\textcolor[rgb]{0.49,0.56,0.16}{#1}}
\newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
\newcommand{\BuiltInTok}[1]{#1}
\newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{#1}}}
\newcommand{\CommentVarTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
\newcommand{\ConstantTok}[1]{\textcolor[rgb]{0.53,0.00,0.00}{#1}}
\newcommand{\ControlFlowTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
\newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{#1}}
\newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
\newcommand{\DocumentationTok}[1]{\textcolor[rgb]{0.73,0.13,0.13}{\textit{#1}}}
\newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{#1}}}
\newcommand{\ExtensionTok}[1]{#1}
\newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
\newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{#1}}
\newcommand{\ImportTok}[1]{#1}
\newcommand{\InformationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
\newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
\newcommand{\NormalTok}[1]{#1}
\newcommand{\OperatorTok}[1]{\textcolor[rgb]{0.40,0.40,0.40}{#1}}
\newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{#1}}
\newcommand{\PreprocessorTok}[1]{\textcolor[rgb]{0.74,0.48,0.00}{#1}}
\newcommand{\RegionMarkerTok}[1]{#1}
\newcommand{\SpecialCharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand{\SpecialStringTok}[1]{\textcolor[rgb]{0.73,0.40,0.53}{#1}}
\newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand{\VariableTok}[1]{\textcolor[rgb]{0.10,0.09,0.49}{#1}}
\newcommand{\VerbatimStringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand{\WarningTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
\usepackage{graphicx}
\makeatletter
\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi}
\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi}
\makeatother
% Scale images if necessary, so that they will not overflow the page
% margins by default, and it is still possible to overwrite the defaults
% using explicit options in \includegraphics[width, height, ...]{}
\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio}
% Set default figure placement to htbp
\makeatletter
\def\fps@figure{htbp}
\makeatother
\setlength{\emergencystretch}{3em} % prevent overfull lines
\providecommand{\tightlist}{%
  \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
\setcounter{secnumdepth}{-\maxdimen} % remove section numbering
\usepackage{fvextra}
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{breaklines, breakanywhere, commandchars=\\\{\}}
\ifLuaTeX
  \usepackage{selnolig}  % disable illegal ligatures
\fi

\title{Geomatique}
\usepackage{etoolbox}
\makeatletter
\providecommand{\subtitle}[1]{% add subtitle to \maketitle
  \apptocmd{\@title}{\par {\large #1 \par}}{}{}
}
\makeatother
\subtitle{web mapping}
\author{Marc Le Bihan}
\date{}

\begin{document}
\maketitle

\hypertarget{installation-de-lenvironnement}{%
\section{Installation de
l'environnement}\label{installation-de-lenvironnement}}

\begin{Shaded}
\begin{Highlighting}[]
\FunctionTok{wget}\NormalTok{ https://download.geofabrik.de/europe/france/midi{-}pyrenees{-}latest{-}free.shp.zip}
\FunctionTok{wget}\NormalTok{ https://www.data.gouv.fr/fr/datasets/contours{-}des{-}departements{-}francais{-}issus{-}d{-}openstreetmap/}
\FunctionTok{wget}\NormalTok{ https://www.data.gouv.fr/fr/datasets/decoupage{-}administratif{-}communal{-}francais{-}issu{-}d{-}openstreetmap/}
\end{Highlighting}
\end{Shaded}

\hypertarget{satellite-sentinel-2a-ou-b}{%
\subsection{Satellite Sentinel 2A ou
B}\label{satellite-sentinel-2a-ou-b}}

\begin{itemize}
\tightlist
\item
  13 Bandes spectrales du visible à l'infrarouge court (SWIR), en
  passant par le proche infrarouge (PIR).
\item
  Résolution spatiale : 10 à 60 mètres
\item
  Emprise de 290 kilomètres de large
\item
  Projection UTM 31 / EPSG 32631
\item
  Fréquence de balayage : tous les cinq jours
\end{itemize}

Accessible sur \href{https://scihub.copernicus.eu/dhus/}{Copernicus EU}

Après s'être créé un compte gratuit, télécharger ces données en entrant
dans la barre de recherche : (Données \emph{Sentinel 2}, Toulouse) :

\begin{itemize}
\tightlist
\item
  \texttt{S2A\_MSIL1C\_20170705T105031\_N0205\_R051\_T31TCJ\_20170705T105605.SAFE}
\item
  \texttt{S2A\_MSIL1C\_20170215T105121\_N0204\_R051\_T31TCJ\_20170215T105607.SAFE}
\item
  \texttt{S2A\_MSIL1C\_20170824T105031\_N0205\_R051\_T31TCJ\_20170824T105240.SAFE}
  : ce dernier est offline.
\end{itemize}

Note : Copernicus permet de faire des requêtes par type de satellite,
zone visée, date, couverture nuageuse, qualité du post-traitement.

\hypertarget{compruxe9hension-dune-image-satellite}{%
\section{Compréhension d'une image
satellite}\label{compruxe9hension-dune-image-satellite}}

D'après
\href{https://cms.geobretagne.fr/content/comprendre-une-image-satellitaire}{Comprendre
une image satellitaire}

\hypertarget{bandes-spectrales-ou-canaux}{%
\subsection{Bandes spectrales (ou
canaux)}\label{bandes-spectrales-ou-canaux}}

\begin{itemize}
\item
  \textbf{Bandes} : rayons gamma, rayons X, ultra-violet, bleu, vert,
  rouge, Proche infra-rouge (PIR), infra-rouge, micro-ondes, ondes
  radio.
\item
  \textbf{Fréquence} : de haute à basse
\item
  \textbf{Longueur d'onde} : faible à grande
\end{itemize}

L'on en produit des images de type raster. où \textbf{les valeurs des
bandes sont représentées en niveaux de gris}. et traduisent traduisent
la \textbf{réflectance} ou \textbf{réflexivité}.

La \textbf{résolution spectrale} dit sur un rayon de combien de mètres
porte la valeur d'un pixel : en contrepartie d'une résolution fine, les
fenêtres des capteurs seront étroits.

Si l'on réassocie les bandes bleues, vertes et rouges ensemble, par
simple synthèse additive des trois couleurs, on réobtient
\textbf{l'image en vraies couleurs}.

Mais, pour voir aussi l'infra-rouge ou d'autres bandes non visibles à
l'oeil nu, l'on recoure fréquemment à une \textbf{image en fausses
couleurs} dépendant de ce que l'on veut mettre en évidence (exemple :
mieux discriminer les surfaces végétales ou minérales), où en
contrepartie, l'on ne fait pas apparaître la bande du bleu.

\hypertarget{ruxe9flectance-caractuxe9ristiques}{%
\subsection{Réflectance
caractéristiques}\label{ruxe9flectance-caractuxe9ristiques}}

\hypertarget{vuxe9guxe9tation}{%
\subsubsection{Végétation}\label{vuxe9guxe9tation}}

\begin{itemize}
\item
  Infrarouge haut
\item
  Rouge et vert bas
\item
  Sa réflectance caractéristique montre des sauts dans le domaine
  visible (0.4 à 0.7 µm) et le proche infrarouge (1 µm)
\item
  L'indice
  \textbf{\textcolor{blue}{Normalized Difference Vegetation Index}
  (NVDI)} met cette végétation en évidence. \[
  NVDI = \frac{PIR - R}{PIR + R}
  \]
\end{itemize}

\hypertarget{eau}{%
\subsubsection{Eau}\label{eau}}

\begin{itemize}
\tightlist
\item
  Basse pour toutes les bandes : elle dépend des matières en suspension
  qu'elle transporte.
\end{itemize}

\begin{figure}
\centering
\includegraphics{./geomatique_webmapping/signatures_spectrales_combinees.png}
\caption{Signatures spectrales combinées}
\end{figure}

\end{document}

答案1

缺少换行符是由于 Pandoc 实现语法着色的方式造成的。这是通过将输出中的每个标记包装在命令中来实现的\XXXTok,其中包含一长串不同类型的标记,这些标记以特定颜色打印。问题中的 URL 是包装在命令中的单个标记\NormalTok

\FunctionTok{wget}\NormalTok{ https://download.geofabrik.de/europe/france/midi-pyrenees-latest-free.shp.zip}

\NormalTok命令定义如下:

\newcommand{\NormalTok}[1]{#1}

因此它只返回参数而不进行着色。但是,分组可以防止fvextra在标记内执行换行。当标记较短时,这不会导致问题,这通常是编程代码的情况,但对于 URL 等较长的标记,它不起作用。

理想的解决方案是关闭\NormalTokPandoc 中的某种生成,因为它实际上并没有做任何事情并且导致了这些问题,但这似乎是不可能的。

或者,你可以重新定义\NormalTok为会自动中断的内容。一种可能性是\texttthyphenat包一起使用,如中所述如何打破较长的 \texttt 部分请注意,这仅当行中有连字符时才有效,但示例中的情况就是如此。

breaksymbol=您还可以使用选项和关闭箭头字符和缩进breakanywheresymbolpre=

梅威瑟:

---
header-includes:
- \usepackage{fvextra}
- \usepackage[htt]{hyphenat}
- \let\NormalTok\texttt
- \DefineVerbatimEnvironment{Highlighting}{Verbatim}{breaklines, breakanywhere, breaksymbol=, breakanywheresymbolpre=, commandchars=\\\{\}}

title: "Geomatique"
subtitle: "web mapping"
author: Marc Le Bihan
geometry: margin=2cm
fontsize: 11pt
classoption: fleqn
urlcolor: blue
---

# Installation de l'environnement

```bash
wget https://download.geofabrik.de/europe/france/midi-pyrenees-latest-free.shp.zip
wget https://www.data.gouv.fr/fr/datasets/contours-des-departements-francais-issus-d-openstreetmap/
wget https://www.data.gouv.fr/fr/datasets/decoupage-administratif-communal-francais-issu-d-openstreetmap/
```

结果:

在此处输入图片描述

请注意,当您从 pdf 复制代码时,换行符也会被复制,这意味着您无法将其直接粘贴到终端中,也就是说,您首先需要通过将其粘贴到文本编辑器窗口中来删除换行符。但是,我认为 pdf 输出无法避免这种情况。

答案2

fvextrav1.5 (2022/11/30) 添加了在组内插入换行符的新选项breaknonspaceingroup。这可用于在 Pandoc 的标记宏中启用换行符。

---
header-includes:
- |
  ```{=latex}
  \usepackage{fvextra}
  \DefineVerbatimEnvironment{Highlighting}{Verbatim}{
    commandchars=\\\{\},
    breaklines, breaknonspaceingroup, breakanywhere}
  ```
---

换行示例

相关内容