将 lstinline 的样式与序言中的列表分开吗?

将 lstinline 的样式与序言中的列表分开吗?

我使用pandoc,因此我能应用的 tex hack 有点受限。但是,这里有一个例子:我test.md在 pandoc Markdown 中有这个文档:

---
listings: true    # see also https://stackoverflow.com/q/67106641
title: "Some title here"
author: John Doe
date: \today
header-includes: |
  \lstset{% for listings
    basicstyle=\scriptsize\ttfamily,
    breaklines=true,
  }
---

# Introduction

Here is some code output, obtained with the `devcon.exe` command line tool:

```
PCI\VEN_8086&DEV_A295&SUBSYS_36E217AA&REV_F0\3&11583659&0&E0
    Name: Intel(R) 200 Series Chipset Family PCI Express Root Port #6 - A295
    Driver is running.
PCI\VEN_8086&DEV_5912&SUBSYS_36E217AA&REV_04\3&11583659&0&10
    Name: Intel(R) HD Graphics 630
    Driver is running.
ACPI\ACPI000C\2&DABA3FF&1
    Name: ACPI Processor Aggregator
    Driver is running.
ACPI\GENUINEINTEL_-_INTEL64_FAMILY_6_MODEL_158_-_INTEL(R)_CORE(TM)_I7-7700T_CPU_@_2.90GHZ\_1
    Name: Intel(R) Core(TM) i7-7700T CPU @ 2.90GHz
    Driver is running.
```

So ...

使用 转换为 Latex pandoc test.md --listings -s -o test.tex,我得到:

% Options for packages loaded elsewhere
\PassOptionsToPackage{unicode}{hyperref}
\PassOptionsToPackage{hyphens}{url}
%
\documentclass[
]{article}
\usepackage{amsmath,amssymb}
\usepackage{lmodern}
\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{
  pdftitle={Some title here},
  pdfauthor={John Doe},
  hidelinks,
  pdfcreator={LaTeX via pandoc}}
\urlstyle{same} % disable monospaced font for URLs
\usepackage{listings}
\newcommand{\passthrough}[1]{#1}
\lstset{defaultdialect=[5.3]Lua}
\lstset{defaultdialect=[x86masm]Assembler}
\setlength{\emergencystretch}{3em} % prevent overfull lines
\providecommand{\tightlist}{%
  \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
\setcounter{secnumdepth}{-\maxdimen} % remove section numbering
\lstset{% for listings
  basicstyle=\scriptsize\ttfamily,
  breaklines=true,
}
\ifluatex
  \usepackage{selnolig}  % disable illegal ligatures
\fi

\title{Some title here}
\author{John Doe}
\date{\today}

\begin{document}
\maketitle

\hypertarget{introduction}{%
\section{Introduction}\label{introduction}}

Here is some code output, obtained with the
\passthrough{\lstinline!devcon.exe!} command line tool:

\begin{lstlisting}
PCI\VEN_8086&DEV_A295&SUBSYS_36E217AA&REV_F0\3&11583659&0&E0
    Name: Intel(R) 200 Series Chipset Family PCI Express Root Port #6 - A295
    Driver is running.
PCI\VEN_8086&DEV_5912&SUBSYS_36E217AA&REV_04\3&11583659&0&10
    Name: Intel(R) HD Graphics 630
    Driver is running.
ACPI\ACPI000C\2&DABA3FF&1
    Name: ACPI Processor Aggregator
    Driver is running.
ACPI\GENUINEINTEL_-_INTEL64_FAMILY_6_MODEL_158_-_INTEL(R)_CORE(TM)_I7-7700T_CPU_@_2.90GHZ\_1
    Name: Intel(R) Core(TM) i7-7700T CPU @ 2.90GHz
    Driver is running.
\end{lstlisting}

So \ldots{}

\end{document}

最后,使用 获得的 PDF 输出pandoc test.md --listings -o test.pdf如下所示:

pdf 输出

因此,我得到了小字体大小的主要列表\scriptsize,这正是我想要的 - 但是,现在也用于内联电传打字机/代码,因此内联代码pandoc\lstinline字体太小了,我可不想要这个。

相反,我希望\lstinline样式保留正常大小的电传打字字体,并且{lstlisting}默认使用小(脚本)大小的电传打字字体的环境。

有没有什么方法可以实现这一点,仅通过在 Latex 序言中设置选项即可(因为这几乎是我使用 pandoc 的唯一选项,使用header-includesYAML 序言中的指令)?

答案1

好的,似乎有一个解决方案 - 使用时listingspandoc可以向代码围栏添加属性``` {style=...},这最终会成为{lstlisting}环境的选项。然后基本上我可以保留字体大小方面的全局样式,并listings为需要的小字体大小的代码列表定义一个样式(这与尽管定义和使用不同的语言,但所有列表的样式都相同

这可以应用于 OPtest.md示例:

---
listings: true    # see also https://stackoverflow.com/q/67106641 ; still have to use --listings from the cmdline as well
title: "Some title here"
author: John Doe
date: \today
header-includes: |
  ```{=latex}
  % note that in pandoc, without a code block for latex, all of the lines in header-includes are interpreted as Markdown (so % at start of line is escaped \%, and # at start of line becomes \section)!
  % since \lstset is global, do not change font size here, change in separate style
  \lstset{% for listings
    basicstyle=\ttfamily,
    breaklines=true,
  }
  \lstdefinestyle{lstsmaller}{basicstyle=\scriptsize\ttfamily}
  ```
---

# Introduction

Here is some code output, obtained with the `devcon.exe` command line tool:

<!-- classes: {.numberLines} becomes \begin{lstlisting}[numbers=left], {.haskell} becomes \begin{lstlisting}[language=Haskell], rest is ignored; however {language=test} becomes \begin{lstlisting}[language=test] and {style=blahblah} becomes \begin{lstlisting}[style=blahblah] ; so then can use \lstdefinestyle  -->
<!-- https://stackoverflow.com/q/26549233 ; https://tex.stackexchange.com/q/448456 ; https://stackoverflow.com/q/27000906 ; https://tex.stackexchange.com/q/557548 ; https://tex.stackexchange.com/q/25471 -->


``` {style=lstsmaller}
PCI\VEN_8086&DEV_A295&SUBSYS_36E217AA&REV_F0\3&11583659&0&E0
    Name: Intel(R) 200 Series Chipset Family PCI Express Root Port #6 - A295
    Driver is running.
PCI\VEN_8086&DEV_5912&SUBSYS_36E217AA&REV_04\3&11583659&0&10
    Name: Intel(R) HD Graphics 630
    Driver is running.
ACPI\ACPI000C\2&DABA3FF&1
    Name: ACPI Processor Aggregator
    Driver is running.
ACPI\GENUINEINTEL_-_INTEL64_FAMILY_6_MODEL_158_-_INTEL(R)_CORE(TM)_I7-7700T_CPU_@_2.90GHZ\_1
    Name: Intel(R) Core(TM) i7-7700T CPU @ 2.90GHz
    Driver is running.
```

So ...

...并使用以下方法处理pandoc test.md --listings -o test.pdf结果:

pdf 输出

...这就是我想要的。

编辑:这是在 pandoc 2.11.4 上

相关内容