Friday, May 29, 2015

Menyoroti (Highlighting) Teks

Tanpa bermaksud turut mempromosikannya, saya (terpaksa) akan menyebut nama produk. Ingat Stabilo, bukan?
Ini mengingatkan saya pada masa bersekolah dulu. Ketika saya membaca (buku catatan atau buku bacaan), sering kali saya gunakan alat itu untuk menggoresi bagian teks yang saya anggap penting agar tampak "warna pencerah" yang menandainya. Mungkin ini semacam mnemonik, yang dapat membantu saya dalam memahami atau menghafal materi yang saya baca. 
Apa kaitan ini dengan $\small\LaTeX$?

Tanpa menggunakan alat tersebut, kita dapat melakukan hal yang sama, bahkan jauh sebelum tulisan kita itu dicetak. Penampakkannya persis seperti goresan tangan (handwriting). Bahkan, bila perlu, kita dapat memunculkan "garis pinggir" (suatu hal yang tidak dapat dilakukan oleh alat itu) dari goresan itu dengan beragam warna pilihan yang kita kehendaki. Nah, agar lebih nyata, silakan perhatikan contoh dokumen berikut ini.




Bagaimana bila yang disorot itu dalam modus matematis? Masih bisa, hanya saja secara inline (tidak cocok untuk cara display). Lalu, bagaimana hal itu dilakukan?
Ini hasil kerja seorang "ahli" (expert), yang meramu dua paket: soul (sebagai dasar) dan tikz.

Secara baku, sebenarnya kita cukup menyediakan dua paket
\usepackage{color}
\usepackage{soul}
kemudian kita gunakan perintah \hl{...}, misalnya
\hl{``NU, Muhammadiyah, dan semacamnya itu \emph{wasilah} atau \emph{ghoyyah}?''}
dengan goresan warna latar dasar, yaitu kuning.

Jika diinginkan, kita pun dapat memanfaatkan paket xcolor (dengan opsi, misalnya, svgnames) untuk penggunaan warna latar lainnya, dengan memberikan perintah baru di dalam preamble, misalnya
\newcommand{\hlc}[2][yellow]{ {\sethlcolor{#1} \hl{#2}} }
kemudian kita gunakan
\hlc[Salmon]{``NU, Muhammadiyah, dan semacamnya itu \emph{wasilah} atau \emph{ghoyyah}?''}

Berbeda dengan itu, seorang anggota forum, dengan nama pengguna Antal S-Z, menunjukkan lekukan (wiggly) secara "alami" dan tampak terpisah pada hasil penggoresan dalam dua baris (perhatikan bagian bawah dalam contoh dokumen di atas).
Paket dan makro yang dibuatnya adalah sebagai berikut.
\usepackage{soul}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{decorations.pathmorphing}

\makeatletter

\newcommand{\defhighlighter}[3][]{%
  \tikzset{every highlighter/.style={color=#2, fill opacity=#3, #1}}%
}

\defhighlighter{yellow}{.5}

\newcommand{\highlight@DoHighlight}{
  \fill [ decoration = {random steps, amplitude=1pt, segment length=15pt}
        , outer sep = -15pt, inner sep = 0pt, decorate
        , every highlighter, this highlighter ]
        ($(begin highlight)+(0,8pt)$) rectangle ($(end highlight)+(0,-3pt)$) ;
}

\newcommand{\highlight@BeginHighlight}{
  \coordinate (begin highlight) at (0,0) ;
}

\newcommand{\highlight@EndHighlight}{
  \coordinate (end highlight) at (0,0) ;
}

\newdimen\highlight@previous
\newdimen\highlight@current

\DeclareRobustCommand*\highlight[1][]{%
  \tikzset{this highlighter/.style={#1}}%
  \SOUL@setup
  %
  \def\SOUL@preamble{%
    \begin{tikzpicture}[overlay, remember picture]
      \highlight@BeginHighlight
      \highlight@EndHighlight
    \end{tikzpicture}%
  }%
  %
  \def\SOUL@postamble{%
    \begin{tikzpicture}[overlay, remember picture]
      \highlight@EndHighlight
      \highlight@DoHighlight
    \end{tikzpicture}%
  }%
  %
  \def\SOUL@everyhyphen{%
    \discretionary{%
      \SOUL@setkern\SOUL@hyphkern
      \SOUL@sethyphenchar
      \tikz[overlay, remember picture] \highlight@EndHighlight ;%
    }{%
    }{%
      \SOUL@setkern\SOUL@charkern
    }%
  }%
  %
  \def\SOUL@everyexhyphen##1{%
    \SOUL@setkern\SOUL@hyphkern
    \hbox{##1}%
    \discretionary{%
      \tikz[overlay, remember picture] \highlight@EndHighlight ;%
    }{%
    }{%
      \SOUL@setkern\SOUL@charkern
    }%
  }%
  %
  \def\SOUL@everysyllable{%
    \begin{tikzpicture}[overlay, remember picture]
      \path let \p0 = (begin highlight), \p1 = (0,0) in \pgfextra
        \global\highlight@previous=\y0
        \global\highlight@current =\y1
      \endpgfextra (0,0) ;
      \ifdim\highlight@current < \highlight@previous
        \highlight@DoHighlight
        \highlight@BeginHighlight
      \fi
    \end{tikzpicture}%
    \the\SOUL@syllable
    \tikz[overlay, remember picture] \highlight@EndHighlight ;%
  }%
  \SOUL@
}
\makeatother
Kemudian saya gunakan (untuk bagian teks yang saya goresi), dengan menambahkan paket xcolor dalam opsi svgnames untuk pemilihan warna, sebagai berikut.
\highlight[Salmon]{Ahmad Mustofa Bisri} \\
\highlight{``PPP, PDI, dan Golkar itu \emph{wasilah} atau {\em ghoyyah}?''} \\ 
\highlight{``NU, Muhammadiyah, dan semacamnya itu \emph{wasilah} atau \emph{ghoyyah}?''} \\
\highlight[draw=Dandelion]{``Islam, Katholik, Hindu, dan semacamnya itu \emph{wasilah} atau {\em ghoyyah} (tujuan)?''}\\ 
\highlight[SeaGreen, draw=CadetBlue]{\emph{Ghoyyah} itu artinya tujuan akhir. \emph{Wasilah} itu artinya sarana menuju.}\\
\highlight[Salmon, draw=IndianRed]{``Agama Islam adalah \emph{wasilah}.''} \\
\highlight[Salmon]{``Karena \emph{ghoyyah}-nya (tujuannya) adalah Allah.''} \\
\highlight[SeaGreen]{awal mula kesalahan beragama adalah menganggap agama Islam seperti partai politik. Ditambah salah menetapkan apa yang menjadi \emph{wasilah} dan apa yang menjadi \emph{ghoyyah} dalam agama Islam.}
Opsi draw kita nyatakan bila ingin menampakkan "garis pinggir pada lekukan goresan itu.

Demikian semoga bermanfaat. Dokumen di atas saya susun (compile) dalam jaringan melalui Online LaTeX Editor ShareLaTeX.

Adjie Gumarang Pujakelana 2015

No comments:

Post a Comment

Related Posts Plugin for WordPress, Blogger...