Skip to content

Instantly share code, notes, and snippets.

@zr-tex8r
Last active August 25, 2019 13:55
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zr-tex8r/69c506626c4a8545ff4c95482cb55add to your computer and use it in GitHub Desktop.
Save zr-tex8r/69c506626c4a8545ff4c95482cb55add to your computer and use it in GitHub Desktop.
LaTeX: \reviewbreakall のようなナニカ
\documentclass{article}
\makeatletter %!!!!!!!!!!!!!!!!!!!!!!!!! TeX code BEGIN
\newif\ifreview@ba@break
\def\review@ba@end{\review@ba@end@}
\DeclareRobustCommand{\reviewbreakall}[1]{%
\begingroup
\review@ba@breakfalse
\review@break@all@a#1\review@ba@end
\endgroup
}
\def\review@break@all@a{%
\futurelet\review@ba@tok\review@break@all@b
}
\def\review@break@all@b{%
\ifx\review@ba@tok\review@ba@end
\let\next\@gobble
\else\ifx\review@ba@tok\@sptoken
\let\next\review@break@all@c
\else\ifx\review@ba@tok~%
\let\next\review@break@all@d
\else\ifx\review@ba@tok\bgroup
\let\next\review@break@all@e
\else
\let\next\review@break@all@ua
\fi\fi\fi\fi
\next
}
\expandafter\def\expandafter\review@break@all@c\space{%
\space
\review@ba@breakfalse
\review@break@all@a
}
\def\review@break@all@d#1{%
\review@break@all@f{\mbox{\space}}%
}
\def\review@break@all@e#1{%
\review@break@all@f{{#1}}%
}
\def\review@break@all@f#1{%
\ifreview@ba@break
\hskip0pt plus 0.02em\relax
\fi
#1%
\review@ba@breaktrue
\review@break@all@a
}
\def\review@ba@utfeight{utf8}
\def\review@break@all@ua#1{%
\let\next\review@break@all@f
\ifx\inputencodingname\review@ba@utfeight\ifcat\noexpand#1\noexpand~%
\chardef\review@ba@cc=`#1\relax
\message{<\the\review@ba@cc>}%
\ifnum\review@ba@cc<194
\let\next\review@break@all@f
\else\ifnum\review@ba@cc<224
\let\next\review@break@all@ub
\else\ifnum\review@ba@cc<240
\let\next\review@break@all@uc
\else\ifnum\review@ba@cc<244
\let\next\review@break@all@ud
\fi\fi\fi\fi
\fi\fi
\next#1%
}
\def\review@break@all@ub#1#2{\review@break@all@f{#1#2}}
\def\review@break@all@uc#1#2#3{\review@break@all@f{#1#2#3}}
\def\review@break@all@ud#1#2#3#4{\review@break@all@f{#1#2#3#4}}
\makeatother %!!!!!!!!!!!!!!!!!!!!!!!!! TeX code END
% These settings are just for testing.
\usepackage[prefernoncjk]{pxcjkcat}
\usepackage[T1]{fontenc}
\usepackage{lmodern,textcomp}
\begin{document}
\parbox{100pt}{\ttfamily\reviewbreakall{%
Lorem ipsum dolor sit amet,
consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat.
Duiș auțe îrure dolor în reprehenderit în voluptațe velit
esse cillum dolore eu fugiât nullă pariătur.
Excepteur sint occaecât cupidațât non proident,
sunt în culpă qui officiă deșerunt mollit anim id eșt lâborum.
¥¥¥¥¥¥¥¥¥¥€€€€€€€€€€
}%
}
\end{document}
@zr-tex8r
Copy link
Author

  • 各文字の間に \hskip0pt plus 0.02em\relaxを挿入して出力する
  • ただし空白トークンを読んだ場合は\spaceを実行
    • だから空白は行分割可能になり、行分割すると空白は消える
  • グループ{...}はそのまま一かたまりで出力する
  • ~を読んだ場合も空白を出力し、この空白は行分割可能で、かつ行末行頭にあっても消えない

仕様変更の要望があればZRさんに言いましょう。

@zr-tex8r
Copy link
Author

  • inputencによるUTF-8直接入力に対応した。
    ※inputencの意味での“入力エンコーディング”がutf8のときにのみ有効になる。(だからLuaTeXでは無効。)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment