def run_latex(self, cmd_wo_infile, path_outfile):
        '''Main runner for latex build

        Should compile the object's Latex template using a list of latex
        shell commands, along with an output file location. Runs the latex
        shell command until the process's .aux file remains unchanged.

        :return: STR template text that is ultimately rendered

        :param cmd_wo_infile: a list of subprocess commands omitting the
            input file (example: ['pdflatex'])
        :param path_outfile: the full path to the desired final output file
            Must contain the same file extension as files generated by
            cmd_wo_infile, otherwise the process will fail
        '''
        # Generate path variables
        text_template = self.get_text_template()
        path_template_random = random_name_filepath(self.path_template)
        path_template_dir = os.path.dirname(path_template_random)
        path_template_random_no_ext = os.path.splitext(path_template_random)[0]
        path_template_random_aux = path_template_random_no_ext + ".aux"
        ext_outfile = os.path.splitext(path_outfile)[-1]
        path_outfile_initial = "{}{}".format(
                path_template_random_no_ext, ext_outfile)

        # Handle special case of MS Word
        if cmd_wo_infile[0] == 'latex2rtf' and len(cmd_wo_infile) == 1:
            cmd_docx = cmd_wo_infile + ['-o', path_outfile_initial]
            # Need to run pdf2latex to generate aux file
            cmd_wo_infile = ['pdflatex']
        else:
            cmd_docx = None

        try:
            # Write template variable to a temporary file
            with open(path_template_random, 'w') as temp_file:
                temp_file.write(text_template)
            cmd = cmd_wo_infile + [path_template_random]
            old_aux, new_aux = random_str_uuid(1), random_str_uuid(2)
            while old_aux != new_aux:
                # Run the relevant Latex command until old aux != new aux
                stdout = check_output_cwd(cmd, path_template_dir)
                LOGGER.debug('\n'.join(stdout))
                old_aux, new_aux = new_aux, read_file(path_template_random_aux)

            # Handle special case of MS Word
            if cmd_docx:
                cmd_word = cmd_docx + [path_template_random]
                stdout = check_output_cwd(cmd_word, path_template_dir)
                LOGGER.debug('\n'.join(stdout))

            shutil.move(path_outfile_initial, path_outfile)
            LOGGER.info("Built {} from {}".format(
                path_outfile, self.path_template))
        except Exception:
            LOGGER.exception("Failed during latex build")
        finally:
            # Clean up all temporary files associated with the
            # random file identifier for the process files
            path_gen = list_filepathes_with_predicate(
                    path_template_dir, path_template_random_no_ext)
            for path_gen_file in path_gen:
                os.remove(path_gen_file)
        return text_template
Main runner for latex build

        Should compile the object's Latex template using a list of latex
        shell commands, along with an output file location. Runs the latex
        shell command until the process's .aux file remains unchanged.

        :return: STR template text that is ultimately rendered

        :param cmd_wo_infile: a list of subprocess commands omitting the
            input file (example: ['pdflatex'])
        :param path_outfile: the full path to the desired final output file
            Must contain the same file extension as files generated by
            cmd_wo_infile, otherwise the process will fail