假设我有一个为phpBB论坛,与大胆的,颜色和强调文本代码,如下所示(请注意,其中有一些基本的 LaTeX 代码):
[size=150][b]Chapitre 4. La cinématique du mouvement rectiligne (le long d'un seul axe)[/b][/size]
Toutes les définitions et formules suivantes doivent être connues et comprises en détails par les élèves du cours de mise à niveau.
[b][color=#BF0000]Définition :[/color][/b] La [b][u]cinématique[/u][/b] est la partie de la physique qui cherche à [u]décrire le mouvement des corps[/u], sans chercher à expliquer le mouvement. La cinématique fait appel à la [u]position instantanée[/u] [latex]x(t)[/latex] (position à l'instant [latex]t[/latex]), la [u]vitesse moyenne[/u] [latex]v_{x \, \text{moy}}[/latex] (moyenne entre deux instants), la [u]vitesse instantanée[/u] [latex]v_x(t)[/latex] (vitesse exacte à l'instant [latex]t[/latex]), l'[u]accélération instantanée[/u] [latex]a_x(t)[/latex] et l'[u]accélération moyenne[/u] [latex]a_{x \, \text{moy}}[/latex].
是否可以将代码直接复制并粘贴到 LaTeX 文档中,让 LaTeX 自动识别各种 [/]...[] 并将它们编译为普通的粗体、颜色和下划线命令?如果告诉 LaTeX 如何自动执行此操作太麻烦,我唯一的选择就是进行各种搜索/替换,这很容易,但对于许多phpBB代码...
答案1
使用 LuaLaTeX 时,你可以使用,尽管这有点复杂(我不知道 phpBB 标记语言,但我猜你知道,所以……)。我pgfkeys
也使用过,因为它可以轻松处理成对key=value
。这是一个概念证明
%!TEX program = lualatex
\documentclass{article}
\usepackage[margin=2.5cm]{geometry}
\usepackage{luacode}
%Underlines
\usepackage[soul]{lua-ul}
%For HTML color support
\usepackage{xcolor}
%For \text{}
\usepackage{amsmath}
\usepackage{pgfkeys}
%If you need more options, you can add them to pgfkeys
%Sorry, the font size (in points) was too large,
%So I scaled it
\pgfkeys{/phpbb/size/.code=\fontsize{\directlua{tex.sprint(#1/6)}pt}{\directlua{tex.sprint(#1/5)}pt}}
\pgfkeys{/phpbb/color/.code=\color[HTML]{#1}}
\def\phpbb[#1]{\pgfkeys{/phpbb/#1}}
\begin{luacode*}
function phpbb(str)
str = string.gsub(str, "%[color=#", "{\\phpbb[color=")
str = string.gsub(str, "%[latex%]", "$")
str = string.gsub(str, "%[/latex%]", "$")
str = string.gsub(str, "%[b%]", "\\textbf{")
str = string.gsub(str, "%[/b%]", "}")
str = string.gsub(str, "%[u%]", "\\ul{")
str = string.gsub(str, "%[/u%]", "}")
str = string.gsub(str, "%[size=", "{\\phpbb[size=")
str = string.gsub(str, "%[/size%]", "}")
str = string.gsub(str, "%[/color%]", "}")
return str
end
\end{luacode*}
\newcommand{\startphpbb}{\directlua{luatexbase.add_to_callback("process_input_buffer", phpbb , "phpbb" )}}
\newcommand{\stopphpbb}{\directlua{luatexbase.remove_from_callback("process_input_buffer", "phpbb" )}}
\begin{document}
\startphpbb
[size=150][b]Chapitre 4. La cinématique du mouvement rectiligne (le long d'un seul axe)[/b][/size]
Toutes les définitions et formules suivantes doivent être connues et comprises en détails par les élèves du cours de mise à niveau.
[b][color=#BF0000]Définition :[/color][/b] La [b][u]cinématique[/u][/b] est la partie de la physique qui cherche à [u]décrire le mouvement des corps[/u], sans chercher à expliquer le mouvement. La cinématique fait appel à la [u]position instantanée[/u] [latex]x(t)[/latex] (position à l'instant [latex]t[/latex]), la [u]vitesse moyenne[/u] [latex]v_{x \, \text{moy}}[/latex] (moyenne entre deux instants), la [u]vitesse instantanée[/u] [latex]v_x(t)[/latex] (vitesse exacte à l'instant [latex]t[/latex]), l'[u]accélération instantanée[/u] [latex]a_x(t)[/latex] et l'[u]accélération moyenne[/u] [latex]a_{x \, \text{moy}}[/latex].
\stopphpbb
\end{document}