LoginSignup
0
1

More than 1 year has passed since last update.

Re:VIEW でコードブロックを調整

Last updated at Posted at 2023-05-13

環境

Re:VIEW 5.3

はみ出る

以下のように、同人誌にしたときにはみ出るのが悩みの種でした。

image.png

長い

また、ログをそのまま貼り付けたりなどすると延々とコードブロックばかり続いたりしてげんなりします。

image.png

今回の挑戦

今回は、自動改行とコードブロックの縮小表示に挑戦してみます。

自動改行

Docs の『コードブロック内で自動改行する」
https://review-knowledge-ja.readthedocs.io/ja/latest/latex/linebreak-verbatim.html

ここでは、以下のコードが紹介されていました。

module ReVIEW
  module LATEXBuilderOverride
    # gem install unicode-display_width
    require 'unicode/display_width'
    require 'unicode/display_width/string_ext'

    CR = '→' # 送り出し文字。LaTeXコードも可
    ZWSCALE = 0.875 # 和文・欧文の比率。\setlength{\xkanjiskip}{\z@} しておいたほうがよさそう

    def split_line(s, n)
      # 文字列を幅nで分割
      a = []
      l = ''
      w = 0
      s.each_char do |c|
        cw = c.display_width(2) # Ambiguousを全角扱い
        cw *= ZWSCALE if cw == 2
        
        if w + cw > n
          a.push(l)
          l = c
          w = cw
        else
          l << c
          w += cw
        end
      end
      a.push(l)
      a
    end

    def code_line(type, line, idx, id, caption, lang)
      # _typeには'emlist'などが入ってくるので、環境に応じて分岐は可能
      n = 76
      n = 60 if @doc_status[:column]
      a = split_line(unescape(detab(line)), n)
      # インラインopはこの時点でもう展開されたものが入ってしまっているので、escapeでエスケープされてしまう…
      escape(a.join("\x01\n")).gsub("\x01", CR) + "\n"
    end

    def code_line_num(type, line, first_line_num, idx, id, caption, lang)
      n = 60
      n = 56 if @doc_status[:column]
      a = split_line(unescape(detab(line)), n)
      (idx + first_line_num).to_s.rjust(2) + ': ' + escape(a.join("\x01\n    ")).gsub("\x01", CR) + "\n"
    end
  end

  class LATEXBuilder
    prepend LATEXBuilderOverride
  end
end

n の値を64 から 76 に変更しました。

このコードを、 review-ext.rb ファイルにしてプロジェクトに置くだけだとエラー。

review-pdfmaker  config.yml
Traceback (most recent call last):
    14: from /usr/local/bin/review-pdfmaker:23:in `<main>'
    13: from /usr/local/bin/review-pdfmaker:23:in `load'
    12: from /var/lib/gems/2.7.0/gems/review-5.3.0/bin/review-pdfmaker:14:in `<top (required)>'
    11: from /var/lib/gems/2.7.0/gems/review-5.3.0/lib/review/pdfmaker.rb:93:in `execute'
    10: from /var/lib/gems/2.7.0/gems/review-5.3.0/lib/review/pdfmaker.rb:147:in `execute'
     9: from /var/lib/gems/2.7.0/gems/review-5.3.0/lib/review/pdfmaker.rb:264:in `generate_pdf'
     8: from /var/lib/gems/2.7.0/gems/review-5.3.0/lib/review/pdfmaker.rb:264:in `new'
     7: from /var/lib/gems/2.7.0/gems/review-5.3.0/lib/review/book/base.rb:42:in `initialize'
     6: from /var/lib/gems/2.7.0/gems/review-5.3.0/lib/review/book/base.rb:50:in `update_rubyenv'
     5: from /var/lib/gems/2.7.0/gems/review-5.3.0/lib/review/book/base.rb:50:in `load'
     4: from /var/www/html/G14Robot/articles/ATTiny/review-ext.rb:1:in `<top (required)>'
     3: from /var/www/html/G14Robot/articles/ATTiny/review-ext.rb:2:in `<module:ReVIEW>'
     2: from /var/www/html/G14Robot/articles/ATTiny/review-ext.rb:4:in `<module:LATEXBuilderOverride>'
     1: from /usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'
/usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require': cannot load such file -- unicode/display_width (LoadError)
rake aborted!
Command failed with status (1): [review-pdfmaker  config.yml...]
lib/tasks/review.rake:112:in `block in <top (required)>'
/usr/share/rubygems-integration/all/gems/rake-13.0.1/exe/rake:27:in `<top (required)>'
Tasks: TOP => pdf => book.pdf
(See full trace by running task with --trace)

こちらを参考に、
「技術書典13に向けて執筆環境を整える(Markdown + Re:VIEW)」
https://zenn.dev/sikkim/articles/d5e6d851d100d2

Gemfile に以下の行を追加しました。

gem unicode-display_width

更に、

% gem install unicode-display_width

とすると、うまくいきました。

``
image.png

サイズ縮小

フォントサイズを小さくしてみます。

こちらの方法に沿って、
「Re:VIEW 覚え書き - Qiita」
https://qiita.com/kauplan/items/01dee0249802711d30a6

config.yml

debug: true

と設定してから rake pdf を実行、book-pdf/~~~.tex の中身を見るとコードブロックは以下のように記述されている。


\begin{reviewlistblock}
\begin{reviewemlist}
.
.
.
\end{reviewemlist}
\end{reviewlistblock}

このうち、revielistblock は

https://github.com/reviewml/reviewknowledge-ja/blob/master/docs/latex/review3-latex.md
によると、

//emlist//list などから変換されるコード類を、\begin{reviewlistblock}\end{reviewlistblock} 環境で囲むようにしました。任意の前後空きの調整に使うことを想定していますが、デフォルトのスタイルではこの環境自体は何もしません。

とのことでした。

また、reviewemlist は、
book-pdf/review-base.sty
で、

\newenvironment{reviewemlist}{%
  \medskip\small\begin{shaded}\ifdefined\reviewlistxkanjiskip\xkanjiskip=\reviewlistxkanjiskip\fi\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
  \end{alltt}\end{shaded}}

と設定されていました。

このことから、
sty/reviewmacro.sty の最後の方を以下のようにしました。


\renewenvironment{reviewemlist}{%
  \medskip\tiny\begin{shaded}\ifdefined\reviewlistxkanjiskip\xkanjiskip=\reviewlistxkanjiskip\fi\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
  \end{alltt}\end{shaded}}

\renewenvironment{reviewlist}{%
  \begin{shaded}\tiny\ifdefined\reviewlistxkanjiskip\xkanjiskip=\reviewlistxkanjiskip\fi\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
  \end{alltt}\end{shaded}\par\vspace*{0.5zw}}

\renewenvironment{reviewsource}{%
  \begin{shaded}\tiny\ifdefined\reviewlistxkanjiskip\xkanjiskip=\reviewlistxkanjiskip\fi\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
  \end{alltt}\end{shaded}\par\vspace*{0.5zw}}

\renewenvironment{reviewcmd}{%
  \color{white}\medskip\tiny\ifdefined\reviewlistxkanjiskip\xkanjiskip=\reviewlistxkanjiskip\fi\begin{shadedb}\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
  \end{alltt}\end{shadedb}}


\endinput

\endinput の前に reviewemlist を含む関係しそうなものを置いています。

\newenvironment から \renewenvironment
に変更するのが肝要ぽいです。

もとのもの文字サイズが \small となっていたものを \tiny に変更しました。

更に、フォントサイズが変わるので先の review-ext.rb の 文字数を以下のように変更しました。

.
.
.
    def code_line(type, line, idx, id, caption, lang)
      # _typeには'emlist'などが入ってくるので、環境に応じて分岐は可能
      n = 136
      n = 128 if @doc_status[:column]
      a = split_line(unescape(detab(line)), n)
      # インラインopはこの時点でもう展開されたものが入ってしまっているので、escapeでエスケープされてしまう…
      escape(a.join("\x01\n")).gsub("\x01", CR) + "\n"
    end

    def code_line_num(type, line, first_line_num, idx, id, caption, lang)
      n = 128
      n = 120 if @doc_status[:column]
.
.
.

image.png
image.png
良くなりましたね!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1