Dear all,
Tex 在排版的時候, 會依據每個字的音節來作為 break word 來換行的依據.
但如果那不是一個字典裏面有的 word, 那 tex 就不知道怎麼換行了.
比方說如果我今天要在 tex 裡面寫出
I\_am\_a\_good\_man
那麼當這個字超出右邊或左邊的 margin 時, tex 並不會把他拆成兩半,
而是直接排出版面外.
如果我今天想要 tex 在排版的時候自動的在這個字的適當地方做切割,
目前想到的方法是用 \discretionary{}{}{} 的方法
也就是
I\discretionary{}{}{}\_am\discretionary{}{}{}\_a\discretionary{}{}{}\_good
\discretionary{}{}{}\_man
沒錯, 這樣子的話, 的確可以讓 tex 自動在 underscore 處幫我決定要不要換行.
不過的確很醜, 而且不直覺.
請問有 "更好" 的方法嗎?
Note:
想到的另一個爛方法是用 \catcode 的方式把 _ 的 category 改成 11..
不過這個的影響層面太大, math mode 的 _ 也會失效, 其他用到 _ 的地方,
比方 cite, ref, label 等等也會失效 ! >_<
其實 Latex 裡面有個 underscore.sty, 他的原理就是採用 \catcode 的方式,
不過鑒於上述的缺點, 以及他跟 hyperref 會 conflict...
比方說 hyperref 的 \nameref
所以不考慮 !
所以呢... 有比 \discretionary 更好的方式來處理內含有 _ 字元的字串
換行的方式嗎?
--
如果大眾臉是現實生活中的 OP 的話,那我就是花生米般的笑點
http://wei0905.spaces.live.com/
http://www.csie.ntu.edu.tw/~r88052/main/tw/index.php
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.74.216.127
> -------------------------------------------------------------------------- <
發信人: Storm.bbs@bbs.sayya.org (風), 看板: LaTeX
標 題: Re: [問題] 如何令 XX_XX_XX 這樣的字換行? 用 discretionary{}{}{}?
發信站: SayYA 資訊站 (Sat Oct 14 04:25:10 2006)
轉信站: ptt!ctu-reader!news.nctu!SayYa
※ 引述《halajohn.bbs@ptt.cc (Wei Hu)》之銘言:
> Dear all,
> Tex 在排版的時候, 會依據每個字的音節來作為 break word 來換行的依據.
> 但如果那不是一個字典裏面有的 word, 那 tex 就不知道怎麼換行了.
> 比方說如果我今天要在 tex 裡面寫出
> I\_am\_a\_good\_man
> 那麼當這個字超出右邊或左邊的 margin 時, tex 並不會把他拆成兩半,
> 而是直接排出版面外.
如果這樣呢?
\documentclass{article}
\begin{document}
I\-\_am\-\_a\-\_good\-\_man I\-\_am\-\_a\-\_good\-\_man
I\-\_am\-\_a\-\_good\-\_man I\-\_am\-\_a\-\_good\-\_man
I\-\_am\-\_a\-\_good\-\_man I\-\_am\-\_a\-\_good\-\_man
\end{document}
使用 \- 標明可能可以斷字的位置,這樣應該符合你的要求才對。
--
※ Origin: SayYA 資訊站 <bbs.sayya.org>
◆ From: r83h57.res.gatech.edu
> -------------------------------------------------------------------------- <
發信人: hoch@kkcity.com.tw ( ), 看板: LaTeX
標 題: Re: [問題] 如何令 XX_XX_XX 這樣的字換行? 用 discretionary{}{}{}?
發信站: KKCITY (Sat Oct 14 08:57:24 2006)
轉信站: ptt!ctu-reader!Spring!news.nctu!news.ntu!bbs.ee.ntu!news.kkcity.com.tw
> Tex 在排版的時候, 會依據每個字的音節來作為 break word 來換行的依據.
> 但如果那不是一個字典裏面有的 word, 那 tex 就不知道怎麼換行了.
> 比方說如果我今天要在 tex 裡面寫出
> I\_am\_a\_good\_man
> 那麼當這個字超出右邊或左邊的 margin 時, tex 並不會把他拆成兩半,
> 而是直接排出版面外.
> 所以呢... 有比 \discretionary 更好的方式來處理內含有 _ 字元的字串
> 換行的方式嗎?
看一下 LaTeX FAQ:
http://www.tex.ac.uk/cgi-bin/texfaq2html?label=hyphexcept
\hyphenation{I-\_am-\_a-\_good-\_man} 也許可以
--
┌─────◆KKCITY◆─────┐ ◢ ◤ 找歌最方便 KKBOX 歌詞搜尋!!
│ bbs.kkcity.com.tw │ \^_^ / ★http://www.kkbox.com.tw★
└──《From:140.129.151.113 》──┘ ◤ 唱片公司授權,音樂盡情下載
--
> -------------------------------------------------------------------------- <
作者: halajohn (Wei Hu) 看板: LaTeX
標題: Re: [問題] 如何令 XX_XX_XX 這樣的字換行? 用 dis …
時間: Sat Oct 14 17:43:28 2006
※ 引述《hoch@kkcity.com.tw ( )》之銘言:
: > Tex 在排版的時候, 會依據每個字的音節來作為 break word 來換行的依據.
: > 但如果那不是一個字典裏面有的 word, 那 tex 就不知道怎麼換行了.
: > 比方說如果我今天要在 tex 裡面寫出
: > I\_am\_a\_good\_man
: > 那麼當這個字超出右邊或左邊的 margin 時, tex 並不會把他拆成兩半,
: > 而是直接排出版面外.
: > 所以呢... 有比 \discretionary 更好的方式來處理內含有 _ 字元的字串
: > 換行的方式嗎?
: 看一下 LaTeX FAQ:
: http://www.tex.ac.uk/cgi-bin/texfaq2html?label=hyphexcept
: \hyphenation{I-\_am-\_a-\_good-\_man} 也許可以
Thx for your help !
1) Storm 提到的用 \-, 他的確會在 \- 處斷詞, 不過他卻會多一個 - 連字符號,
找了一些資料以後發現, \- 其實就是利用 \discretionary{-}{}{} 來達到斷詞
的功能. 所以他們是一樣的, 只是少打了一些字.
不過, 很多時候, 會用到 _ 的時候就是要打一些 program 裡面的函式或變數名,
比方說 global_egl_register, 如果斷成兩行的中間還插著一個 - 連字符號,
比方說
... ... .. ... .. . . . . . . . . globl_egl-
_register ..............................
這樣就會很奇怪, 所以看起來如果是這樣的話, 用 \discretionary{}{}{} 才
能達到預期的效果.
2) hock 所提到的 \hyphenation, 我之前也有嘗試過, 可是不知道為什麼,
是 faq 所用的版本太老, 還是我用的有 bug...
latex, 或 pdflatex 編譯後都會出現
ERROR: Improper \hyphenation will be flushed.
的錯誤.
我用的是 miktex 2.5, latex & pdflatex 3.141592-1.30.6-2.2
所以要怎樣才能夠達到類似 microsoft word 裡面不管如何只要達到 page 的邊界
就會斷詞換行的功能呢? 就算是用 /discretionary{}{}{}, 也只會在指令的地方
斷詞, 比方說下面這種情況還是會出現
.......................... aaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaa bbbbbbbbb_cccccccc_dddddddd
_eeeeee_fffffff_ggggggg ....................
............................................
這樣的話, ddddddd 就會太突出了.
對於要打有關程式碼相關的文件時, 這樣的狀況將會不少, 所以蠻困擾的.
但同樣的 paragraph 在 word 裡面就會斷的很漂亮.
所以請問要怎麼設定才可以讓 latex 讓碰到 margin 的任何東西就斷.
Thx.
※ 編輯: halajohn 來自: 59.105.13.34 (10/14 18:18)
> -------------------------------------------------------------------------- <
發信人: Edward.bbs@bbs.sayya.org (蒙古大夫), 看板: LaTeX
標 題: Re: [問題] 如何令 XX_XX_XX 這樣的字換行? 用 discretionary{}{}{}?
發信站: SayYA 資訊站 (Tue Oct 17 17:00:53 2006)
轉信站: ptt!ctu-reader!news.nctu!SayYa
※ 引述《halajohn.bbs@ptt.cc (Wei Hu)》之銘言:
> Dear all,
> Tex 在排版的時候, 會依據每個字的音節來作為 break word 來換行的依據.
> 但如果那不是一個字典裏面有的 word, 那 tex 就不知道怎麼換行了.
> 比方說如果我今天要在 tex 裡面寫出
> I\_am\_a\_good\_man
> 那麼當這個字超出右邊或左邊的 margin 時, tex 並不會把他拆成兩半,
> 而是直接排出版面外.
> 如果我今天想要 tex 在排版的時候自動的在這個字的適當地方做切割,
> 目前想到的方法是用 \discretionary{}{}{} 的方法
[...]
看了前後回的文,我想你的需求並不是 hyphenation?而是讓他能夠
line break。是這樣嗎?(就是不要 hyphen character)
或許可以參考 path package 的處理。把字型換回 rm 應該就可以了。
這些「字」應該都是少數,用 \path|I\_am\_a\_good\_man| 應該是
還可以接受?
--
故萬物一也,是其所美者為神奇,其所惡者為臭腐;
臭腐復化為神奇,神奇復化為臭腐。(莊子.知北遊)
--
※ Origin: SayYA 資訊站 <bbs.sayya.org>
◆ From: edt1023.sayya.org
> -------------------------------------------------------------------------- <
作者: halajohn (Wei Hu) 看板: LaTeX
標題: Re: [問題] 如何令 XX_XX_XX 這樣的字換行? 用 dis …
時間: Tue Oct 17 20:49:27 2006
※ 引述《Edward.bbs@bbs.sayya.org (蒙古大夫)》之銘言:
: [...]
: 看了前後回的文,我想你的需求並不是 hyphenation?而是讓他能夠
: line break。是這樣嗎?(就是不要 hyphen character)
: 或許可以參考 path package 的處理。把字型換回 rm 應該就可以了。
: 這些「字」應該都是少數,用 \path|I\_am\_a\_good\_man| 應該是
: 還可以接受?
path package 內部好像就是用改變 _ 等符號的 catcode 來達到換行的
目的.
anyway, 用 \path|| 的確可以達到在 _ 換行的目的. 不過下面的情況還
是會發生:
.......................... aaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaa bbbbbbbbb_cccccccc_dddddddd
_eeeeee_fffffff_ggggggg ....................
............................................
那個 ddddddddd 還是太長了, 帶 word 卻可以漂亮的處理.
可以寫一個簡單的 tex file 來測試 aaaaaaaaaaaaaa_bbbbbbbbbbbbbbb_
cccccccccccccccccccc_ddddddddddddddddddd_eeeeeeeeeeeeeeeeee
這種類似的字串就可以感受到了.
另外 \path|| 跟其他 command 的搭配也有一些問題.
比方說 \path 不能放在 listings package 的 lstlisging environment
的 caption field 中. 也不不可以放在 longtable 的 caption environment
中....
所以有什麼方法可以讓 latex 在任何東西只要超出 margin 就把他斷行的
的命令嗎?
--
如果大眾臉是現實生活中的 OP 的話,那我就是花生米般的笑點
http://wei0905.spaces.live.com/
http://www.csie.ntu.edu.tw/~r88052/main/tw/index.php
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.87.157.82
> -------------------------------------------------------------------------- <
發信人: Edward.bbs@bbs.sayya.org (蒙古大夫), 看板: LaTeX
標 題: Re: [問題] 如何令 XX_XX_XX 這樣的字換行? 用 dis …
發信站: SayYA 資訊站 (Tue Oct 17 21:15:17 2006)
轉信站: ptt!ctu-reader!news.nctu!SayYa
※ 引述《halajohn.bbs@ptt.cc (Wei Hu)》之銘言:
> ※ 引述《Edward.bbs@bbs.sayya.org (蒙古大夫)》之銘言:
> : [...]
> : 看了前後回的文,我想你的需求並不是 hyphenation?而是讓他能夠
> : line break。是這樣嗎?(就是不要 hyphen character)
> : 或許可以參考 path package 的處理。把字型換回 rm 應該就可以了。
> : 這些「字」應該都是少數,用 \path|I\_am\_a\_good\_man| 應該是
> : 還可以接受?
> path package 內部好像就是用改變 _ 等符號的 catcode 來達到換行的
> 目的.
> anyway, 用 \path|| 的確可以達到在 _ 換行的目的. 不過下面的情況還
> 是會發生:
> .......................... aaaaaaaaaaaaaaaaa
> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
> aaaaaaaaaaaaaaaaaaaaaa bbbbbbbbb_cccccccc_dddddddd
> _eeeeee_fffffff_ggggggg ....................
> ............................................
> 那個 ddddddddd 還是太長了, 帶 word 卻可以漂亮的處理.
> 可以寫一個簡單的 tex file 來測試 aaaaaaaaaaaaaa_bbbbbbbbbbbbbbb_
> cccccccccccccccccccc_ddddddddddddddddddd_eeeeeeeeeeeeeeeeee
> 這種類似的字串就可以感受到了.
我想請問的是,現實狀況有這種「字」嗎?:)
而且 MS Word 這樣處理的時候,他的文件 style 是處於如何的狀態?
* 是用 hyphen 的,還是 space?
> 另外 \path|| 跟其他 command 的搭配也有一些問題.
> 比方說 \path 不能放在 listings package 的 lstlisging environment
> 的 caption field 中. 也不不可以放在 longtable 的 caption environment
> 中....
> 所以有什麼方法可以讓 latex 在任何東西只要超出 margin 就把他斷行的
> 的命令嗎?
從理論而言,功能上是做得到,但簡單的幾個指令要做到這我就不清楚了。
而且,這樣一來,從其他角度來說,排版上的彈性就降低了。
能否請問一下,是什麼樣的情形下碰到這樣子的排版的呢?
ps.我的意思,不是說把 path package 拿來直接用,而是從裡頭修改來用。
--
故萬物一也,是其所美者為神奇,其所惡者為臭腐;
臭腐復化為神奇,神奇復化為臭腐。(莊子.知北遊)
--
※ Origin: SayYA 資訊站 <bbs.sayya.org>
◆ From: edt1023.sayya.org
> -------------------------------------------------------------------------- <
作者: halajohn (Wei Hu) 看板: LaTeX
標題: Re: [問題] 如何令 XX_XX_XX 這樣的字換行? 用 dis …
時間: Wed Oct 18 00:29:51 2006
※ 引述《Edward.bbs@bbs.sayya.org (蒙古大夫)》之銘言:
: 我想請問的是,現實狀況有這種「字」嗎?:)
: 而且 MS Word 這樣處理的時候,他的文件 style 是處於如何的狀態?
: * 是用 hyphen 的,還是 space?
要打程式的 design document 或 review document 或 coding notes 的時候,
往往就會使用程式裡面的 variable name, function name, class name etc.
這些名字裡面很常會碰到 _, 也很常會碰到不是正常英文字的 name
比方說
_opengl_es_software_render_rgba_span_singleline_write
這樣的東西在撰寫這類的文件時實在是太多了.
總不能說因為 latex 排版怪怪的, 所以要改名哩...
word 在排上面的 string 的時候, 發現一行排不下,
就會直接段行, 就在剛好切到 margin 的地方, 而且不會加上多餘的 - 或 space.
如:
..................................
..................................
...... _opengl_es_software_render_
_rgba_span_singleline_write ......
..................................
我覺得這樣漂亮多了.
: 從理論而言,功能上是做得到,但簡單的幾個指令要做到這我就不清楚了。
: 而且,這樣一來,從其他角度來說,排版上的彈性就降低了。
可是就像上面的那種很長的, 帶有 _ 的 string, 居然會排出 margin,
感覺這樣就是彈性降低啦.
但我想要正常的排版上, latex 幫我斷字且安排字與字之間的空格大小..etc.
所以我覺得比較有彈性的作法應該是弄一個特殊的 command, 或許包成一個 package.
然後:
usepackage{forcebreak}
...
I am blah blah \forcebreakhere{_opengl_es_software_render_rgba_span}
. How are you
這樣 /forcebreakhere 代表每一個 character 都可以當作 break word 的點.
: 能否請問一下,是什麼樣的情形下碰到這樣子的排版的呢?
: ps.我的意思,不是說把 path package 拿來直接用,而是從裡頭修改來用。
小弟的 tex 功力沒有強到可以修改現有 package 的地步阿.
這個斷行的問題困擾我很久了, 所以我的很多這樣的文件看起來就是不太對...
感覺就是怪怪的...
也不想回去用 word...
--
如果大眾臉是現實生活中的 OP 的話,那我就是花生米般的笑點
http://wei0905.spaces.live.com/
http://www.csie.ntu.edu.tw/~r88052/main/tw/index.php
※ 編輯: halajohn 來自: 218.168.201.245 (10/18 00:30)
> -------------------------------------------------------------------------- <
發信人: Edward.bbs@bbs.sayya.org (蒙古大夫), 看板: LaTeX
標 題: Re: [問題] 如何令 XX_XX_XX 這樣的字換行? 用 dis …
發信站: SayYA 資訊站 (Wed Oct 18 00:35:16 2006)
轉信站: ptt!ctu-reader!news.nctu!SayYa
※ 引述《halajohn.bbs@ptt.cc (Wei Hu)》之銘言:
> 要打程式的 design document 或 review document 的時候,
> 往往就會使用程式裡面的 variable name, function name, class name etc.
> 這些名字裡面很常會碰到 _, 也很常會碰到不是正常英文字的 name
> 比方說
> _opengl_es_software_render_rgba_span_singleline_write
> 這樣的東西在撰寫這類的文件時實在是太多了.
能不能提供一小段的實際 sample(會出問題的那種)?或者試看看在
texhax@tug.org (http://tug.org/mailman/listinfo/texhax)詢問
看看。
因為幾個這種字,還可以手動處理掉(\newline, \linebreak)但文件
中很多的話,可能需要特殊的 package 或 class 了。
> word 在排上面的 string 的時候, 發現一行排不下,
> 就會直接段行, 就在剛好切到 margin 的地方, 而且不會加上多餘的 - 或 space.
> 如:
> ..................................
> ..................................
> ...... _opengl_es_software_render_
> _rgba_span_singleline_write ......
> ..................................
> 我覺得這樣漂亮多了.
因為 line break 的機制並不一樣,視情況不同是各有利弊。
> : 從理論而言,功能上是做得到,但簡單的幾個指令要做到這我就不清楚了。
> : 而且,這樣一來,從其他角度來說,排版上的彈性就降低了。
> 可是就像上面的那種很長的, 帶有 _ 的 string, 居然會排出 margin,
> 感覺這樣就是彈性降低啦.
得看是什麼樣子的彈性,我指的是 TeX 把指令切割成很小單位的這種彈性。
這樣子他的組合性才會大。LaTeX 只不過是 TeX 的其中一種「大」macro
而已。
> : 能否請問一下,是什麼樣的情形下碰到這樣子的排版的呢?
> : ps.我的意思,不是說把 path package 拿來直接用,而是從裡頭修改來用。
> 小弟的 tex 功力沒有強到可以修改現有 package 的地步阿.
> 這個斷行的問題困擾我很久了, 所以我的很多這樣的文件看起來就是不太對...
> 感覺就是怪怪的...
> 也不想回去用 word...
我是覺得,如果 word 能完成你的工作,那就用吧!:)
word 是文書處理軟體,tex 是排版語言,我個人是認為位階並不太一樣,但
都一樣是工具,能完成手頭上的工作最重要。
--
故萬物一也,是其所美者為神奇,其所惡者為臭腐;
臭腐復化為神奇,神奇復化為臭腐。(莊子.知北遊)
--
※ Origin: SayYA 資訊站 <bbs.sayya.org>
◆ From: edt1023.sayya.org
> -------------------------------------------------------------------------- <
作者: halajohn (Wei Hu) 看板: LaTeX
標題: Re: [問題] 如何令 XX_XX_XX 這樣的字換行? 用 dis …
時間: Thu Oct 19 16:06:46 2006
※ 引述《Edward.bbs@bbs.sayya.org (蒙古大夫)》之銘言:
: ps.我的意思,不是說把 path package 拿來直接用,而是從裡頭修改來用。
這幾天在閒暇的時候就想了一下該怎麼解決
後來已經解決了.
我直接拿 url.sty 來改
在 url.sty 裡面有個 \linebreaks 的 macro 可用
在這個 macro 裡面加入大寫跟小寫的 letter,
然後在本文使用
\url{aaaaaaaaaaaa_bbbbbbbbbbbbbb_ccccccccccccccc}
就可以在任何地方斷字.
更細部的 fine tune 則是
1) 不要改 global 的 linebreaks, 新增一個 url package 的 style,
比方說, \def\url@allbreak{.....},
然後再裡面設定他專屬的 \linebreaks.
之後在本文使用
\urlstyle{allbreak}
\url{aaaaaaaaaaaaa_bbbbbbbbbbbbbbbb_ccccccccccccccc}
即可.
2) 通常我們會搭配 url.sty 跟 hyperref.sty 來用.
不過由 hyperref 的關係, 只要是 \url 的地方都會 hyperlinked.
這在很多只是想要在任何地方都可 break 的 string 上, 並不適合.
也就是說我不想在這種 string 上使用 hyperlink.
在看過 hyperref.sty 之後, 找不到或者是我能力不夠,
找不到可以把 hyperlink 拿掉的方法.
所以我另外把 url.sty 拷貝成 abstr.sty (all break string),
並在裡面改 \linebreaks 等設定.
這時可以直接改 global 的, 不需要新增一個 style.
之後可用
\abstr{aaaaaaaaaaa_bbbbbbbbbbbbbbb_cccccccccccccccc}
就可非常漂亮的解決這個斷字不漂亮的問題了.
Perfect~!
Wei Hu
--
如果大眾臉是現實生活中的 OP 的話,那我就是花生米般的笑點
http://wei0905.spaces.live.com/
http://www.csie.ntu.edu.tw/~r88052/main/tw/index.php
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.244.123.129