
Ich habe eine kombinierte LaTeX/Markdown-Frage und hoffe, dass jemand sie beantworten kann.
Ich verwende Markdown für alle meine Texte, greife aber auch stark auf die Eisvogel-Vorlage zurück. Ich konnte mehrere sehr schöne funktionale LaTeX-Modifikationen in Markdown aktivieren.
Derzeit verwende ich das LaTeX Awesomebox-Paket und die FontAwesome5-Symbole in meinen Markdown-Dokumenten. Ich versuche jedoch, dies vielen meiner Entwicklerkollegen, die LaTeX nicht kennen, einfacher zu machen.
Derzeit mache ich Folgendes in Markdown, um benutzerdefinierte Frage- und Antwortblöcke anzuzeigen:
\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.}
Um sicherzustellen, dass dies funktioniert, habe ich in der Eisvogel-Vorlage Folgendes getan:
% Enable awesomebox and fontawesome5 icons for callouts
\usepackage{awesomebox}
\usepackage{fontawesome5}
\usepackage{verbatim}
Meine Markdown-Datei generiert die Symbole und Verwaltungsblöcke so, wie ich sie haben möchte: ein rotes Fragezeichen für die Frage und eine grüne Glühbirne für die Antwort, gefolgt vom erforderlichen Text.
Dies ist jedoch für einige Entwickler, die nur Markdown bevorzugen, zu kompliziert. Sie sind bereit, die folgende Konvention zur Anzeige von Code zu verwenden:
::: code
This is a block of code
:::
Außerdem habe ich in Eisvogel mithilfe des Pakets tcolorbox mehrere andere Callout-Boxen folgendermaßen angepasst:
% 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:}}
Meine Frage ist:
Ist es möglich, das gesamte \awesomebox[blah]-Skript in die Eisvogel-Vorlage zu portieren? Können meine Benutzer die Konvention mit drei Doppelpunkten oder etwas Ähnliches verwenden, um benutzerdefinierte Symbole in ihrem grundlegenden Markdown zu verwenden?
Ich möchte es Benutzern einfacher machen, ihre Fragen und Antworten hinzuzufügen, ohne dass sie mehr über LaTeX lernen müssen.
Irgendwelche Ideen? Vielen Dank im Voraus. Gerne stelle ich Beispielanpassungen aus meiner angepassten Eisvogel-Vorlage zur Verfügung.
Antwort1
Ich habe mein Problem gelöst.
Wie ich in meinem ursprünglichen Beitrag erwähnt habe, wollte ich den Markdown-Code anpassen, um die Menge des angezeigten LaTeX-Codes zu begrenzen. So habe ich dieses Problem gelöst:
Fügen Sie innerhalb der Eisvogel-Vorlage ( eisvogel.tex
) die folgenden Zeilen irgendwo im Code hinzu. Ich habe meine Zeilen um Zeile 690 herum hinzugefügt.
%% Testing newcommands, question and answers
\newcommand{\question}[1]{\awesomebox[maroon]{2pt}{\faQuestionCircle}{maroon}{#1}}
\newcommand{\answer}[1]{\awesomebox[brandgreen]{2pt}{\faLightbulb}{brandgreen}{#1}}
Im Grunde haben wir den Code aus Markdown verschoben und in Eisvogel platziert. Wir haben zwei neue Befehle erstellt und sie \question
und genannt \answer
. Beachten Sie den vorangestellten Schrägstrich.
So werden wir sie in Markdown verwenden. Wir erstellen den neuen Befehl mit den folgenden Definitionen:
\newcommand{cmd}[args]{def}
\renewcommand{cmd}[args]{def}
- Der Befehlsname ist
\question
oder\answer
. - Es gibt nur ein einziges Argument, oder
[1]
, das wie eine Benutzereingabe funktioniert. - Die Definition ist die Zeichenfolge des LaTeX-Codes.
- Das Argument „or“
#1
wird am Ende hinzugefügt und fungiert als Eingabe des Benutzers in der Markdown-Datei.
Wechseln Sie als Nächstes zur Markdown-Datei und formulieren Sie Ihre Fragen und Antworten folgendermaßen:
\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.}
Beachten Sie die Verwendung von LaTeX-Tags, um die Fragen fett und die Flags als TrueType darzustellen.
Erstellen Sie als Nächstes die Datei wie gewohnt.
Hier ist ein Beispiel der Ausgabe:
Zusatzfrage:
Wenn jemand einen noch einfacheren Weg kennt, dies zu tun und noch mehr LaTeX-Code aus Markdown zu entfernen, wäre ich dankbar. Tatsächlich wäre etwas wie das Folgende perfekt für meine Entwickler:
::: question
Question: What color is the sky?
:::
::: answer
Answer: The sky is blue.
:::
Die drei Doppelpunkte und die Fragevariable würden durch das rote Fragezeichensymbol und den vertikalen roten Balken rechts davon ersetzt. Ebenso würde bei den drei Doppelpunkten und der Antwort die grüne Glühbirne erscheinen.
Auf diese Weise kann ich den gesamten LaTeX-Code aus Markdown entfernen und die Vorlage pandoc-latex-environment verwenden. Ich habe mir die Syntax für diesen Filter angesehen, befürchte aber, dass ich etwas übersehe.
Danke.
Antwort2
Zu Ihrer Folgefrage: Ich habe ein kleines Lua-Skript für Pandoc erstellt:
--[[
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
Sie können Ihre eigenen Typen definieren, indem Sie sie zur Warnliste im Skript hinzufügen und im header-includes
Abschnitt definieren (siehe das Beispiel für question
).