簡報軟體 sozi 製作技巧

inkscape + sozi = prezi + 開放自由

Sozi 是向量繪圖軟體 inkscape (illustrator 替代品) 的外掛。 有了它, 就可以製作出像 prezi 一般的旋轉/縮放簡報。 請見 我用 sozi 製作的幾個簡報範例。 因為 inkscape + sozi 採用開放的向量圖檔 svg + javascript 格式存檔, 而且檔案格式非常輕巧簡潔, 所以有很多優點:

  1. 你可以只管貼圖、 專注於簡報內容就好; 不需要花費心思處理換場特效
  2. 中文可以正常顯示; 甚至可以與任何語言混搭。 (這一點用 prezi 的人就比較吃虧了)
  3. firefox 或 chrome 等等任何支援國際標準的瀏覽器都可以看; 不需要特殊播放軟體。
  4. 可以放雲端、 也可以在本機播放。
  5. 除了 inkscape 之外, 其他支援 svg 的軟體工具應該也可以對成果圖檔做簡單的編輯。
  6. 甚至連文字編輯器也可以做簡單的編輯 -- 也因此, 搭配 regexp 就可讓 「批次修改簡報內容」 變得極為容易。 (我喜歡用 html 遠勝過 odt 其中最重要的原因與此相同)
  7. 稍微加工之後, 不同的簡報可以共享圖片, 很節省空間。 (不含圖片單就 svg 檔本身而言, 我所做的簡報檔都只有幾十 K 而已)

安裝

[2018/12/30] 我到現在還是偏好用較舊的版本 (sozi 13)。 如果遇到 「舊版 sozi 拒絕開新版檔案」 的問題, 而且如果版本沒有差太多的話, 可以參考 這篇文章; 但實際上需要查看的檔案可能不一樣。 先進到 /usr/share/inkscape/extensions/sozi , 然後 grep SOZI_VERSION *.pygrep -i 'higher version' *.py 查出你的 (舊) 軟體版本, 把它貼到 (新) sozi svg 檔裡面的兩處 ns1:version 後面去。

基本操作

sozi 出現在 inkscape 的選單當中。 注意: 請先選取一個物件, 再叫出 sozi。 假設你粗略會使用 inkscape 畫圖。 那麼想把它變成簡報, 大致上就是以下幾個簡單步驟:

  1. "畫" 好你的簡報。 每個物件都可以是一個頁框 (frame)。 如果想要在一個頁框裡面同時放入好幾個物件, 就要把它們 group 起來成為一個物件, 或是畫一個矩形把它們框起來, 然後以這矩形為頁框也可以。 不必擔心矩形的邊框, 因為等一下可以選擇隱藏矩形。
  2. 放大縮小物件時, 建議按著 control 鍵, 以確保長寬比例維持不變。
  3. 點選 其中一個物件或一個 group 或一個矩形。
  4. 從 inkscape 的 「擴充功能」 選單當中叫出 sozi。 這時 sozi 的對話框出現; 而 inkscape 暫時不能使用。
  5. 在 sozi 對話框的左下角找到綠色的加號, 按下去之後, 先前點選的那個物件/group/矩形 就被加進你的簡報成為一個頁框了。
  6. 調整各項屬性。
  7. 按下確定, sozi 對話框消失, 控制權交還給 inkscape。
  8. 存檔; 先不要關掉 inkscape; 用 firefox 開啟你的 svg 檔, 檢查是否正確。 用方向鍵、 f、 t、 空格等等鍵 播放/操作 你的 svg 簡報。
  9. 回到第二步繼續加入下一頁框。

sozi 的編輯頁面 sozi 對話框很簡單 (也可以說很陽春): 總之就是要在左側的頁框清單裡面選取一個頁框, 然後就可以用下面的按鈕刪除/複製/調整順序, 或是用對話框右側的欄位調整各種屬性。 但 「新增頁框」 功能永遠都只適用於 [進入 sozi 之前所選的那個物件]。

Sozi 檔案格式

內嵌 sozi 的 svg 檔案格式 內含 sozi 的 svg 檔案格式也很簡單。 sozi 並沒有去動原始的 svg 內容 (從 <g ...></g> 的部分), 只是在最後面加上了一段 <script id="sozi-script" ...> ... </script>。 每個頁框的各欄位資訊也很清楚簡單:

  1. ns1:refid: 本頁框對應到圖檔裡面的哪一個元素?
  2. ns1:title: 在頁框總覽(按 t 鍵)裡面所呈現的標題
  3. ns1:sequence: 本頁框在整份簡報裡面出現的頁次
  4. ns1:hide: 這個物件/元素本身要不要隱藏起來?
  5. ns1:clip: 要不要把本頁框以外的部分(旁邊的圖)切掉?
  6. ns1:timeout-enable: 要不要定時自動跳離本頁框?
  7. ns1:timeout-ms: 多久以後自動跳離本頁框(跳到下一頁)?
  8. ns1:transition-duration-ms: 花多少時間秀換場動作?
  9. ns1:transition-zoom-percent: 換場縮放
  10. ns1:transition-profile: 採用哪種換場特效?

sozi 簡報上雲端

如果希望你的 sozi 簡報可以上網 (而不是只能用 firefox 的 「檔案」 => 「開啟檔案」 瀏覽) 那麼有兩個方案:

  1. 在 inkscape 裡面用 「檔案」 => 「匯入」 圖檔時, 記得選取 「內嵌」 而不是 「連結」。 這樣 svg 檔會變很大, 但就不怕移動路徑會造成圖片消失。
  2. 相反地, 如果當初匯入圖檔時選取 「連結」, 那麼 svg 檔就還是很小, 但必須用文字編輯器進入 svg 檔, 手動將 <image ... /> 裡面的 xlink:href 後面的路徑改掉。 請檢視我的範例的原始碼。

注意: 每次用 inkscape 編修過後, 這個 svg 檔裡面的所有 image 的 xlink:href 路徑又會被 inkscape 改回檔案系統的路徑。 所以我都會再用一句 perl script 後置處理:

    perl -pe 's#xlink:href="被inkscape修改過的路徑#xlink:href="你希望的網址路徑#' 簡報檔.svg > 新簡報檔.svg

另一個注意: 第一次一定要手動更改; 上面的 script 只適用於第二次以後的更改。 當你成功試過很多次之後, 可以考慮把上面的指令改成:

    perl -pe -i.bak '...' 簡報檔.svg

這個 "-i.bak" 意思是直接修改 「簡報檔.svg」 (in-place) 並把舊的檔案備份在 「簡報檔.svg.bak」。 如果你 (像貴哥一樣) 很猛, 不怕不小心毀掉資料, 還可以把 ".bak" 省略掉, 就連清除備份檔的麻煩都省下來了。

以我自己為例, sozi 簡報檔都放在 /home/ckhung/public_html/mm/ 或 /home/ckhung/public_html/e/ 這兩個目錄底下, 而圖片檔都放在 /home/ckhung/public_html/m/ 這個目錄底下。 此外, 我習慣選用:

  1. 「淡入時減速 (decelerate)」 的換場特效。
  2. 不要 「隱藏 (hide) 本物件」、
  3. 不要 「把本頁框以外的其他東西 (旁邊的圖) 全部切掉 (clip)」、

所以我每次修改完一個 sozi 簡報 (例如 xyz.svg) 之後, 都會用一支小小的 perl 程式修正一下: cp xyz.svg /tmp ; ./fix.pl xyz.svg

Sozi 編輯小技巧

  1. 我都先把所有素材胡亂丟到畫布上, 然後再一併整理。 全部整理完以後, 才一口氣把所有頁框加入 sozi。
  2. 如果你像我一樣懶惰, 就會先丟著頁框屬性不管, 等全部排完後再用 vim (或其他文字編輯器) 進 svg 檔全面代換。
  3. 當你用群組 (group) 功能來組頁框時, 請先把相關物件組成一個群組, 然後才旋轉。 如果你先旋轉個別物件再組頁框, sozi 就不會懂得如何正確旋轉這個頁框。

sozi 簡報製作建議

這一節是我個人的簡報製作心得, 不一定適用於每個人。 以後將陸續增加。

  1. 按照概念的相關性 -- 而不是按照簡報頁框的順序 -- 來安排畫布。
  2. 有時候一個頁框在簡報前後不同時段出現也很有強調效果。
  3. 不要過度使用旋轉。 我通常只在表達 「轉換觀點」 或 「眾星拱月」 的情況下才加入旋轉。

附錄: 提供打包檔以及列印

邀請演講的單位通常會希望講者提供簡報檔。 不過當初這個單位立下規定時, 不太可能知道有越來越多人改用 html/svg 做簡報、 不太可能知道此時網址其實就是最好的簡報檔。 為了不要為難行政人員, 還是提供一下檔案吧。 以下假設要處理 abundance.svg 這個簡報檔。

如果當初所有圖案都是內嵌, 就可以直接交這個 svg 檔。

如果內含 「連結」 圖檔, 那麼除了 abundance.svg 之外, 還必須把所有圖檔的路徑及檔名全部印出來, 並建立一個清單 pic-list.txt : perl -ne 'print "$1\n" if /xlink:href="(.*?)"/' abundance.svg > pic-list.txt 然後可以這樣產生壓縮檔: zip abundance.zip abundance.svg $(cat pic-list.txt) 當然, 如果你的路徑像我一樣有 「向上」 ("../") 的相對連結, 就還要再進一步處理。 ... (待補)

如果要把整頁印成一張 jpg 圖, 可以先在瀏覽器裡面按 f 再列印成 abundance.pdf (會變得很大), 然後: pdftoppm -r 300 abundance.pdf | convert -crop 80%x45%+300+60 - abundance.jpg (假設你有安裝 poppler-utils 及 imagemagick)。

至於逐頁列印成 pdf ... 請見 應論串, 我還沒試出來 :-(。

關於 sozi, 您有心得想要分享嗎? 請到 這一帖部落格 留言。