# append a different custom label to the default label of an environment

I am new to LaTeX. I'm trying to adjust a basic template (from http://www.latextemplates.com/template/programming-coding-assignment) so that I can append a default environment label. For instance, I'd like to take this environment:

\newcommand{\homeworkProblemName}{}
\newenvironment{homeworkProblem}[1][Part \Alph{homeworkProblemCounter}]{...}


and adjust it so that I can append the default label with some line of text that could be unique (or omitted) on subsequent homeworkProblem environments.

\begin{homeworkProblem}
...
\end{homeworkProblem}


Results in:

# PART A

but i would like to append that label with a custom description like:

# PART A - The First Part

In subsequent homeworkProblem environments, I'd like the default label to progress normally (Part B, C, ...) but allow a unique phrase to be append each (The Second Part, The Third Part, ...).

I realize I can use the [1] argument and simply pass "[Part A - The First Part]", but I'd like the "Part A", "B", "C" (etc) portion to iterate naturally without my passing [Part A ...] as part of the argument.

This must be simple, but I've had a hard time finding a solution. Thanks for your help.

• – Werner Oct 20 '16 at 4:52

You need to condition on whether or not an optional argument is supplied to homeworkProblem (see How to check if a macro value is empty or will not create text with plain TeX conditionals?). The following definition is sufficient:

\newenvironment{homeworkProblem}[1][]{%
\stepcounter{homeworkProblemCounter}%
\if\relax\detokenize{#1}\relax
\renewcommand{\homeworkProblemName}{Part \Alph{homeworkProblemCounter}}%
\else
\renewcommand{\homeworkProblemName}{Part \Alph{homeworkProblemCounter} - #1}%
\fi
\section{\homeworkProblemName}
}{%
}


For reference, here is the complete code for the template example using

\begin{homeworkProblem}[first]
% ...
\end{homeworkProblem}


for the first problem and

\begin{homeworkProblem}
% ...
\end{homeworkProblem}


for the second:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Programming/Coding Assignment
% LaTeX Template
%
% http://www.latextemplates.com
%
% Original author:
% Ted Pavlic (http://www.tedpavlic.com)
%
% Note:
% The \lipsum[#] commands throughout this template generate dummy text
% to fill the template out. These commands should all be removed when
% writing assignment content.
%
% This template uses a Perl script as an example snippet of code, most other
% languages are also usable. Configure them in the "CODE INCLUSION
% CONFIGURATION" section.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%----------------------------------------------------------------------------------------
%   PACKAGES AND OTHER DOCUMENT CONFIGURATIONS
%----------------------------------------------------------------------------------------

\documentclass{article}

\usepackage{fancyhdr} % Required for custom headers
\usepackage{lastpage} % Required to determine the last page for the footer
\usepackage{extramarks} % Required for headers and footers
\usepackage[usenames,dvipsnames]{color} % Required for custom colors
\usepackage{graphicx} % Required to insert images
\usepackage{listings} % Required for insertion of code
\usepackage{courier} % Required for the courier font
\usepackage{lipsum} % Used for inserting dummy 'Lorem ipsum' text into the template

% Margins
\topmargin=-0.45in
\evensidemargin=0in
\oddsidemargin=0in
\textwidth=6.5in
\textheight=9.0in

% Set up the header and footer
\pagestyle{fancy}
\lfoot{\lastxmark} % Bottom left footer
\cfoot{} % Bottom center footer
\rfoot{Page\ \thepage\ of\ \protect\pageref{LastPage}} % Bottom right footer
\renewcommand\footrulewidth{0.4pt} % Size of the footer rule

\setlength\parindent{0pt} % Removes all indentation from paragraphs

%----------------------------------------------------------------------------------------
%   CODE INCLUSION CONFIGURATION
%----------------------------------------------------------------------------------------

\definecolor{MyDarkGreen}{rgb}{0.0,0.4,0.0} % This is the color used for comments
\lstloadlanguages{Perl} % Load Perl syntax for listings, for a list of other languages supported see: ftp://ftp.tex.ac.uk/tex-archive/macros/latex/contrib/listings/listings.pdf
\lstset{language=Perl, % Use Perl in this example
frame=single, % Single frame around code
basicstyle=\small\ttfamily, % Use small true type font
keywordstyle=[1]\color{Blue}\bf, % Perl functions bold and blue
keywordstyle=[2]\color{Purple}, % Perl function arguments purple
keywordstyle=[3]\color{Blue}\underbar, % Custom functions underlined and blue
identifierstyle=, % Nothing special about identifiers
stringstyle=\color{Purple}, % Strings are purple
showstringspaces=false, % Don't put marks in string spaces
tabsize=5, % 5 spaces per tab
%
% Put standard Perl functions not included in the default language here
morekeywords={rand},
%
% Put Perl function parameters here
morekeywords=[2]{on, off, interp},
%
% Put user defined functions here
morekeywords=[3]{test},
%
morecomment=[l][\color{Blue}]{...}, % Line continuation (...) like blue comment
numbers=left, % Line numbers on left
numberstyle=\tiny\color{Blue}, % Line numbers are blue and small
stepnumber=5 % Line numbers go in steps of 5
}

% Creates a new command to include a perl script, the first parameter is the filename of the script (without .pl), the second parameter is the caption
\newcommand{\perlscript}[2]{
\begin{itemize}
\item[]\lstinputlisting[caption=#2,label=#1]{#1.pl}
\end{itemize}
}

%----------------------------------------------------------------------------------------
%   DOCUMENT STRUCTURE COMMANDS
%   Skip this unless you know what you're doing
%----------------------------------------------------------------------------------------

% Header and footer for when a page split occurs within a problem environment
\nobreak\extramarks{#1}{#1 continued on next page\ldots}\nobreak
\nobreak\extramarks{#1 (continued)}{#1 continued on next page\ldots}\nobreak
}

% Header and footer for when a page split occurs between problem environments
\nobreak\extramarks{#1 (continued)}{#1 continued on next page\ldots}\nobreak
\nobreak\extramarks{#1}{}\nobreak
}

\setcounter{secnumdepth}{0} % Removes default section numbers
\newcounter{homeworkProblemCounter} % Creates a counter to keep track of the number of problems

\newcommand{\homeworkProblemName}{}
\newenvironment{homeworkProblem}[1][]{ % Makes a new environment called homeworkProblem which takes 1 argument (custom name) but the default is "Problem #"
\stepcounter{homeworkProblemCounter} % Increase counter for number of problems
\if\relax\detokenize{#1}\relax
\renewcommand{\homeworkProblemName}{Part \Alph{homeworkProblemCounter}} % Assign \homeworkProblemName the name of the problem
\else
\renewcommand{\homeworkProblemName}{Part \Alph{homeworkProblemCounter} - #1}%
\fi
\section{\homeworkProblemName} % Make a section in the document with the custom problem count
}{
}

\newcommand{\problemAnswer}[1]{ % Defines the problem answer command with the content as the only argument
\noindent\framebox[\columnwidth][c]{\begin{minipage}{0.98\columnwidth}#1\end{minipage}} % Makes the box around the problem answer and puts the content inside
}

\newcommand{\homeworkSectionName}{}
\newenvironment{homeworkSection}[1]{ % New environment for sections within homework problems, takes 1 argument - the name of the section
\renewcommand{\homeworkSectionName}{#1} % Assign \homeworkSectionName to the name of the section from the environment argument
\subsection{\homeworkSectionName} % Make a subsection with the custom name of the subsection
}{
}

%----------------------------------------------------------------------------------------
%   NAME AND CLASS SECTION
%----------------------------------------------------------------------------------------

\newcommand{\hmwkTitle}{Assignment\ \#1} % Assignment title
\newcommand{\hmwkDueDate}{Monday,\ January\ 1,\ 2012} % Due date
\newcommand{\hmwkClass}{COMPSCI\ 101} % Course/class
\newcommand{\hmwkClassTime}{10:30am} % Class/lecture time
\newcommand{\hmwkClassInstructor}{Jones} % Teacher/lecturer

%----------------------------------------------------------------------------------------
%   TITLE PAGE
%----------------------------------------------------------------------------------------

\title{
\vspace{2in}
\textmd{\textbf{\hmwkClass:\ \hmwkTitle}}\\
\normalsize\vspace{0.1in}\small{Due\ on\ \hmwkDueDate}\\
\vspace{0.1in}\large{\textit{\hmwkClassInstructor\ \hmwkClassTime}}
\vspace{3in}
}

\author{\textbf{\hmwkAuthorName}}
\date{} % Insert date here if you want it to appear below your name

%----------------------------------------------------------------------------------------

\begin{document}

\maketitle

%----------------------------------------------------------------------------------------
%----------------------------------------------------------------------------------------

%\setcounter{tocdepth}{1} % Uncomment this line if you don't want subsections listed in the ToC

\newpage
\tableofcontents
\newpage

%----------------------------------------------------------------------------------------
%   PROBLEM 1
%----------------------------------------------------------------------------------------

% To have just one problem per page, simply put a \clearpage after each problem

\begin{homeworkProblem}[first]
Listing \ref{homework_example} shows a Perl script.

\perlscript{homework_example}{Sample Perl Script With Highlighting}

\lipsum[1]
\end{homeworkProblem}

%----------------------------------------------------------------------------------------
%   PROBLEM 2
%----------------------------------------------------------------------------------------

\begin{homeworkProblem}
\lipsum[2]

\begin{center}
\includegraphics[width=0.75\columnwidth]{example_figure} % Example image
\end{center}

\lipsum[3-5]
}
\end{homeworkProblem}

%----------------------------------------------------------------------------------------

\end{document}


\usepackage{xparse}


to the document preamble and use the following definition for the homeworkProblem environment:

\NewDocumentEnvironment{homeworkProblem}{ o }{%
\stepcounter{homeworkProblemCounter}%
\IfValueTF{#1}
{\renewcommand{\homeworkProblemName}{Part \Alph{homeworkProblemCounter} - #1}}%
{\renewcommand{\homeworkProblemName}{Part \Alph{homeworkProblemCounter}}}%
\section{\homeworkProblemName}