8

I have a command definition in my LaTeX preamble:

\newcommand*{\code}[1]{\texttt{#1}}

But the usage of this command appears as an ERT e.g. \code{select}. I would like this to appear as select that is, italics. How to do this?

3
  • 2
    what is an ERT? And exactly what do you want to do? Will changing \texttt with \textit solve your problem? Oct 31, 2010 at 8:12
  • 2
    @Juan: ERT is Lyxspeak for Evil Red Text, meaning Lyx's pretensions to be a graphical editor are compromised. Oct 31, 2010 at 9:54
  • Hi, is there some progress in this question? I would like to be able to do the same but for textcolors.
    – Santiago
    Feb 24, 2015 at 19:20

4 Answers 4

7

You need to tell Lyx how it is to mark up the command, by changing the layout you use, or, probably the right thing, defining a module.

Rob Oakes has written a weblog post, Customizing Lyx: An Introduction to Modules. His explanation make it look quite simple to do, although I've never tried.

1
  • I knew about Rob Oakes' post but it is way too complicated for my simple task.
    – amit kumar
    Nov 7, 2010 at 12:39
4

I was able to extract my answer from Rob's another article here: Close your lyx file from within lyx editor. Put the following near the top of your lyx file after \end_modules using a text editor. Reopen the lyx file using the lyx editor. Then you can customize a part of your text by: Select text > Right Click > Text Styles > Charstyle:code.

 \begin_local_layout
    Format 7
      InsetLayout    CharStyle:Code
      LyxType               charstyle
      LabelString           code
      LatexType             command
      LatexName             code
      Font
        Family              Sans
        Color               Green
      EndFont
      Preamble
        \newcommand*{\code}[1]{\texttt{#1}}
      EndPreamble
    End
 \end_local_layout

To use the same layout for a different document, use File > New from Template.

1
  • Hi, I know is some sort of old question. But I don't get it, I can't find this \end_modules in my document. And isn't there by now a simpler answer. I just want that if someone defines \newcommand{\comment}[1]{\textcolor{red}{#1}}, in the latex file, I am able to see the color in my Lyx file. It cannot be that difficult to just replace this command as it is done with the math macros.
    – Santiago
    Feb 24, 2015 at 19:19
1

Even though it's been some years, I think it makes sense to add here how to add custom citation commands to LyX. I did this in order to use the biblatex commands \parencite and \textcite after including biblatex support in LyX following this guide on LyX wiki

Because the changes to Options>Local Layout which are mentioned in Section "Note on the natbib compatibility mode:" there didn't work for me, (LyX 2.2.1), I included support for the two commands mentioned above by myself.

The approach was inspired (in fact, much was copy'n'pasted) from /usr/share/lyx/layouts/natbib.module

The following listing describes to LyX how to display a citation type and which LaTeX command to use for it. Look into the LyX manual about customization (Help>Customization), section "5.3.12 Citation format description" to get a bit of detail about the used language. To summarize, expressions like %author% print a bibliography field, !macroname DEF define a macro which gets replaced by DEF if writing %!macroname% somewhere. %fieldname%[[SOMETHING]][[ELSE]] are conditional expressions where SOMETHING is only printed if %fieldname% is not empty, else ELSE is printed (or nothing if the second [[...]] statement is omitted). %next% is relevant if there are multiple citations selected in the LyX citation dialogue. It is not empty for as many calls as there are citations and each call to %next% changes the other fields like %author% to the next citation. Everything after # is a comment.

I added the following to Options>Local Layout:

CiteEngine default
    # [][] indicate that this command accepts pre- and post-text if set
    # in the LyX dialog ("see" and "p. 123" in 
    # "(see Miller, 1990, p. 123)")
    # This also states which LaTeX command must be used.

    # Makes an error in LyX cite dialog. Commands seemingly must 
    # start with 'cite...'
    #parencite[][] 

    # Put \let\citep\parencite in document preamble
    citep[][]      
End
CiteFormat default
    # Macros to print user text if specified in LyX dialog
    !textbefore {%textbefore%[[%textbefore% ]]}
    !textafter {%textafter%[[, %textafter%]]}
    # Macros to print bibtex fields or '??' if bibtex field is empty
    !abbrvauthor {%abbrvauthor%[[%abbrvauthor%]][[??]]}
    !year {%year%[[%year%]][[??]]}{%modifier%[[%modifier%]]}

    # Opening and closing characters. Useful to define as macros if
    # multiple citation commands are defined
    !open (
    !sep ;
    !close )

    # These two call each other until there are no citations left
    !citealp %!abbrvauthor%, %!year%%!nextcitealp%
    !nextcitealp {%next%[[%!sep% %!citealp%]]}

    # Main definition
    citep %!open%%!textbefore%%!citealp%%!textafter%%!close%
    # May include additional commands if added in `CiteEngine` section
    # as well. See /usr/share/lyx/layouts/natbib.layout
    # citet %!open%%!textbefore%%!citealt%%!textafter%%!close%

End

I added the biblatex import statement into my documents' preamble, as mentioned in the link above. I get an error if defining parencite directly in the Local Format as stated in comment above, therefore I added an alias called \citep.

% --- As advised in wiki article linked above -----------------------
\usepackage{polyglossia} % Load if using biblatex with {Xe,Lua}LaTeX

\usepackage[style=authoryear,backend=biber]{biblatex} 
\addbibresource{my.bib} % Put your .bib file here
% -------------------------------------------------------------------

% Add the alias for \parencite like mentioned above
% \citep now means the same as \parencite
\let\citep\parencite   
1

You can also copy the text which @phaedrus wrote in his answer to the Field in Document > Settings... > Local Layout. Use this portion of his code:

InsetLayout    CharStyle:Code
  LyxType               charstyle
  LabelString           code
  LatexType             command
  LatexName             code
  Font
    Family              Sans
    Color               Green
  EndFont
  Preamble
    \newcommand*{\code}[1]{\texttt{#1}}
  EndPreamble
End

search for "InsetLayout" in the Help > Customization manual to get explanation.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .