Use headcommand in \definedescription together with \definehighlight
Hi, I was in the process to convert an itemize part to a description and wanted to simplify the code in the same move. I discovered headcommand for that, but struggled to set the text in an highlight _and_ make a colon at the end. Do you know, if this is possible? Here is a MWE: ``` \definehighlight[hl][style={\m{>}\,\switchtobodyfont[tt]}] \definedescription[category][ alternative=top, headstyle=bold, width=broad, ] \definedescription[desc][ width=broad, distance={\widthofstring{~}}, headcommand={\groupedcommand{\hl}{:}}, % headcommand={\groupedcommand{}{:}}, % this compiles but the highlight is lost % headcommand={\groupedcommand{\starthl}{\stophl :}}, % this does not compile headstyle=, before={\startpacked}, after={\stoppacked}, alternative=hanging, ] \starttext This is a \hl{highlight}. Some listings \startcategory{Itemize} \startitemize[packed] \item \hl{first}: one \item \hl{second}: two \stopitemize \stopcategory Now the same as desc: \startcategory{Desc} \startdesc{first} one \stopdesc \startdesc{second} two \stopdesc \stopcategory \stoptext ``` The itemize looks like it should look (except of the dots). Best, Gerion
On Mon, 24 Jun 2024, Gerion Entrup wrote:
Hi,
I was in the process to convert an itemize part to a description and wanted to simplify the code in the same move. I discovered headcommand for that, but struggled to set the text in an highlight _and_ make a colon at the end.
Not sure what exactly you want, but how about: \definehighlight[hl][style={\m{>}\,\switchtobodyfont[tt]}] % This is the wrong way to define such a command as '>' is not part of the style. I have left this definition just for comparison with the soln below. \definedescription[category][ alternative=top, headstyle=bold, width=broad, ] \definedescription[desc][ width=fit, distance={\widthofstring{~}}, headcommand={\groupedcommand{>\,}{:}}, headstyle=\tt, before={\startpacked}, after={\stoppacked}, alternative=hanging, ] \starttext This is a \hl{highlight}. Some listings \startcategory{Itemize} \startitemize[packed] \item \hl{first}: one \item \hl{second}: two \stopitemize \stopcategory Now the same as desc: \startcategory{Desc} \startdesc{first} one \stopdesc \startdesc{second} two \stopdesc \stopcategory \stoptext Aditya
Am Montag, 24. Juni 2024, 21:20:19 MESZ schrieb Aditya Mahajan:
On Mon, 24 Jun 2024, Gerion Entrup wrote:
Hi,
I was in the process to convert an itemize part to a description and wanted to simplify the code in the same move. I discovered headcommand for that, but struggled to set the text in an highlight _and_ make a colon at the end.
Not sure what exactly you want, but how about:
\definehighlight[hl][style={\m{>}\,\switchtobodyfont[tt]}] % This is the wrong way to define such a command as '>' is not part of the style. I have left this definition just for comparison with the soln below.
Is there a better way to define a highlight that sets a style (color, font) _and_ a prefix (symbol)? Another way, I know of, would be just a plain def, something like \def{\hl}{\groupedcommand{>\,\switchtobodyfont[tt]}{}}, but actually I want to define a highlight (just with an additional prefix).
\definedescription[category][ alternative=top, headstyle=bold, width=broad, ]
\definedescription[desc][ width=fit, distance={\widthofstring{~}}, headcommand={\groupedcommand{>\,}{:}},
Hmm, this works, but duplicates the above definition. If I don't want to use > as prefix but ›, I need to replace it in two places.
headstyle=\tt, before={\startpacked}, after={\stoppacked}, alternative=hanging, ]
Gerion
Gerion Entrup schrieb am 24.06.2024 um 23:57:
Am Montag, 24. Juni 2024, 21:20:19 MESZ schrieb Aditya Mahajan:
On Mon, 24 Jun 2024, Gerion Entrup wrote:
Hi,
I was in the process to convert an itemize part to a description and wanted to simplify the code in the same move. I discovered headcommand for that, but struggled to set the text in an highlight _and_ make a colon at the end. Not sure what exactly you want, but how about:
\definehighlight[hl][style={\m{>}\,\switchtobodyfont[tt]}] % This is the wrong way to define such a command as '>' is not part of the style. I have left this definition just for comparison with the soln below. Is there a better way to define a highlight that sets a style (color, font) _and_ a prefix (symbol)? Another way, I know of, would be just a plain def, something like \def{\hl}{\groupedcommand{>\,\switchtobodyfont[tt]}{}}, but actually I want to define a highlight (just with an additional prefix).
1. ConTeXt already uses \hl as name for a existing command. 2. Use \definestartstop: \definestartstop [gerion] [style=mono,left={›\thinspace}] \starttext text \gerion{text} \stoptext
\definedescription[category][ alternative=top, headstyle=bold, width=broad, ]
\definedescription[desc][ width=fit, distance={\widthofstring{~}},
distance=\spaceamount, Wolfgang
Am Dienstag, 25. Juni 2024, 00:09:09 MESZ schrieb Wolfgang Schuster:
Gerion Entrup schrieb am 24.06.2024 um 23:57:
Am Montag, 24. Juni 2024, 21:20:19 MESZ schrieb Aditya Mahajan:
On Mon, 24 Jun 2024, Gerion Entrup wrote:
Hi,
I was in the process to convert an itemize part to a description and wanted to simplify the code in the same move. I discovered headcommand for that, but struggled to set the text in an highlight _and_ make a colon at the end. Not sure what exactly you want, but how about:
\definehighlight[hl][style={\m{>}\,\switchtobodyfont[tt]}] % This is the wrong way to define such a command as '>' is not part of the style. I have left this definition just for comparison with the soln below. Is there a better way to define a highlight that sets a style (color, font) _and_ a prefix (symbol)? Another way, I know of, would be just a plain def, something like \def{\hl}{\groupedcommand{>\,\switchtobodyfont[tt]}{}}, but actually I want to define a highlight (just with an additional prefix).
1. ConTeXt already uses \hl as name for a existing command.
2. Use \definestartstop:
\definestartstop [gerion] [style=mono,left={›\thinspace}]
\starttext
text
\gerion{text}
\stoptext
\definedescription[category][ alternative=top, headstyle=bold, width=broad, ]
\definedescription[desc][ width=fit, distance={\widthofstring{~}},
distance=\spaceamount,
Wolfgang
This seems to be much better but does not lead to the wanted result. The full example now is: ``` \definestartstop[myhl][style=mono,left={›\thinspace}] \definedescription[categorie][ alternative=top, headstyle=bold, width=broad, ] \definedescription[desc][ width=broad, distance=\spaceamount, headcommand={\groupedcommand{\startmyhl}{\stopmyhl :}}, headstyle=, before={\startpacked}, after={\stoppacked}, alternative=hanging ] \starttext This is a \myhl{highlight}. Some listings \startcategorie{Itemize} \startitemize[packed] \item \myhl{first}: one \item \myhl{second}: two \stopitemize \stopcategorie Now the same as desc: \startcategorie{Desc} \startdesc{first} one \stopdesc \startdesc{second} two \stopdesc \stopcategorie \stoptext ``` This adopts the correct style in \startdesc \stopdesc and sets the colon but omits the › (the left part). Gerion
Gerion Entrup schrieb am 25.06.2024 um 08:41:
Am Dienstag, 25. Juni 2024, 00:09:09 MESZ schrieb Wolfgang Schuster:
Gerion Entrup schrieb am 24.06.2024 um 23:57:
Am Montag, 24. Juni 2024, 21:20:19 MESZ schrieb Aditya Mahajan:
On Mon, 24 Jun 2024, Gerion Entrup wrote:
Hi,
I was in the process to convert an itemize part to a description and wanted to simplify the code in the same move. I discovered headcommand for that, but struggled to set the text in an highlight _and_ make a colon at the end. Not sure what exactly you want, but how about:
\definehighlight[hl][style={\m{>}\,\switchtobodyfont[tt]}] % This is the wrong way to define such a command as '>' is not part of the style. I have left this definition just for comparison with the soln below. Is there a better way to define a highlight that sets a style (color, font) _and_ a prefix (symbol)? Another way, I know of, would be just a plain def, something like \def{\hl}{\groupedcommand{>\,\switchtobodyfont[tt]}{}}, but actually I want to define a highlight (just with an additional prefix).
1. ConTeXt already uses \hl as name for a existing command.
2. Use \definestartstop:
\definestartstop [gerion] [style=mono,left={›\thinspace}]
\starttext
text
\gerion{text}
\stoptext
\definedescription[category][ alternative=top, headstyle=bold, width=broad, ]
\definedescription[desc][ width=fit, distance={\widthofstring{~}},
distance=\spaceamount,
Wolfgang
This seems to be much better but does not lead to the wanted result. The full example now is: ``` \definestartstop[myhl][style=mono,left={›\thinspace}]
\definedescription[categorie][ alternative=top, headstyle=bold, width=broad, ]
\definedescription[desc][ width=broad, distance=\spaceamount, headcommand={\groupedcommand{\startmyhl}{\stopmyhl :}}, headstyle=, before={\startpacked}, after={\stoppacked}, alternative=hanging ]
\starttext
This is a \myhl{highlight}.
Some listings
\startcategorie{Itemize} \startitemize[packed] \item \myhl{first}: one \item \myhl{second}: two \stopitemize \stopcategorie
Now the same as desc: \startcategorie{Desc} \startdesc{first} one \stopdesc \startdesc{second} two \stopdesc \stopcategorie
\stoptext ```
This adopts the correct style in \startdesc \stopdesc and sets the colon but omits the › (the left part).
You can do the following in the next version. 1. Add "arguments=yes" to \definestartstop to enable the optional argument for the new command. 2. Use the new commands with the "headcommand" key and apply ":" as right delimiter for the content of \Highlight. \definestartstop [Highlight] [arguments=yes, style=mono, left={›\thinspace}] \definedescription [description] [ width=broad, distance=\spaceamount, headcommand=\Highlight[right=:], alternative=hanging] \starttext This is a \Highlight{highlight}. \startdescription[title={Lorem ipsum}] \samplefile{lorem} \stopdescription \stoptext Wolfgang
Am Donnerstag, 27. Juni 2024, 22:19:02 MESZ schrieb Wolfgang Schuster:
Gerion Entrup schrieb am 25.06.2024 um 08:41:
Am Dienstag, 25. Juni 2024, 00:09:09 MESZ schrieb Wolfgang Schuster:
Gerion Entrup schrieb am 24.06.2024 um 23:57:
Am Montag, 24. Juni 2024, 21:20:19 MESZ schrieb Aditya Mahajan:
On Mon, 24 Jun 2024, Gerion Entrup wrote:
Hi,
I was in the process to convert an itemize part to a description and wanted to simplify the code in the same move. I discovered headcommand for that, but struggled to set the text in an highlight _and_ make a colon at the end. Not sure what exactly you want, but how about:
\definehighlight[hl][style={\m{>}\,\switchtobodyfont[tt]}] % This is the wrong way to define such a command as '>' is not part of the style. I have left this definition just for comparison with the soln below. Is there a better way to define a highlight that sets a style (color, font) _and_ a prefix (symbol)? Another way, I know of, would be just a plain def, something like \def{\hl}{\groupedcommand{>\,\switchtobodyfont[tt]}{}}, but actually I want to define a highlight (just with an additional prefix).
1. ConTeXt already uses \hl as name for a existing command.
2. Use \definestartstop:
\definestartstop [gerion] [style=mono,left={›\thinspace}]
\starttext
text
\gerion{text}
\stoptext
\definedescription[category][ alternative=top, headstyle=bold, width=broad, ]
\definedescription[desc][ width=fit, distance={\widthofstring{~}},
distance=\spaceamount,
Wolfgang
This seems to be much better but does not lead to the wanted result. The full example now is: ``` \definestartstop[myhl][style=mono,left={›\thinspace}]
\definedescription[categorie][ alternative=top, headstyle=bold, width=broad, ]
\definedescription[desc][ width=broad, distance=\spaceamount, headcommand={\groupedcommand{\startmyhl}{\stopmyhl :}}, headstyle=, before={\startpacked}, after={\stoppacked}, alternative=hanging ]
\starttext
This is a \myhl{highlight}.
Some listings
\startcategorie{Itemize} \startitemize[packed] \item \myhl{first}: one \item \myhl{second}: two \stopitemize \stopcategorie
Now the same as desc: \startcategorie{Desc} \startdesc{first} one \stopdesc \startdesc{second} two \stopdesc \stopcategorie
\stoptext ```
This adopts the correct style in \startdesc \stopdesc and sets the colon but omits the › (the left part).
You can do the following in the next version.
1. Add "arguments=yes" to \definestartstop to enable the optional argument for the new command.
2. Use the new commands with the "headcommand" key and apply ":" as right delimiter for the content of \Highlight.
\definestartstop [Highlight] [arguments=yes, style=mono, left={›\thinspace}]
\definedescription [description] [ width=broad, distance=\spaceamount, headcommand=\Highlight[right=:], alternative=hanging]
\starttext
This is a \Highlight{highlight}.
\startdescription[title={Lorem ipsum}] \samplefile{lorem} \stopdescription
\stoptext
Wolfgang
Thanks, that will work. Do you know, why the groupedcommand solution does not work? Gerion
Gerion Entrup schrieb am 28.06.2024 um 11:40:
Do you know, why the groupedcommand solution does not work?
The command and the environment which are created by \definestartstop can't be interchanged when you use the before/after and left/right keys. %%%% begin example \usemodule[visual] \definestartstop [Example] [before={\par\leftaligned{\tttf [before]}\par}, after={\par\leftaligned{\tttf [after]}\par}, left={{\tttf [left]}}, right={{\tttf [right]}}] \starttext \fakewords{10}{20} \startExample \fakewords{10}{20} \stopExample \fakewords{10}{20} \blank \fakewords{3}{5} \Example{\fakewords{3}{5}} \fakewords{3}{5} \stoptext %%%% end example Wolfgang
Am Freitag, 28. Juni 2024, 11:59:19 MESZ schrieb Wolfgang Schuster:
Gerion Entrup schrieb am 28.06.2024 um 11:40:
Do you know, why the groupedcommand solution does not work?
The command and the environment which are created by \definestartstop can't be interchanged when you use the before/after and left/right keys.
%%%% begin example \usemodule[visual]
\definestartstop [Example] [before={\par\leftaligned{\tttf [before]}\par}, after={\par\leftaligned{\tttf [after]}\par}, left={{\tttf [left]}}, right={{\tttf [right]}}]
\starttext
\fakewords{10}{20} \startExample \fakewords{10}{20} \stopExample \fakewords{10}{20}
\blank
\fakewords{3}{5} \Example{\fakewords{3}{5}} \fakewords{3}{5}
\stoptext %%%% end example
Wolfgang
Ok, thanks for the explanation (I have added the example to the wiki). Gerion
participants (3)
-
Aditya Mahajan
-
Gerion Entrup
-
Wolfgang Schuster