Markdown 包含水平规则时的“生成 PDF 错误”:--- 或 ***

JV5*_*V53 3 markdown latex miktex pdflatex pandoc

当我的 Markdown 文件包含水平规则 --- 或 *** 我收到关于 \Linethickness -> \Protect 的错误

我知道 MiKTeX 最近出现了问题,但是我不确定它们是否适用于此。

从昨天早上开始,我就一直在遇到这个问题,当时我正在尝试让 Lato 字体包与一组我需要转换为 PDF 的 Markdown 文件一起使用。它一直工作正常(除了字体问题)。

这可能发生在我更新 MiKTeX 时,虽然当时我没有意识到可能是这种情况,因为我也在玩模板、YAML、PS 脚本等。

从那时起,我一直在阅读有关 MiKTeX 的问题,并尝试了进一步的更新、更新包数据库、构建格式、刷新文件名数据库以及卸载和重新安装。我已经阅读了GitHub评论部分的背景,但那里的建议似乎并没有为我解决这个问题,而他们为其他人解决了这个问题。

这让我怀疑这是否相关,但我对 Tex、Markdown 等比较陌生。

原始文件更长更复杂,但是这个 Markdown

# Sample File
Test Test Test

---
Run Code Online (Sandbox Code Playgroud)

产生同样的错误

Error producing PDF.
! Missing number, treated as zero.
<to be read again>
                   \protect
\linethickness ->\protect
                          \linethickness
\setlength #1#2->#1 #2
                      \relax
\@rule ...@tempdimb {#2}\setlength \@tempdimc {#3}
                                                  \advance \@tempdimc \@temp...
l.362 ...nter}\rule{0.5\linewidth}{\linethickness}
Run Code Online (Sandbox Code Playgroud)

删除 --- 允许在上面的示例和我更复杂的 Markdown 文件中生成 pdf,即使使用模板也是如此。

我不确定 linethickness 是否在图形包内,当我查看包信息时,我看不到任何明显表明它的内容。

我会简单地删除有问题的行,但它们会在整个降价文件的其余部分中使用,如果可能的话,我更愿意在您的帮助下找到修复程序!请你让我知道我是否在最近的 MiKTeX 问题上咆哮了错误的树,如果没有,我可能会出错。提前谢谢了。

更新:我运行了这个命令

pandoc -s sample.md -o sample.tex
Run Code Online (Sandbox Code Playgroud)

产生这个tex:

% Options for packages loaded elsewhere
\PassOptionsToPackage{unicode}{hyperref}
\PassOptionsToPackage{hyphens}{url}
%
\documentclass[
]{article}
\usepackage{lmodern}
\usepackage{amssymb,amsmath}
\usepackage{ifxetex,ifluatex}
\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
  \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{
  hidelinks,
  pdfcreator={LaTeX via pandoc}}
\urlstyle{same} % disable monospaced font for URLs
\usepackage[margin=1cm]{geometry}
\setlength{\emergencystretch}{3em} % prevent overfull lines
\providecommand{\tightlist}{%
  \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
\setcounter{secnumdepth}{-\maxdimen} % remove section numbering

\date{}

\begin{document}

\setcounter{errorcontextlines}{40}

\hypertarget{sample-file}{%
\section{Sample File}\label{sample-file}}

Test Test Test

\begin{center}\rule{0.5\linewidth}{\linethickness}\end{center}

\end{document}
Run Code Online (Sandbox Code Playgroud)

小智 5

同时,我尝试了这个(在最新的 RStudio Debian 安装中以 root 身份):

~# sed 's,\\linethickness,0.5000000000pt,g' < pandoc/pandoc > /usr/lib/rstudio-server/bin/pandoc/pandoc
Run Code Online (Sandbox Code Playgroud)

其中第一个 pandoc/pandoc 是包中原始文件的副本。这保持相同的字符串长度和有效数字,以便二进制不会中断。这将 hrule 写为:

\begin{center}\rule{0.5\linewidth}{0.5000000000pt}\end{center}
Run Code Online (Sandbox Code Playgroud)

和 MiKTeX 似乎没问题(至少 TeXworks 编译了 pdf)。

再见