[texhax] tabularx and titletoc/titlesec: harmful interaction?
Susan Dittmar
Susan.Dittmar at gmx.de
Tue Jul 17 18:35:13 CEST 2012
Hi folks,
I must be doing something wrong, but can't find it (probably due to my lack
of in depth understanding of TeX).
I want to have a program create a document. The contents is hierarchically
structured, but with a depth in this structure that exceeds the usual
section/subsection/... structure. Some months ago on this mailing list I
read an idea how to solve that, which I used since then. It makes use of
titlesec and titletoc to define a free-form section hierarchy. Then it
defines an environment that knows about the current hierarchy level and
enters into the next level, adding the appropriate section/subsection/...
header. This environment is the same no matter the current depth, keeping
track of the current depth via a counter (I called it mysecdepth).
All this works fine with ordinary text. But as soon as I add a tabularx
inside such a section, the depth tracking breaks down! Even though the
enclosing section reaches its end, and a new section on the same level as
the one containing the tabularx is started, this new section appears to be
a subsection of the one containing the tabularx!
(For an example, see end of this mail.)
I have the impression that using tabularx somehow changes the local change
of the counter mysecdepth into a global change. Is that the case? How can I
countermand this automatically?
Thanks a lot for any hints,
Susan
%%%%%%%%%% example: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass{article}
\usepackage{tabularx}
\makeatletter
\RequirePackage[loadonly]{titlesec}
\RequirePackage{titletoc}
\setcounter{secnumdepth}{2}
\setcounter{tocdepth}{2}
\newcounter{sectionI} \setcounter{sectionI}{0} \renewcommand{\thesectionI} {\arabic{sectionI}}
\newcounter{sectionII}[sectionI] \setcounter{sectionII}{0} \renewcommand{\thesectionII} {\thesectionI.\arabic{sectionII}}
\titleclass{\sectionI}[0] {straight}
\titleclass{\sectionII} {straight}[\sectionI]
\titleformat{\sectionI} [frame]{\sffamily\bfseries\upshape}{\filright\footnotesize\enspace NOTE \thetitle\enspace}{.5em}{\sffamily\bfseries\upshape\filcenter\large}[]
\titleformat{\sectionII} [frame]{\sffamily\bfseries\upshape}{\filright\footnotesize\enspace NOTE \thetitle\enspace}{.5em}{\sffamily\bfseries\upshape\filcenter\large}[]
\titlespacing{\sectionI} {0pt}{*1.5}{*1.5}
\titlespacing{\sectionII} {0pt}{*1.5}{*1.5}
\titlecontents{sectionI} [0em]{}{\thecontentslabel~}{\hspace*{-1.2em}}{\titlerule*[0.675pc]{.}\contentspage}[]
\titlecontents{sectionII} [0em]{}{\thecontentslabel~}{\hspace*{-1.2em}}{\titlerule*[0.675pc]{.}\contentspage}[]
\newcounter{mysecdepth}
\setcounter{mysecdepth}{0}
\newenvironment*{mysection}{%
\begingroup%
\advance\value{mysecdepth} by 1 % local assignment (??)
\ifcase\value{mysecdepth}%
\immediate\write16{mysection: counter mysecdepth has value 0! This should not be possible!}%
\expandafter\sectionI%
\or\expandafter\sectionI%
\or\expandafter\sectionII%
\else%
\immediate\write16{mysection: No more hierarchy levels!}%
\expandafter\sectionII%
\fi%
}{%
\par%
\endgroup%
}%
\makeatother
\begin{document}
\begin{mysection}{first section}
text of first section
\begin{mysection}{first subsection of first section}
text of first subsection of first section
\end{mysection}
\end{mysection}
\begin{mysection}{second section}
text of second section
\end{mysection}
\begin{mysection}{third section}
text of third section
\begin{tabularx}{\linewidth}{X}
This is a tabularx \\
just to show my problem.\\
\end{tabularx}
\end{mysection}
\begin{mysection}{fourth section}
text of fourth section, which falsely was chosen to
be first subsection of section tree
\end{mysection}
\end{document}
More information about the texhax
mailing list