在 中制作带圆角的彩色框的最简单方法是什么luatex
?xelatex
我用过pstricks
,很简单,但用luatex
不起作用。
答案1
最简单的方法是使用框架或者彩色盒子包(例如tcolorbox
:http://ctan.org/tex-archive/macros/latex/contrib/tcolorbox) 包,使用TikZ
。您可以集成Lua按照以下 MWE 示例,它使用这两个包。它还运行代码并排版示例。请确保您拥有所有版本的最新版本并以 LuaLaTeX 运行(tcolorbox 最近已更新)。
我使用了另一篇文章中的相同基本代码如何使用 LuaLaTeX 在表格中产生垂直空白?,我今晚发布了。还请查看有关unframed
盒子的帖子(它们对我来说看起来更好)。
\documentclass{book}
\usepackage[listings]{tcolorbox}
\lstloadlanguages{[LaTeX]TeX, [primitive]TeX,Pascal}
\usepackage{filecontents}
\usepackage[framemethod=TikZ]{mdframed}
\usepackage{amsmath}
\usepackage{luacode} % loads luatexbase as well
\newcommand\emphasis[2][blue]{\lstset{emph={exec,if,then,else,do,end,while,for,print,sprint,directlua,#2},
emphstyle={\ttfamily\textcolor{#1}}}}%
\lstset{language={[LaTeX]TeX},
stepnumber=1,numbersep=5pt,
numberstyle={\footnotesize\color{gray}},%firstnumber=last,
breaklines=true,
framesep=5pt,
basicstyle=\small\ttfamily,
showstringspaces=false,
keywordstyle=\ttfamily\textcolor{blue},
stringstyle=\color{orange},
commentstyle=\color{black},
rulecolor=\color{gray!10},
breakatwhitespace=true,
showspaces=false, % shows spacing symbol
backgroundcolor=\color{gray!15}}
\makeatother
\begin{document}
\emphasis{return,repeat,until,function,local}
\begin{tcblisting}{}
\begin{luacode}
-- example adapted from
-- http://rosettacode.org/wiki/Happy_numbers
function boxit(color, var, s)
zz="\\mdframed[roundcorner=3pt, leftmargin=2cm,innertopmargin=0pt,innerbottommargin=0pt, innerleftmargin=0pt,innerrightmargin=0pt, innerlinewidth=0pt, middlelinewidth=0pt,outerlinewidth=1pt, outerlinecolor=red]"..var.."\\endmdframed"
return zz
end
function digits(n)
if n > 0 then return n \% 10, digits(math.floor(n/10)) end
end
function sumsq(a, ...)
return a and a ^ 2 + sumsq(...) or 0
end
local happy = setmetatable({true, false, false, false}, {
__index = function(self, n)
self[n] = self[sumsq(digits(n))]
return self[n]
end } )
i, j = 0, 8
repeat
i, j = happy[j] and (tex.sprint(boxit(violet, j, " ")) or i+1) or i, j + 1
until i == 17 --or j > 999
\end{luacode}
\end{tcblisting}
\end{document}