Markdown から Eisvogel への LaTeX コードの移行

Markdown から Eisvogel への LaTeX コードの移行

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 テンプレートからカスタマイズ例を提供させていただきます。

答え1

問題は解決しました。

元の投稿で述べたように、表示される LaTeX コードの量を制限するために Markdown コードをカスタマイズしたいと考えていました。これを解決するために私が行ったことは次のとおりです。

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 に配置しました。2 つの新しいコマンドを作成し、 と\questionと名付けました\answer。先頭のスラッシュに注意してください。

Markdown ではこのように使用します。次の定義を使用して新しいコマンドを作成します。

\newcommand{cmd}[args]{def}
\renewcommand{cmd}[args]{def}
  • コマンド名は\questionまたは です\answer
  • 引数は または の 1 つだけであり[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.}

質問を太字にし、フラグを TrueType として表示するために LaTeX タグを使用していることに注意してください。

次に、通常どおりにファイルをビルドします。

出力の例を次に示します。

Q&Aスクリーンショット

フォローアップの質問:

これをさらに簡単に実行し、Markdown からさらに多くの LaTeX コードを削除する方法をご存知の方がいらっしゃいましたら、ぜひ教えてください。実際、次のようなものが私の開発者には最適です。

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

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

3 つのコロンおよび疑問符の変数は、赤い疑問符アイコンとその右側の赤い縦棒に置き換えられます。同様に、3 つのコロンおよび答えは緑の電球になります。

この方法では、マークダウンからすべての 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)。

関連情報