將 LaTeX 程式碼從 Markdown 遷移到 Eisvogel

將 LaTeX 程式碼從 Markdown 遷移到 Eisvogel

我有一個 LaTeX/Markdown 組合問題希望有人能回答。

我所有的寫作都使用 Markdown,但我也非常傾向於 Eisvogel 模板。我已經能夠對 Markdown 進行一些非常好的功能性 LaTeX 修改。

目前,我在 Markdown 文件中使用 LaTeX Awesomebox 套件和 FontAwesome5 圖示。然而,我試圖讓許多不懂 LaTeX 的開發人員同事更容易做到這一點。

目前,我在 Markdown 中執行以下操作來顯示自訂問題和答案區塊:

\awesomebox[maroon]{2pt}{\faQuestionCircle}{maroon}{\textbf{Question:} How do you do the thing?}

\awesomebox[brandgreen]{2pt}{\faLightbulb}{brandgreen}{\textbf{Answer:} You do the thing this way.}

我在 Eisvogel 模板中執行了以下操作以確保其有效:

% Enable awesomebox and fontawesome5 icons for callouts
\usepackage{awesomebox}
\usepackage{fontawesome5}
\usepackage{verbatim}

我的 Markdown 文件按照我想要的方式產生圖示和管理區塊;紅色問號代表問題,綠色燈泡代表答案,後面是必要的文字。

然而,對於一些只喜歡 Markdown 的開發人員來說,這太複雜了。他們願意使用以下約定來顯示程式碼:

::: code
This is a block of code
:::

我還在 Eisvogel 中使用 tcolorbox 包按以下方式自訂了其他幾個標註框:

% tcolorbox
\usepackage{tcolorbox}
\newtcolorbox{norm-box}{colback=gray!5!white,arc=0pt,outer arc=0pt,colframe=gray!60!black}
\newtcolorbox{info-box}{colback=cyan!5!white,arc=0pt,outer arc=0pt,colframe=cyan!60!black}
\newtcolorbox{warn-box}{colback=orange!5!white,arc=0pt,outer arc=0pt,colframe=orange!80!black}
\newtcolorbox{error-box}{colback=red!5!white,arc=0pt,outer arc=0pt,colframe=red!75!black}
\newtcolorbox{attn-box}{colback=green!5!white,arc=0pt,outer arc=0pt,colframe=green!75!black}
\newtcolorbox{code-box}{colback=codeblock!100!white,arc=0pt,outer arc=0pt,colframe=gray!0!white}
\newtcolorbox{learn-box}{colback=blue!5!white,arc=0pt,outer arc=0pt,colframe=blue!40!black,title=\textbf{Objectives:}}
\newtcolorbox{scenario-box}{colback=orange!5!white,arc=0pt,outer arc=0pt,colframe=orange!80!black,title=\textbf{Scenario:}}
\newtcolorbox{outline-box}{colback=cyan!5!white,arc=0pt,outer arc=0pt,colframe=cyan!60!black,title=\textbf{Outline:}}
\newtcolorbox{prereqs-box}{colback=red!5!white,arc=0pt,outer arc=0pt,colframe=red!60!black,title=\textbf{Prerequisites:}}
\newtcolorbox{labtime-box}{colback=yellow!5!white,arc=0pt,outer arc=0pt,colframe=yellow!60!black,title=\textbf{Lab:}}

我的問題是:

是否可以將整個 \awesomebox[blah] 腳本移植到 Eisvogel 模板中?我的使用者可以使用三冒號約定或類似於在基本 Markdown 中使用自訂圖示的方式嗎?

我想讓用戶更輕鬆地添加他們的問題和答案,而無需學習更多的 LaTeX。

有任何想法嗎?提前致謝。很高興提供我的自訂 Eisvogel 範本中的 cvustomizations 範例。

答案1

我解決了我的問題。

就像我在原來的帖子中提到的,我想自訂 Markdown 程式碼以限制出現的 LaTeX 程式碼的數量。以下是我為解決此問題所做的操作:

在 Eisvogel 範本 ( eisvogel.tex) 中,在程式碼中的某個位置新增下列行。我在第 690 行附近新增了我的行。

%% Testing newcommands, question and answers
\newcommand{\question}[1]{\awesomebox[maroon]{2pt}{\faQuestionCircle}{maroon}{#1}}
\newcommand{\answer}[1]{\awesomebox[brandgreen]{2pt}{\faLightbulb}{brandgreen}{#1}}

基本上,我們已將程式碼從 Markdown 移出並放置在 Eisvogel 中。我們創建了兩個新命令,並將它們稱為\question\answer。請注意前面的正斜線。

這就是我們在 Markdown 中使用它們的方式。我們使用以下定義建立新命令:

\newcommand{cmd}[args]{def}
\renewcommand{cmd}[args]{def}
  • 命令名稱是\question\answer
  • 只有一個參數 or [1],其作用類似使用者的輸入。
  • 定義是 LaTeX 程式碼的字串。
  • 參數 or#1添加到末尾並充當 Markdown 文件中使用者的輸入。

接下來,請前往 Markdown 文件,並以以下方式建立您的問題和答案:

\question{\textbf{Question:} What flags in the output state what virtualization support is
available on this server?}

\answer{\textbf{Answer:} Multiple flags show up: \texttt{Virtualization: VT-x}, \texttt{Hypervisor
vendor: KVM}, and \texttt{Virtualization type: full}. These flags provide information about the
type of virtualization support available on this server.}

請注意使用 LaTeX 標籤將問題加粗並將標記設為 true 類型。

接下來,像平常一樣建立文件。

以下是輸出的範例:

問答截圖

後續問題:

如果有人知道一種更簡單的方法來做到這一點並從 Markdown 中刪除更多 LaTeX 程式碼,我將不勝感激。事實上,像下面這樣的東西對我的開發人員來說是完美的:

::: question
Question: What color is the sky?
:::

::: answer
Answer: The sky is blue.
:::

三重冒號和問題變數將替換為紅色問號圖示及其右側的垂直紅色條。同樣,對於三個冒號,答案將是綠色燈泡。

這樣我就可以從 markdown 中刪除所有 LaTeX 程式碼並使用 pandoc-latex-environment 模板。我已經查看了這個過濾器的語法,但擔心我遺漏了一些東西。

謝謝。

答案2

對於您的後續問題 - 我為 pandoc 製作了一個小型 Lua 腳本:

--[[
admonition boxes, e.g:

::: warning
:::

awesomebox package supports 'note', 'tip', 'warning', 'caution', 'important'
other custom types have to be defined in header-includes (see below)

header-includes:
    # enable parsing markdown in custom environment:
    # (e.g. use \Begin{admonition} ... \End{admonition})
    # --------------------------------------------------------------------------
    - \let\Begin\begin
    - \let\End\end
    #
    # custom environment for admonition boxes:
    # --------------------------------------------------------------------------
    - \usepackage{awesomebox}
    #
    - \newenvironment{questionblock}
        {\begin{awesomeblock}[orange]{2pt}{\faQuestionCircle}{orange}}
        {\end{awesomeblock}}
]]

local admonitions = pandoc.List:new {'note', 'tip', 'warning', 'caution', 'important', 'question'}

function Div(elem)
  local adm = elem.classes[1]

  if admonitions:includes(adm) then
    return {
      pandoc.RawBlock("latex", "\\Begin{" .. adm .. "block}"),
      elem,
      -- \setlength{\parskip}{-1em} to gobble the extra newline before End
      pandoc.RawBlock("latex", "\\setlength{\\parskip}{-1em}\n\\End{" .. adm .. "block}")
    }
  end
end

您可以定義您自己的類型,方法是將它們新增至腳本中的警告清單並在header-includes部分中定義它們(請參閱 的範例question​​)。

相關內容