2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Окружение с параметром
Сообщение07.02.2017, 14:36 


19/03/15
291
Вот эта пара команд
Код:
\def\look{\@ifnextchar[{\@lookY}{\par\noindent{\textsf{Замечание. }}}}
\def\@lookY[#1]{{\par\noindent{{Замечание (#1).}}}}
дает такой эффект.
Код:
\look
печатает "Замечание. ", а
Код:
\look[добавка]
печатает "Замечание (добавка). ". То есть команда \look может использоваться с параметром или без. Как сделать тоже самое, но чтобы было environment.
Код:
\begin{look} ... \end{look}
или
Код:
\begin{look}[добавка] ... \end{look}
В стандартных писаниях вроде не нашел.

 Профиль  
                  
 
 Posted automatically
Сообщение07.02.2017, 14:51 
Модератор


19/10/15
1196
 i  Тема перемещена из форума «Помогите решить / разобраться (М)» в форум «TeXнические обсуждения»
Причина переноса: тематика.

 Профиль  
                  
 
 Re: Окружение с параметром
Сообщение07.02.2017, 15:24 
Заслуженный участник
Аватара пользователя


31/01/14
11064
Hogtown
А зачем изобретать велосипед? Если хочется иметь "Замечание" и т.д. воспользуйтесь
Используется синтаксис LaTeX
\newtheorem    % без номера
\newtheorem*  % с номером

и пакетом amsthm

 Профиль  
                  
 
 Re: Окружение с параметром
Сообщение07.02.2017, 15:37 


19/03/15
291
Оно немой параметр [добавка] имеет (как мне надо)?

 Профиль  
                  
 
 Re: Окружение с параметром
Сообщение07.02.2017, 16:02 
Заслуженный участник


28/04/09
1933
Если закрыть глаза на то, что это велосипедостроение... Нужна возможность модифицирования поведения пользовательских команды и окружения в зависимости от того, задан или нет необязательный аргумент. Для этого есть несколько пакетов разной степени популярности и функциональности. Рекомендую обратить взоры на пакет xparse (прежде всего он позволяет задавать произвольное количество обязательных и необязательных аргументов, следующих друг за другом в определенном порядке). Тогда желаемое можно сделать как-то так:
код: [ скачать ] [ спрятать ]
Используется синтаксис LaTeX
\documentclass[14pt]{extarticle}

\usepackage[a4paper, top = 2cm, bottom = 2cm, left = 3cm, right = 1.5cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[T1, T2A]{fontenc}
\usepackage[english, russian]{babel}

\usepackage{xparse}


\newcommand{\PackageName}{\texttt}

\newcommand{\CommandName}[1]{\texttt{\textbackslash #1}}

\newcommand{\EnvironmentName}{\texttt}


\NewDocumentCommand\LookCommand{o}
{%
    \par\noindent{\textsf{Замечание\IfNoValueF{#1}{~(#1)}.\IfNoValueT{#1}{ }}}%
}

\NewDocumentEnvironment{LookEnvironment}{o}
{%
    \LookCommand[#1]\par%
}
{%
    \par%
}


\begin{document}

    \section*{Примеры использования пакета \PackageName{xparse} для~создания команд и~окружений с~необязательными аргументами}

    \LookCommand Пример использования команды \CommandName{LookCommand}.
   
    \LookCommand[второе] Пример использования команды \CommandName{LookCommand} с~необязательным аргументом.
   
    \begin{LookEnvironment}
        Пример использования окружения \EnvironmentName{LookEnvironment}.
    \end{LookEnvironment}
    \begin{LookEnvironment}[четвертое]
        Пример использования окружения \EnvironmentName{LookEnvironment} с~необязательным аргументом.
    \end{LookEnvironment}

\end{document}

 Профиль  
                  
 
 Re: Окружение с параметром
Сообщение07.02.2017, 16:08 


19/03/15
291
Мне здесь не нравится, что надо грузить внешний пакет, в то время как наверняка можно прописать своей короткой прогой. У меня в моем стилевом файле накапливаются такие утилиты; я не люблю грузить лишние пакеты

 Профиль  
                  
 
 Re: Окружение с параметром
Сообщение07.02.2017, 16:37 
Заслуженный участник


28/04/09
1933
Если предполагается, что исходник придется кому-то отдавать, лучше пользоваться стандартными средствами (в данном случае, \newtheorem) без собственных оформительских выдумок.
Если все пишется для себя, то (на мой субъективный вкус) лучше пользоваться сторонними пакетами с (относительно) человекопонятным синтаксисом и риском столкнуться в какой-то момент с изменением этого синтаксиса или необходимостью поиска другого пакета (в связи с кончиной ранее используемого), чем через какое-то время снова разбираться (в случае необходимости внесения изменений) в подобной приведенной в стартовом сообщении темы пакетонезависимой лапше из макросов, автором которой к тому же зачастую является посторонний человек с другим уровнем владения $\TeX$-ом.

 Профиль  
                  
 
 Re: Окружение с параметром
Сообщение07.02.2017, 17:24 
Заслуженный участник
Аватара пользователя


31/01/14
11064
Hogtown
maximav в сообщении #1190516 писал(а):
Мне здесь не нравится, что надо грузить внешний пакет, в то время как наверняка можно прописать своей короткой прогой. У меня в моем стилевом файле накапливаются такие утилиты; я не люблю грузить лишние пакеты

Нш все пакеты одинаково полезны. Но практически любой математик использует amsthm (исключая тех, кто использует ntheorem), amsmath, amssymb и несколько других.

Ну, и как правильно отмечено, далеко не все редакторы обожают пакеты с кучей самопальных команд.

 Профиль  
                  
 
 Re: Окружение с параметром
Сообщение07.02.2017, 21:06 
Заслуженный участник
Аватара пользователя


23/07/05
17973
Москва
maximav в сообщении #1190506 писал(а):
Оно немой параметр [добавка] имеет (как мне надо)?
Имеет.

код: [ скачать ] [ спрятать ]
Используется синтаксис LaTeX
\documentclass[a4paper,10pt]{amsart}

\usepackage{mathtext}
\usepackage{amssymb}
\usepackage[all]{xy}
\usepackage{graphicx}
\usepackage[T2A]{fontenc}
\usepackage[cp1251]{inputenc}
\usepackage[russian,english]{babel}

\newcommand{\onto}{\xrightarrow{\text{\textup{onto}}}}

\newtheoremstyle{myrmk}{3pt}{3pt}{\rmfamily}{\parindent}{\itshape}{.}{.5em}{}
\newtheoremstyle{mydfn}{3pt}{3pt}{\rmfamily}{\parindent}{\bfseries}{.}{.5em}{}
\newtheoremstyle{mypln}{3pt}{3pt}{\itshape}{\parindent}{\bfseries}{.}{.5em}{}

\newenvironment{prf}[1][\proofname]{\par\indent\pushQED{\qed}\itshape#1. \normalfont\ignorespaces}{\popQED}

\swapnumbers
\theoremstyle{myrmk}
\newtheorem{itm}{}[section]
\newtheorem{rmk}[itm]{Remark}
\newtheorem{con}[itm]{Construction}
\theoremstyle{mydfn}
\newtheorem{dfn}[itm]{Definition}
\newtheorem{exm}[itm]{Example}
\theoremstyle{mypln}
\newtheorem{ass}[itm]{Assertion}
\newtheorem{thm}[itm]{Theorem}
\newtheorem{prp}[itm]{Proposition}
\newtheorem{cor}[itm]{Corollary}
\newtheorem{lem}[itm]{Lemma}

Примеры использования.

Используется синтаксис LaTeX
\begin{ass}[a consequence of Lemma 6 of the paper \cite{Ul4}]\label{S1A9}
If a mapping\\$f\colon X\to Y$ has the property $\mathfrak{T^Ea}$ then there exist a mapping $^{\mathfrak A}\pi\colon Y_{\mathfrak A}\onto Y$ and a homeomorphic embedding $f_{\mathfrak A}\colon X\to Y_{\mathfrak A}$ such that $f=^{\mathfrak A}\pi f_{\mathfrak A}$, where $Y_{\mathfrak A}=\mathfrak P(Y,\{Z_{\alpha}\},\{G_{\alpha}\},\{O_{\alpha}\},\{g_{\alpha}\},\alpha\in\mathfrak A)$, $Z_{\alpha}\in\mathfrak E$ and $G_{\alpha}\in\mathfrak a$ for all $\alpha\in\mathfrak A$ \emph{(see \ref{S3C1}--\ref{S3C2})}.
\end{ass}

Используется синтаксис LaTeX
\begin{cor}\label{S2C10}
If a function $g\in B(f)$, a point $y_0\in Y$ and a number $\varepsilon>0$ are given then there exists a neighborhood $Uy_0\subseteq Y$ such that $n_yg<n_{y_0}g+\varepsilon$ for all $y\in Uy_0$.
\end{cor}

\begin{prf}
The open set $U_{g,t}$ for $t=n_{y_0}g+\varepsilon$ is a desirable neighborhood.
\end{prf}

Используется синтаксис LaTeX
\begin{prp}\label{S2P8}
Let $g\in B(f)$, $y_0\in Y$. Then $$n_{y_0}g=\inf\{\sup\{n_yg:y\in Uy_0\}:Uy_0\subseteq Y\ \text{is a neighborhood of the point}\ y_0\}\text.$$
\end{prp}

\begin{prf}[Proof\enskip\normalfont{follows from the definition \ref{S2I5} of the semi-norms $n_y$, $y\in Y$}]
\end{prf}

 Профиль  
                  
 
 Re: Окружение с параметром
Сообщение08.02.2017, 13:37 


19/03/15
291
Спасибо, но теперь появился ненравящийся мне лишний номер. Кажется это и было причиной почему я не стал продолжать "раскопки" у Котельникова по newtheorem. Через * штука не работает. Я в принципе могу добить/решить, но есть надежда, что ларчик просто раскрывается и кто-то знает уже готовый ответ.

 Профиль  
                  
 
 Re: Окружение с параметром
Сообщение08.02.2017, 14:28 
Заслуженный участник
Аватара пользователя


23/07/05
17973
Москва
Я думаю, что просто нужно убрать определение счётчика \newtheorem{itm}{}[section] и его упоминание [itm] во всех последующих командах. Но не проверял.

 Профиль  
                  
 
 Re: Окружение с параметром
Сообщение08.02.2017, 15:38 
Заслуженный участник
Аватара пользователя


31/01/14
11064
Hogtown
Someone в сообщении #1190766 писал(а):
Я думаю, что просто нужно убрать определение счётчика \newtheorem{itm}{}[section]


В данном случае [section] 1) включает определяет thetheorem как \thesection.\arabic{theorem} и 2) зануляет счётчик theorem когда начинается новая секция

Т.е. убрав [section] будет сплошная вдоль секций нумерация. Точно также теоремы можно считать внутри более мелких или более крупных разделов

 Профиль  
                  
 
 Re: Окружение с параметром
Сообщение08.02.2017, 20:17 
Заслуженный участник


28/04/09
1933
maximav в сообщении #1190755 писал(а):
Через * штука не работает. Я в принципе могу добить/решить, но есть надежда, что ларчик просто раскрывается и кто-то знает уже готовый ответ.
Все прекрасно работает:
код: [ скачать ] [ спрятать ]
Используется синтаксис LaTeX
\documentclass[14pt]{extarticle}

\usepackage[a4paper, top = 2cm, bottom = 2cm, left = 3cm, right = 1.5cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[T1, T2A]{fontenc}
\usepackage[english, russian]{babel}

\usepackage{amsthm}


\newcommand{\PackageName}{\texttt}

\newcommand{\CommandName}[1]{\texttt{\textbackslash #1}}

\newcommand{\EnvironmentName}{\texttt}


\newtheoremstyle{RemarkStyle}{}{}{}{0pt}{\sffamily}{.}{ }{}

\theoremstyle{RemarkStyle}

\newtheorem{Remark}{Замечание}

\newtheorem*{Remark*}{Замечание}


\begin{document}

    \section*{Пример использования пакета \PackageName{amsthm} для~создания окружений теорем и~настройки их стилей}

    \begin{Remark}
        Пример использования окружения \EnvironmentName{Remark}.
    \end{Remark}
    \begin{Remark}[второе]
        Пример использования окружения \EnvironmentName{Remark} с~необязательным аргументом.
    \end{Remark}
    \begin{Remark*}
        Пример использования окружения \EnvironmentName{Remark*}.
    \end{Remark*}
    \begin{Remark*}[четвертое]
        Пример использования окружения \EnvironmentName{Remark*} с~необязательным аргументом.
    \end{Remark*}
   
\end{document}
Разумеется, * в названии создаваемого окружения необязательна (в данном случае она нужна только для того, чтобы различать нумерованное [Remark] и ненумерованное [Remark*] окружения).

 Профиль  
                  
 
 Re: Окружение с параметром
Сообщение09.02.2017, 15:43 


19/03/15
291
Эка хитро зарыто было: трюк с \newtheoremstyle. Ни в жизнь не догадаешься. Поиск по Котельникову, Львовскому и Гусссенсу: ни слуху ни духу. Причем, раскопки показали, оно автоматически грузит ntheorem.sty, а последний автогрузится из amsart? да еще без каких-либо оповещений. А где разгадать смысл многочисленных аргументов \newtheoremstyle{}{}{}...? Ну 0pt я конечно прощупал. В документации моего MiKTeX вижу только 3 аргумента.

 Профиль  
                  
 
 Re: Окружение с параметром
Сообщение09.02.2017, 16:22 
Заслуженный участник


28/04/09
1933
maximav в сообщении #1191157 писал(а):
Эка хитро зарыто было: трюк с \newtheoremstyle.
\newtheoremstyle отвечает за настройку внешнего вида создаваемых окружений, без использования этой команды все тоже прекрасно работает (но несколько по-иному выглядит). Команда \newtheorem* (позволяющая создавать ненумерованные теоремы) появляется благодаря использованию пакета amsthm. Об этом сказал Red_Herring еще в самом начале темы:
Red_Herring в сообщении #1190503 писал(а):
А зачем изобретать велосипед? Если хочется иметь "Замечание" и т.д. воспользуйтесь
Используется синтаксис LaTeX
\newtheorem    % без номера
\newtheorem*  % с номером

и пакетом amsthm
maximav в сообщении #1191157 писал(а):
А где разгадать смысл многочисленных аргументов \newtheoremstyle{}{}{}...?
В документации по пакету amsthm (раздел 4.3).

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group