• 新鲜事
  • 漂亮的 LaTeX 书籍模版 ElegantBook

1 个月 后
5 天 后

Cloud2016 看样子,ElegantBook 的模版中应该是调用了LaTeX tcolorbox 宏包. 该宏包可以设置各种漂亮个block 风格。比如背景颜色,边框颜色,titlebox的位置等等。不知道这个信息是否有用。

9 个月 后

Cloud2016 关于elegantbook的问题,LaTeX 编译不过,主要是因为,bookdown 会在preamble 最后自动添加amsthm的定理环境定义。这个仅靠模板似乎不能解决。一个解决办法是用bookdown.post.latex。具体来说就是在index.Rmd 开头家上下面的设置

```{r remove_amsthm,  include=FALSE}
options(bookdown.post.latex = function(x) {
    from <- grep("usepackage\\{amsthm\\}", x)
    to <- grep("newtheorem\\*\\{solution", x)
    x <- x[-c(from:to)]
  })
```

效果可以参看 agfun.netlify.com.

    18 天 后

    Fye 我把你仓库里的 bookdown.post.latex 抄进我的项目里了 https://github.com/XiangyunHuang/ElegantBookdown/blob/master/.Rprofile#L12

    最近重构了一下,项目 ElegantBookdown 里比较得意的地方就是没有依赖自定义的 LaTeX 模版了,仅用 Pandoc 2.9.2 内建的模版,所以一下子感觉清爽了。 CSS 这块还没想好要什么风格的,以后有时间再搞一下

    • Fye 回复了此帖
    • Fye 觉得很赞

      @yihui @Fye @dapengde 自 2019年4月开帖至今,刚好过去差不多一年的时间,终于把这事给告一段落了 🎉 LaTeX 部分已经完成,完全没有自定义 Pandoc LaTeX 模版,一来担心增加维护成本,二来现在的 Pandoc 内建的 LaTeX 模版功能很丰富,三来 ElegantBook 本身功能定义非常完整,所以最好不搞 patch。送两张截图

      elegantbookdown-page-4

      elegantbookdown-page-5

      Cloud2016 我没有注意到,原来模板试不需要的。这样就更方便了。你要的几个css 块的LaTeX,我有。CSS我没有太在意,从@yihui 那里抄了几个,自己有改造了一下,花了些时间找自由版权的图片。🙂

      \usepackage{tcolorbox}
      
      \tcbset{
      	noparskip/.style={before={\pagebreak[0]\parskip=0pt\parindent=0pt}},
      	before skip=-\baselineskip,
          box align=top,
          enhanced,
          breakable,
          left=0pt,
          right=0pt,
          top=2pt,
          bottom=2pt,
          opacityframe=0,
          opacitybacktitle=0.5,
          width=\dimexpr\textwidth\relax,
          enlarge left by=0mm,
      }
      
      \makeatletter
      
      \ifdefstring{\ELEGANT@lang}{cn}{
      \newcommand{\rmdnotename}{注意}
      \newcommand{\tipname}{提示}
      \newcommand{\warnname}{警告}
      \newcommand{\thinkname}{思考}
      }{\relax}
      
      \ifdefstring{\ELEGANT@lang}{en}{
        \setlength\parindent{2em}
        \newcommand{\rmdnotename}{Note}
        \newcommand{\tipname}{Tips}
        \newcommand{\warnname}{Warning}
        \newcommand{\thinkname}{Think}
      }{\relax}
      
      \makeatother
      
      \newenvironment{rmdnote}{
      	\vspace*{0.5\baselineskip}
          \par\noindent
          \makebox[-3pt][r]{\color{red!90}\size{8}{\textdbend}\,\,}
          \begin{tcolorbox}[
          title={\textbf{\color{second}\rmdnotename}},
          title style={left color=blue!10!green!20!white,right color=yellow!20!blue!20!white},
          colback=red!10!white,
          ]
          \itshape
      }{
          \end{tcolorbox}
          \par\ignorespacesafterend
      }
      
      \newenvironment{rmdtip}{
      	\vspace*{0.5\baselineskip}
      	\par\noindent
      	\makebox[-3pt][r]{\color{red!90}\size{12}{\HandRight}\,\,}
          \begin{tcolorbox}[
          enhanced,
          title={\textbf{\color{second}\tipname}},
          title style={left color=blue!10!green!20!white,right color=yellow!20!blue!20!white},
          colback=cyan!10!white,
          ]
          \sffamily
      }{
          \end{tcolorbox}
          \par\ignorespacesafterend
      }
      
      \newenvironment{rmdthink}{
      	\vspace*{0.5\baselineskip}
      	\par\noindent
      	\makebox[-4pt][r]{\color{green!90}\size{12}{\faLightbulbO}\,\,}
          \begin{tcolorbox}[
          enhanced,
          title={\textbf{\color{second}\thinkname}},
          title style={left color=blue!10!green!20!white,right color=yellow!20!blue!20!white},
          colback=green!20!white,
          ]
          \sffamily
      }{
          \end{tcolorbox}
      	\par\ignorespacesafterend
      }
      .rmdnote, .rmdtip, .rmdthink{
          padding: 1em 1em 1em 4em;
          margin-bottom: 10px;
      }
      
      .rmdnote {
          background: #f5ead8 5px center/3em no-repeat;
          background-image: url("../figs/note.png");
      }
      .rmdtip {
          background: #88c1f0 5px center/3em no-repeat;
          background-image: url("../figs/tip.png");
      }
      .rmdthink {
          background: #96f5f8 5px center/3em no-repeat;
          background-image: url("../figs/thinking.png");
      }

        Cloud2016 不用template 唯一不方便的就是,logo,cover 等属于elegantbook自定义的信息需要放在到preamble里面。不过可能也并不算坏。

        5 天 后

        Fye

        1. 你给的这个相当复杂,我得想想该怎么消化、简化。
        2. 也注意到你已经将 elegantbook 文类做了相当深入的修改,这超出了我的预期,对我来说,已经不那么容易迁移到我的模版中来了。
        3. Logo/Cover 还是让用户选吧,不打算整进模版里,会极大增加 repo size,用户八成会换掉(至少我常常这样干)。
        • Fye 回复了此帖

          Cloud2016 因为不熟悉R,我的办法一般都是笨办法。直接改LaTeX 或者 CSS。一个好的办法可能是让Elagantbook的作者们增加几个类似tip,warn的环境到他们的模板里面。其实note环境已经在elegantbook里了。

          我其实并没有对Elegantbook 文档做修改,只是模仿Elegantbook添加了几个自己要用的环境,写在了preamble里面而已。在preamble里调整格式应该是大多数用户比较容易上手的方式。

          关于Logo/Cover,最好也是让elegantbook的作者加个选择,如果logo/cover 空,就不要留未知,设置成空白就好了。需要的用户,可以在preamble里面加上。或者应该有办法让bookdown生成\logo{},\cover{}命令。

          期待你能找到更简单的方法。不过目前对我来说,已经很满足。非常感谢!

          20 天 后

          最近 TeXLive 升级了,ElegantBook 跟着也升级了,所幸的是我的 ElegantBookdown 模版 不需要做任何改动,完美适配,真正实现了最低的维护成本,够稳定,开心😄

            2 年 后

            Cloud2016

            最近用您模板更新书籍,出现错误,不知道怎么改了 。前几个月输出了一次PDF,还是正常的。不知道是不是有些宏包升级了,实在是不想再去把Latex捡起来了(已经习惯Rmarkdown和tinytex的自动化了)。
            ! LaTeX Error: Command \proof already defined.
            Or name \end... illegal, see p.192 of the manual.
            能帮忙看看吗?

              1 个月 后

              flyco 不知道为啥,你咋删除了留言。最近,我跟着 ElegantBook 升级了一下 ElegantBookdown,目前适配 ElegantBook 4.4 最新版。简化了很多自定义配置,特别是字体设置,欢迎试用。

                Cloud2016 不好意思 我找到问题了,怕耽误你的时间就删除留言了。 我群晖同步电脑的时候把 .Rprofile 这个文件自动忽略掉了,结果就报错了。虽然我没有搞懂其中的原理,为什么需要这个文件?但是我加上以后就正常了。谢谢你, 刚刚给学生赶在开学前发了更新的上课教材。新版抽时间我去看看,这个模版很漂亮,而且每次更新内容很方便。

                同时一并谢谢以前麻烦的 @dapengde ,还有好用的Rmarkdown @yihui

                  flyco .Rprofile 文件里是一些配置内容,里面的东西没搞懂也没关系,基本不影响模版的使用。若有兴趣可以看看帮助 R 文档 ?Rprofile

                    Cloud2016 有一个很小的问题,就是目录里面,章节如果超过10,比如第十二章 混料试验设计,这个时候显示空间不足,“章”字就会和“混”挤在一起重叠显示。 正文里面没有问题。