
我有一個 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
)。