docs: def _render_op(
              self, identifier, hs=None, dagger=False, args=None, superop=False):
          """Render an operator
  
          Args:
              identifier (str): The identifier (name/symbol) of the operator. May
                  include a subscript, denoted by '_'.
              hs (qnet.algebra.hilbert_space_algebra.HilbertSpace): The Hilbert
                  space in which the operator is defined
              dagger (bool): Whether the operator should be daggered
              args (list): A list of expressions that will be rendered with
                  :meth:`doprint`, joined with commas, enclosed in parenthesis
              superop (bool): Whether the operator is a super-operator
          """
          hs_label = None
          if hs is not None and self._settings['show_hs_label']:
              hs_label = self._render_hs_label(hs)
          name, total_subscript, total_superscript, args_str \
              = self._split_op(identifier, hs_label, dagger, args)
          if name.startswith(r'\text{'):
              name = name[6:-1]
          if self._is_single_letter(name):
              if superop:
                  name_fmt = self._settings['tex_sop_macro']
              else:
                  name_fmt = self._settings['tex_op_macro']
          else:
              if superop:
                  name_fmt = self._settings['tex_textsop_macro']
              else:
                  name_fmt = self._settings['tex_textop_macro']
          res = name_fmt.format(name=name)
          res = render_latex_sub_super(
              res, [total_subscript], [total_superscript],
              translate_symbols=True)
          res += args_str
          return res