9

Is there a way to turn certain parts of the text on and off in LyX/Latex ?

I'm thinking of having something like an environment (lets call it "TL" for "traffic light") and a parameter t such that if I set for example t=0 (meaning the light shows "red") at the beginning, all pieces of my text that lie within the TL-environment aren't displayed in the compiled document - whereas if I set t=1 ("green") they are displayed ?

(I asked about something like such an environment following the idea that LyX maybe has special mechanism to do this - so any solution, not necessarily "hard-coded" ones via environments are welcome as long as they are easy to implement.)

8

Lyx solution:

Lyx can insert branches, that are boxes with chunks of text that can be activated or deactivated by label type.

In DocumentSettingsBranches you can define several branches and (De)activate) them in the list of Available Branches.

Then, in the main screen then you can assign some selected text to any of these with InsertBranch or make a new empty box if no text is selected. The box will be labelled with the name of the branch and the ✖ or ✔ symbol to show the (de)activated status.

For simplicity, you can also define branches from Insert menu, and (de)activate a branch in the contextual menu with a right-click in the label of a branch box, but you could find convenient also highlight branches with distinctives colors, only through the Document menu.

For example, in a exam with multiple choice questions, after each question you can insert a chunk of the branch "Short answers" showing the correct choice, as well as another chunk of the branch "Long answer" with the correct choice and some explanation of why this is the right answer. Then you can obtain a PDF of that exam with only the question, another including the short answers only for a quick check of each exam, and even a third PDF including the long answers for the student feed-back.

0
13

You can use the etoolbox to set up a boolean which is either true or false

\newbool{hidetrafficlight}
\setbool{hidetrafficlight}{false}

and then depending on what value it takes, use \AtBeginEnvironment from the etoolbox to comment out the environment using comment from the verbatim package

% set conditional behaviour of environment
\ifbool{hidetrafficlight}{\AtBeginEnvironment{trafficlight}{\comment}%
\AtEndEnvironment{trafficlight}{\endcomment}}{}

Complete MWE

\documentclass{article}
\usepackage{lipsum}
\usepackage{etoolbox}   % for booleans and much more
\usepackage{verbatim}   % for the comment environment

% setup a new boolean
\newbool{hidetrafficlight}
\setbool{hidetrafficlight}{false}

% new environment
\newenvironment{trafficlight}{}{}

% set conditional behaviour of environment
\ifbool{hidetrafficlight}{\AtBeginEnvironment{trafficlight}{\comment}%
\AtEndEnvironment{trafficlight}{\endcomment}}{}


\begin{document}

\subsection*{Traffic light environment}
\begin{trafficlight}
  \lipsum[1]
\end{trafficlight}

\subsection*{After traffic light}
\lipsum[2]

\end{document}
1
0

In LaTeX, a good solution is to use \if and \fi. This is much more robust to use inside other environments than creating a whole new environment for turning bits of text on and off:

\newif\iflongversion
%\longversiontrue   %<<< Uncomment as required
%\longversionfalse  %<<< Uncomment as required

Short version text...
\iflongversion
Long version text....
\fi

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.