Re: colortbl が cline を消す

名前: .
日時: 2011-12-20 04:34:57
IPアドレス: 59.134.169.*

>>56480 単に「自動化」といっても, ・56479 で挙げたような 「基本的なコマンドに還元した(いわば,インライン化した)記述」を 自動生成させる ということだけではなく, ・LaTeX 文書側では簡単な記述にしておいて,「LaTeX 側に」自動処理させる ということも考えられますね. 後者の方針による古いサンプルを発掘できていましたので,例示いたします. # あくまで「参考として」挙げるだけです. # 当面の問題はすでに別方針で解決しているようですから, # 下記のような処理を導入する必要などないでしょう. \documentclass{article} \usepackage[dvips]{color}%%% オプションは適宜変更してください. \usepackage{colortbl} \newcommand*{\mycolor}[1]{\cellcolor[rgb]{0.8,1,1}{#1}} %%% 下記のコードは 2001/02/13 v0.1j 版の colortbl パッケージに基づく. \makeatletter \newtoks\@CT@body \newbox\@CT@background \newbox\@CT@saved@background \newbox\@CT@contents \newbox\@CT@saved@contents \def\xcolortbl{% \@XCT@restore \setbox\@CT@saved@background\box\@CT@background \setbox\@CT@saved@contents\box\@CT@contents \@CT@body{}% \@CT@getbody\@empty} \long\def\@CT@getbody#1\end#2{% \def\@tempa{#2}% \@CT@body\expandafter\expandafter\expandafter{% \expandafter\the\expandafter\@CT@body#1}% \ifx\@tempa\@currenvir \expandafter\@firstoftwo \else \@CT@body\expandafter{\the\@CT@body\end{#2}}% \expandafter\@secondoftwo \fi {\end{xcolortbl}}{\@CT@getbody\@empty}} \let\@primitive@write\write \def\endxcolortbl{% \begingroup \let\@@elt\@elt \def\@elt##1{% \global\csname c@##1\endcsname\number\csname c@##1\endcsname\relax}% \edef\@CT@restore@counters{\cl@@ckpt}% \global\setbox\@CT@background\hbox{% \let\immediate\relax \def\write##1##{\@primitive@write\m@ne}% \long\def\protected@write##1##2##3{% \write\m@ne{}% \if@nobreak\ifvmode\nobreak\fi\fi}% \let\CT@setup\@CT@altsetup \expandafter\@endxcolortbl\expandafter{\the\@CT@body}}% \@CT@restore@counters \global\setbox\@CT@contents\hbox{% \def\CT@drsc@@h##1{\hskip\doublerulesep}% \def\CT@drsc@@v##1{\vskip\doublerulesep}% \let\CT@drsc@@\@gobble \let\CT@@do@color\relax \expandafter\@endxcolortbl\expandafter{\the\@CT@body}}% \endgroup \leavevmode \hbox{\rlap{\box\@CT@background}\box\@CT@contents}% \global\setbox\@CT@background\box\@CT@saved@background \global\setbox\@CT@contents\box\@CT@saved@contents} \long\def\@endxcolortbl#1{\begin{tabular}#1\end{tabular}} \def\@classvi{% \ifcase\@lastchclass \@acol \or \ifx\CT@drsc@\relax \@addtopreamble{\hskip\doublerulesep}% \else \@addtopreamble{{\CT@drsc@@h{\vrule\@width\doublerulesep}}}% \fi \or \@acol \or \@classvii \fi} \def\@xhline{% \ifx\reserved@a\hline {\ifx\CT@drsc@\relax \vskip\doublerulesep \else \CT@drsc@@v{\hrule\@height\doublerulesep}% \fi}% \fi \ifnum0=`{\fi}} \let\@CT@org@setup\@CT@setup \let\@CT@org@@do@color\CT@@do@color \def\@XCT@restore{% \def\CT@drsc@@##1{\CT@drsc@##1}% \let\CT@drsc@@h\CT@drsc@@ \let\CT@drsc@@v\CT@drsc@@ \let\@CT@setup\@CT@org@setup \let\CT@@do@color\@CT@org@@do@color} \@XCT@restore \def\@CT@altsetup{% \aftergroup\@CT@altsetup@ \@tempdimb\col@sep \@tempdimc\col@sep \def\CT@color{% \global\let\CT@do@color\CT@@do@color \color}} \def\@CT@altsetup@{% \setbox\z@\hbox{% \unhbox\z@ \skip@=\lastskip \xdef\@CT@altsetup@temp{\the\skip@}}% \setbox\z@\hbox{% \ifx \@CT@altsetup@temp\@CT@halfglue \hskip\stretch{.5}% \else\ifx\@CT@altsetup@temp\@CT@fullglue \else \hfill \fi\fi \phantom{\box\z@}% \ifx \@CT@altsetup@temp\@CT@halfglue \hskip\stretch{.5}% \else\ifx\@CT@altsetup@temp\@CT@fullglue \hfill \fi\fi}} \skip@=\stretch{.5} \edef\@CT@halfglue{\the\skip@} \skip@=\stretch{1} \edef\@CT@fullglue{\the\skip@} % %%% hhline パッケージ併用時に関する調整 \AtBeginDocument{% \ifx\hhline\@undefined\else \def\HH@box#1#2{% \vbox{{% \ifx\CT@drsc@\relax\else {\CT@drsc@@{\dimen@\tw@\arrayrulewidth \advance\dimen@\doublerulesep \hrule \@height\dimen@ \vskip-\dimen@}}% \fi \CT@arc@ \hrule \@height \arrayrulewidth \@width #1 \vskip\doublerulesep \hrule \@height \arrayrulewidth \@width #2}}}% \def\HH@loop{% \ifx\@tempb`% \def\next##1{\the\toks@\cr}% \else \let\next\HH@let \ifx\@tempb|% \if@tempswa \ifx\CT@drsc@\relax \HH@add{\hskip\doublerulesep}% \else \HH@add{{\CT@drsc@@h{\vrule\@width\doublerulesep}}}% \fi \fi \@tempswatrue \HH@add{{\CT@arc@\vline}}% \else \ifx\@tempb:% \if@tempswa \ifx\CT@drsc@\relax \HH@add{\hskip\doublerulesep}% \else \HH@add{{\CT@drsc@@h{\vrule\@width\doublerulesep}}}% \fi \fi \@tempswatrue \HH@add{\@tempc\HH@box\arrayrulewidth\arrayrulewidth\@tempc}% \else \ifx\@tempb##% \if@tempswa \HH@add{\hskip\doublerulesep}\fi \@tempswatrue \HH@add{{\CT@arc@\vline\copy\@ne\@tempc\vline}}% \else \ifx\@tempb~% \@tempswafalse \if@firstamp \@firstampfalse \else \HH@add{&\omit}% \fi \ifx\CT@drsc@\relax \HH@add{\hfil} \else \HH@add{{% \CT@drsc@@{\leaders\hrule\@height\doublerulesep}% \hfil}}% \fi \else \ifx\@tempb-% \@tempswafalse \if@firstamp \@firstampfalse \else \HH@add{&\omit}% \fi \HH@add{{% \CT@arc@ \leaders\hrule\@height\arrayrulewidth\hfil}}% \else \ifx\@tempb=% \@tempswafalse \if@firstamp \@firstampfalse \else \HH@add{&\omit}% \fi \HH@add{% \rlap{\copy\@ne}% \leaders\copy\@ne\hfil \llap{\copy\@ne}}% \else \ifx\@tempb t% \HH@add{\HH@box\doublerulesep\z@}% \@tempswafalse \else \ifx\@tempb b% \HH@add{\HH@box\z@\doublerulesep}% \@tempswafalse \else \ifx\@tempb>% \def\next##1##2{% \HH@add{% {\baselineskip\p@\relax ##2% \global\setbox\@ne \HH@box\doublerulesep \doublerulesep}}% \HH@let!}% \else \PackageWarning{hhline}% {\meaning\@tempb\space ignored in \noexpand\hhline argument\MessageBreak}% \fi \fi \fi \fi \fi \fi \fi \fi \fi \fi \next}% \fi} %%% ファイル colortbl.sty には longtable パッケージとの整合性を図るための %%% コードもあるが,longtable 環境への対処は保留. %%% 実際,今の xcolortbl 環境は表全体を読み込んだうえで「網掛け部分」および %%% 「表の中身と罫線」を別々に組んでそれらを組み合わせているが, %%% longtable 環境についてはそのような方法はとりにくい. %%% %%% なお,xcolortbl 環境がネストする場合には,内側の xcolortbl 環境の全体を %%% {,} で囲む必要がある(これは,tabularx 環境などと同様). \makeatother \begin{document} %%% 何もしない場合 \begin{tabular}{|c|c|}\hline ABC & \mycolor{DEF} \\ \hline GHI & \mycolor{JKL} \\ \cline{2-2} % <= これが消えてしまう MNO & \mycolor{PQR} \\ \hline \end{tabular}% \quad %%% 色付けを行わない場合(比較用) \begin{tabular}{|c|c|}\hline ABC & DEF \\ \hline GHI & JKL \\ \cline{2-2} MNO & PQR \\ \hline \end{tabular}% \quad %%% ネタ \begin{xcolortbl}{|c|c|}\hline ABC & \mycolor{DEF} \\ \hline GHI & \mycolor{JKL} \\ \cline{2-2} MNO & \mycolor{PQR} \\ \hline \end{xcolortbl} \end{document} # まあ,こういう「ダンピング」をやるから自分の首を絞めているのですが. なお,こういう処理は「100% ネタ」というわけでもありません. 実際,単純に colortbl パッケージを用いた場合には,PDF 化した場合などに 色付けを行ったセルの周囲の罫線が(消えないまでも)「見えにくく」 なることがあり,その点をとある仕事でツッコまれたことがありました.

この書き込みへの返事:

お名前
題名 
メッセージ(タグは <a href="...">...</a> だけ使えます。適宜改行を入れてください)